use of org.cerberus.crud.service.ILogEventService in project cerberus-source by cerberustesting.
the class CreateBuildRevisionInvariant method processRequest.
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
* @throws org.cerberus.exception.CerberusException
* @throws org.json.JSONException
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, CerberusException, JSONException {
JSONObject jsonResponse = new JSONObject();
Answer ans = new Answer();
MessageEvent msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", ""));
ans.setResultMessage(msg);
PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
String charset = request.getCharacterEncoding();
response.setContentType("application/json");
// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
/**
* Parsing and securing all required parameters.
*/
// Parameter that are already controled by GUI (no need to decode) --> We SECURE them
Integer seq = -1;
boolean seq_error = false;
try {
if (request.getParameter("seq") != null && !request.getParameter("seq").equals("")) {
seq = Integer.valueOf(policy.sanitize(request.getParameter("seq")));
}
} catch (Exception ex) {
seq_error = true;
}
Integer level = -1;
boolean level_error = false;
try {
if (request.getParameter("level") != null && !request.getParameter("level").equals("")) {
level = Integer.valueOf(policy.sanitize(request.getParameter("level")));
}
} catch (Exception ex) {
level_error = true;
}
// Parameter that needs to be secured --> We SECURE+DECODE them
String system = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("system"), "", charset);
String versionName = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("versionname"), "", charset);
/**
* Checking all constrains before calling the services.
*/
if (StringUtil.isNullOrEmpty(system)) {
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Create").replace("%REASON%", "System name is missing!"));
ans.setResultMessage(msg);
} else if (level_error) {
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Create").replace("%REASON%", "Could not manage to convert level to an integer value!"));
ans.setResultMessage(msg);
} else if (seq_error) {
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Create").replace("%REASON%", "Could not manage to convert sequence to an integer value!"));
ans.setResultMessage(msg);
} else {
/**
* All data seems cleans so we can call the services.
*/
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
IBuildRevisionInvariantService buildRevisionInvariantService = appContext.getBean(IBuildRevisionInvariantService.class);
IFactoryBuildRevisionInvariant factoryBuildRevisionInvariant = appContext.getBean(IFactoryBuildRevisionInvariant.class);
BuildRevisionInvariant buildRevisionInvariantData = factoryBuildRevisionInvariant.create(system, level, seq, versionName);
ans = buildRevisionInvariantService.create(buildRevisionInvariantData);
if (ans.isCodeEquals(MessageEventEnum.DATA_OPERATION_OK.getCode())) {
/**
* Object created. Adding Log entry.
*/
ILogEventService logEventService = appContext.getBean(LogEventService.class);
logEventService.createForPrivateCalls("/CreateBuildRevisionInvariant", "CREATE", "Create BuildRevisionInvariant : ['" + system + "'|'" + level + "'|'" + seq + "']", request);
}
}
/**
* Formating and returning the json result.
*/
jsonResponse.put("messageType", ans.getResultMessage().getMessage().getCodeString());
jsonResponse.put("message", ans.getResultMessage().getDescription());
response.getWriter().print(jsonResponse);
response.getWriter().flush();
}
use of org.cerberus.crud.service.ILogEventService in project cerberus-source by cerberustesting.
the class UpdateBuildRevisionInvariant method processRequest.
/**
* Processes requests for both HTTP <code>GET</code> and <code>POST</code>
* methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException, CerberusException, JSONException {
JSONObject jsonResponse = new JSONObject();
Answer ans = new Answer();
MessageEvent msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", ""));
ans.setResultMessage(msg);
PolicyFactory policy = Sanitizers.FORMATTING.and(Sanitizers.LINKS);
String charset = request.getCharacterEncoding();
response.setContentType("application/json");
// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
/**
* Parsing and securing all required parameters.
*/
// Parameter that are already controled by GUI (no need to decode) --> We SECURE them
Integer seq = -1;
boolean seq_error = false;
try {
if (request.getParameter("seq") != null && !request.getParameter("seq").equals("")) {
seq = Integer.valueOf(policy.sanitize(request.getParameter("seq")));
}
} catch (Exception ex) {
seq_error = true;
}
Integer level = -1;
boolean level_error = false;
try {
if (request.getParameter("level") != null && !request.getParameter("level").equals("")) {
level = Integer.valueOf(policy.sanitize(request.getParameter("level")));
}
} catch (Exception ex) {
level_error = true;
}
// Parameter that needs to be secured --> We SECURE+DECODE them
String system = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("system"), "", charset);
String versionName = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter("versionname"), "", charset);
/**
* Checking all constrains before calling the services.
*/
if (StringUtil.isNullOrEmpty(system)) {
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Update").replace("%REASON%", "System name is missing!"));
ans.setResultMessage(msg);
} else if (level_error) {
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Update").replace("%REASON%", "Could not manage to convert level to an integer value!"));
ans.setResultMessage(msg);
} else if (seq_error) {
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Update").replace("%REASON%", "Could not manage to convert sequence to an integer value!"));
ans.setResultMessage(msg);
} else {
/**
* All data seems cleans so we can call the services.
*/
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
IBuildRevisionInvariantService buildRevisionInvariantService = appContext.getBean(IBuildRevisionInvariantService.class);
AnswerItem resp = buildRevisionInvariantService.readByKey(system, level, seq);
if (!(resp.isCodeEquals(MessageEventEnum.DATA_OPERATION_OK.getCode()) && resp.getItem() != null)) {
/**
* Object could not be found. We stop here and report the error.
*/
msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_EXPECTED);
msg.setDescription(msg.getDescription().replace("%ITEM%", "BuildRevisionInvariant").replace("%OPERATION%", "Update").replace("%REASON%", "BuildRevisionInvariant does not exist."));
ans.setResultMessage(msg);
} else {
/**
* The service was able to perform the query and confirm the
* object exist, then we can update it.
*/
BuildRevisionInvariant buildRevisionInvariantData = (BuildRevisionInvariant) resp.getItem();
buildRevisionInvariantData.setSystem(system);
buildRevisionInvariantData.setLevel(level);
buildRevisionInvariantData.setSeq(seq);
buildRevisionInvariantData.setVersionName(versionName);
ans = buildRevisionInvariantService.update(buildRevisionInvariantData.getSystem(), buildRevisionInvariantData.getLevel(), buildRevisionInvariantData.getSeq(), buildRevisionInvariantData);
if (ans.isCodeEquals(MessageEventEnum.DATA_OPERATION_OK.getCode())) {
/**
* Update was successful. Adding Log entry.
*/
ILogEventService logEventService = appContext.getBean(LogEventService.class);
logEventService.createForPrivateCalls("/UpdateBuildRevisionInvariant", "UPDATE", "Updated BuildRevisionInvariant : ['" + system + "'|'" + level + "'|'" + seq + "']", request);
}
}
}
/**
* Formating and returning the json result.
*/
jsonResponse.put("messageType", ans.getResultMessage().getMessage().getCodeString());
jsonResponse.put("message", ans.getResultMessage().getDescription());
response.getWriter().print(jsonResponse);
response.getWriter().flush();
}
use of org.cerberus.crud.service.ILogEventService in project cerberus-source by cerberustesting.
the class AddToExecutionQueueV001 method processRequest.
/**
* Process request for both GET and POST method.
*
* <p>
* Request processing is divided in two parts:
* <ol>
* <li>Getting all test cases which have been sent to this servlet;</li>
* <li>Try to insert all these test cases to the execution queue.</li>
* </ol>
* </p>
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
final String charset = request.getCharacterEncoding();
Date requestDate = new Date();
// Loading Services.
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
inQueueService = appContext.getBean(ITestCaseExecutionQueueService.class);
inQueueFactoryService = appContext.getBean(IFactoryTestCaseExecutionQueue.class);
executionThreadService = appContext.getBean(IExecutionThreadPoolService.class);
testCaseService = appContext.getBean(ITestCaseService.class);
invariantService = appContext.getBean(IInvariantService.class);
applicationService = appContext.getBean(IApplicationService.class);
testCaseCountryService = appContext.getBean(ITestCaseCountryService.class);
campaignParameterService = appContext.getBean(ICampaignParameterService.class);
// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
// Default message to unexpected error.
MessageEvent msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", ""));
AnswerItem<List<TestCase>> testcases = null;
/**
* Adding Log entry.
*/
ILogEventService logEventService = appContext.getBean(ILogEventService.class);
logEventService.createForPublicCalls("/AddToExecutionQueueV001", "CALL", "AddToExecutionQueueV001 called : " + request.getRequestURL(), request);
// Parsing all parameters.
// Execution scope parameters : Campaign, TestCases, Countries, Environment, Browser.
String campaign = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_CAMPAIGN), null, charset);
List<Map<String, String>> selectedTests;
selectedTests = ParameterParserUtil.parseListMapParamAndDecode(request.getParameterValues(PARAMETER_SELECTED_TEST), null, charset);
List<String> countries;
countries = ParameterParserUtil.parseListParamAndDecode(request.getParameterValues(PARAMETER_COUNTRY), null, charset);
List<String> environments;
environments = ParameterParserUtil.parseListParamAndDecodeAndDeleteEmptyValue(request.getParameterValues(PARAMETER_ENVIRONMENT), null, charset);
List<String> browsers;
browsers = ParameterParserUtil.parseListParamAndDecode(request.getParameterValues(PARAMETER_BROWSER), null, charset);
// Execution parameters.
String tag = ParameterParserUtil.parseStringParam(request.getParameter(PARAMETER_TAG), "");
String robot = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_ROBOT), null, charset);
String robotIP = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_ROBOT_IP), null, charset);
String robotPort = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_ROBOT_PORT), null, charset);
String browserVersion = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_BROWSER_VERSION), null, charset);
String platform = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_PLATFORM), null, charset);
String screenSize = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_SCREENSIZE), null, charset);
int manualURL = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_MANUAL_URL), DEFAULT_VALUE_MANUAL_URL, charset);
String manualHost = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_HOST), null, charset);
String manualContextRoot = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_CONTEXT_ROOT), null, charset);
String manualLoginRelativeURL = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_LOGIN_RELATIVE_URL), null, charset);
String manualEnvData = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_ENV_DATA), null, charset);
int screenshot = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_SCREENSHOT), DEFAULT_VALUE_SCREENSHOT, charset);
int verbose = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_VERBOSE), DEFAULT_VALUE_VERBOSE, charset);
String timeout = request.getParameter(PARAMETER_TIMEOUT);
int pageSource = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_PAGE_SOURCE), DEFAULT_VALUE_PAGE_SOURCE, charset);
int seleniumLog = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_SELENIUM_LOG), DEFAULT_VALUE_SELENIUM_LOG, charset);
int retries = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_RETRIES), DEFAULT_VALUE_RETRIES, charset);
String manualExecution = ParameterParserUtil.parseStringParamAndDecode(request.getParameter(PARAMETER_MANUAL_EXECUTION), DEFAULT_VALUE_MANUAL_EXECUTION, charset);
int priority = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_EXEPRIORITY), DEFAULT_VALUE_PRIORITY, charset);
if (manualExecution.equals("")) {
manualExecution = DEFAULT_VALUE_MANUAL_EXECUTION;
}
String outputFormat = ParameterParserUtil.parseStringParamAndDecode(request.getParameter(PARAMETER_OUTPUTFORMAT), DEFAULT_VALUE_OUTPUTFORMAT, charset);
// Defining help message.
String helpMessage = "This servlet is used to add to Cerberus execution queue a list of execution. Execution list will be calculated from cartesian product of " + "testcase, country, environment and browser list. Those list can be defined from the associated servlet parameter but can also be defined from campaign directy inside Cerberus.\n" + "List defined from servlet overwrite the list defined from the campaign. All other execution parameters will be taken to each execution.\n" + "Available parameters:\n" + "- " + PARAMETER_CAMPAIGN + " : Campaign name from which testcase, countries, environment and browser can be defined from Cerberus. [" + campaign + "]\n" + "- " + PARAMETER_SELECTED_TEST + " : List of testCase to trigger. That list overwrite the list coming from the Campaign (if defined). Ex : " + PARAMETER_SELECTED_TEST + "=" + PARAMETER_SELECTED_TEST_KEY_TEST + "=Cerberus%26" + PARAMETER_SELECTED_TEST_KEY_TESTCASE + "=9644A. [" + selectedTests + "]\n" + "- " + PARAMETER_COUNTRY + " : List of countries to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + countries + "]\n" + "- " + PARAMETER_ENVIRONMENT + " : List of environment to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + environments + "]\n" + "- " + PARAMETER_BROWSER + " : List of browser to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + browsers + "]\n" + "- " + PARAMETER_ROBOT + " : Robot Name that will be used for every execution triggered. [" + robot + "]\n" + "- " + PARAMETER_ROBOT_IP + " : Robot IP that will be used for every execution triggered. [" + robotIP + "]\n" + "- " + PARAMETER_ROBOT_PORT + " : Robot Port that will be used for every execution triggered. [" + robotPort + "]\n" + "- " + PARAMETER_BROWSER_VERSION + " : Browser Version that will be used for every execution triggered. [" + browserVersion + "]\n" + "- " + PARAMETER_PLATFORM + " : Platform that will be used for every execution triggered. [" + platform + "]\n" + "- " + PARAMETER_SCREENSIZE + " : Size of the screen that will be used for every execution triggered. [" + screenSize + "]\n" + "- " + PARAMETER_MANUAL_URL + " : Activate (1) or not (0) the Manual URL of the application to execute. If activated the 4 parameters after are necessary. [" + manualURL + "]\n" + "- " + PARAMETER_MANUAL_HOST + " : Host of the application to test (only used when " + PARAMETER_MANUAL_URL + " is activated). [" + manualHost + "]\n" + "- " + PARAMETER_MANUAL_CONTEXT_ROOT + " : Context root of the application to test (only used when " + PARAMETER_MANUAL_URL + " is activated). [" + manualContextRoot + "]\n" + "- " + PARAMETER_MANUAL_LOGIN_RELATIVE_URL + " : Relative login URL of the application (only used when " + PARAMETER_MANUAL_URL + " is activated). [" + manualLoginRelativeURL + "]\n" + "- " + PARAMETER_MANUAL_ENV_DATA + " : Environment where to get the test data when a " + PARAMETER_MANUAL_URL + " is defined. (only used when manualURL is active). [" + manualEnvData + "]\n" + "- " + PARAMETER_TAG + " : Tag that will be used for every execution triggered. [" + tag + "]\n" + "- " + PARAMETER_SCREENSHOT + " : Activate or not the screenshots for every execution triggered. [" + screenshot + "]\n" + "- " + PARAMETER_VERBOSE + " : Verbose level for every execution triggered. [" + verbose + "]\n" + "- " + PARAMETER_TIMEOUT + " : Timeout used for the action that will be used for every execution triggered. [" + timeout + "]\n" + "- " + PARAMETER_PAGE_SOURCE + " : Record Page Source during for every execution triggered. [" + pageSource + "]\n" + "- " + PARAMETER_SELENIUM_LOG + " : Get the SeleniumLog at the end of the execution for every execution triggered. [" + seleniumLog + "]\n" + "- " + PARAMETER_MANUAL_EXECUTION + " : Execute testcase in manual mode for every execution triggered. [" + manualExecution + "]\n" + "- " + PARAMETER_RETRIES + " : Number of tries if the result is not OK for every execution triggered. [" + retries + "]\n" + "- " + PARAMETER_EXEPRIORITY + " : Priority that will be used in the queue for every execution triggered. [" + priority + "]\n";
// try {
// Checking the parameter validity.
StringBuilder errorMessage = new StringBuilder();
boolean error = false;
if (tag == null || tag.isEmpty()) {
if (request.getRemoteUser() != null) {
tag = request.getRemoteUser();
}
if (tag.length() > 0) {
tag += ".";
}
if (campaign != null) {
tag += campaign;
}
if (tag.length() > 0) {
tag += ".";
}
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
String mytimestamp = sdf.format(timestamp);
tag += mytimestamp;
} else if (tag.length() > 255) {
errorMessage.append("Error - Parameter " + PARAMETER_TAG + " is too big. Maximum size if 255. Current size is : " + tag.length());
error = true;
}
if (campaign != null && !campaign.isEmpty()) {
final AnswerItem<Map<String, List<String>>> parsedCampaignParameters = campaignParameterService.parseParametersByCampaign(campaign);
if (parsedCampaignParameters.isCodeEquals(MessageEventEnum.DATA_OPERATION_OK.getCode())) {
// If parameters are already defined from request, we ignore the campaign values.
if (countries == null || countries.isEmpty()) {
countries = parsedCampaignParameters.getItem().get(CampaignParameter.COUNTRY_PARAMETER);
}
if (environments == null || environments.isEmpty()) {
environments = parsedCampaignParameters.getItem().get(CampaignParameter.ENVIRONMENT_PARAMETER);
}
if (browsers == null || browsers.isEmpty()) {
browsers = parsedCampaignParameters.getItem().get(CampaignParameter.BROWSER_PARAMETER);
}
}
if ((countries != null) && (selectedTests == null || selectedTests.isEmpty())) {
// If no countries are found, there is no need to get the testcase list. None will be returned.
selectedTests = new ArrayList<>();
testcases = testCaseService.findTestCaseByCampaignNameAndCountries(campaign, countries.toArray(new String[countries.size()]));
ListIterator<TestCase> it = testcases.getItem().listIterator();
while (it.hasNext()) {
TestCase str = it.next();
selectedTests.add(new HashMap<String, String>() {
{
put(PARAMETER_SELECTED_TEST_KEY_TEST, str.getTest());
put(PARAMETER_SELECTED_TEST_KEY_TESTCASE, str.getTestCase());
}
});
}
}
}
if (countries == null || countries.isEmpty()) {
errorMessage.append("Error - No Country defined. You can either feed it with parameter '" + PARAMETER_COUNTRY + "' or add it into the campaign definition.");
error = true;
}
if (browsers == null || browsers.isEmpty()) {
errorMessage.append("Error - No Browser defined. You can either feed it with parameter '" + PARAMETER_BROWSER + "' or add it into the campaign definition.");
error = true;
}
if (selectedTests == null || selectedTests.isEmpty()) {
errorMessage.append("Error - No TestCases defined. You can either feed it with parameter '" + PARAMETER_SELECTED_TEST + "' or add it into the campaign definition.");
error = true;
}
if (manualURL >= 1) {
if (manualHost == null || manualEnvData == null) {
errorMessage.append("Error - ManualURL has been activated but no ManualHost or Manual Environment defined.");
error = true;
}
} else if (environments == null || environments.isEmpty()) {
errorMessage.append("Error - No Environment defined (and " + PARAMETER_MANUAL_URL + " not activated). You can either feed it with parameter '" + PARAMETER_ENVIRONMENT + "' or add it into the campaign definition.");
error = true;
}
int nbExe = 0;
JSONArray jsonArray = new JSONArray();
String user = request.getRemoteUser() == null ? "" : request.getRemoteUser();
// Starting the request only if previous parameters exist.
if (!error) {
// Create Tag when exist.
if (!StringUtil.isNullOrEmpty(tag)) {
// We create or update it.
ITagService tagService = appContext.getBean(ITagService.class);
tagService.createAuto(tag, campaign, user);
}
// Part 1: Getting all possible xecution from test cases + countries + environments + browsers which have been sent to this servlet.
Map<String, String> invariantEnv = invariantService.readToHashMapGp1StringByIdname("ENVIRONMENT", "");
List<TestCaseExecutionQueue> toInserts = new ArrayList<TestCaseExecutionQueue>();
try {
LOG.debug("Nb of TestCase : " + selectedTests.size());
for (Map<String, String> selectedTest : selectedTests) {
String test = selectedTest.get(PARAMETER_SELECTED_TEST_KEY_TEST);
String testCase = selectedTest.get(PARAMETER_SELECTED_TEST_KEY_TESTCASE);
TestCase tc = testCaseService.convert(testCaseService.readByKey(test, testCase));
// TestCases that are not active are not inserted into queue.
if (tc.getTcActive().equals("Y")) {
// We only insert testcase that exist for the given country.
for (TestCaseCountry country : testCaseCountryService.convert(testCaseCountryService.readByTestTestCase(null, test, testCase))) {
if (countries.contains(country.getCountry())) {
// for each environment we test that correspondng gp1 is compatible with testcase environment flag activation.
for (String environment : environments) {
String envGp1 = invariantEnv.get(environment);
if (((envGp1.equals("PROD")) && (tc.getActivePROD().equalsIgnoreCase("Y"))) || ((envGp1.equals("UAT")) && (tc.getActiveUAT().equalsIgnoreCase("Y"))) || ((envGp1.equals("QA")) && (tc.getActiveQA().equalsIgnoreCase("Y"))) || (envGp1.equals("DEV"))) {
// Getting Application in order to check application type against browser.
Application app = applicationService.convert(applicationService.readByKey(tc.getApplication()));
if ((app != null) && (app.getType() != null) && app.getType().equalsIgnoreCase(Application.TYPE_GUI)) {
for (String browser : browsers) {
try {
toInserts.add(inQueueFactoryService.create(test, testCase, country.getCountry(), environment, robot, robotIP, robotPort, browser, browserVersion, platform, screenSize, manualURL, manualHost, manualContextRoot, manualLoginRelativeURL, manualEnvData, tag, screenshot, verbose, timeout, pageSource, seleniumLog, 0, retries, manualExecution, priority, user, null, null, null));
} catch (FactoryCreationException e) {
LOG.error("Unable to insert record due to: " + e, e);
LOG.error("test: " + test + "-" + testCase + "-" + country.getCountry() + "-" + environment + "-" + robot);
}
}
} else {
// Application does not support browser so we force an empty value.
LOG.debug("Forcing Browser to empty value. Application type=" + app.getType());
try {
toInserts.add(inQueueFactoryService.create(test, testCase, country.getCountry(), environment, robot, robotIP, robotPort, "", browserVersion, platform, screenSize, manualURL, manualHost, manualContextRoot, manualLoginRelativeURL, manualEnvData, tag, screenshot, verbose, timeout, pageSource, seleniumLog, 0, retries, manualExecution, priority, user, null, null, null));
} catch (FactoryCreationException e) {
LOG.error("Unable to insert record due to: " + e, e);
LOG.error("test: " + test + "-" + testCase + "-" + country.getCountry() + "-" + environment + "-" + robot);
}
}
} else {
LOG.debug("Env group not active for testcase : " + environment);
}
}
} else {
LOG.debug("Country does not match. " + countries + " " + country.getCountry());
}
}
} else {
LOG.debug("TestCase not Active.");
}
}
} catch (CerberusException ex) {
LOG.warn(ex);
}
// Part 2: Try to insert all these test cases to the execution queue.
List<String> errorMessages = new ArrayList<String>();
for (TestCaseExecutionQueue toInsert : toInserts) {
try {
inQueueService.convert(inQueueService.create(toInsert));
nbExe++;
JSONObject value = new JSONObject();
value.put("queueId", toInsert.getId());
value.put("test", toInsert.getTest());
value.put("testcase", toInsert.getTestCase());
value.put("country", toInsert.getCountry());
value.put("environment", toInsert.getEnvironment());
jsonArray.put(value);
} catch (CerberusException e) {
String errorMessageTmp = "Unable to insert " + toInsert.toString() + " due to " + e.getMessage();
LOG.warn(errorMessageTmp);
errorMessages.add(errorMessageTmp);
continue;
} catch (JSONException ex) {
java.util.logging.Logger.getLogger(AddToExecutionQueueV001.class.getName()).log(Level.SEVERE, null, ex);
}
}
// Part 3 : Trigger JobQueue
try {
executionThreadService.executeNextInQueueAsynchroneously(false);
} catch (CerberusException ex) {
String errorMessageTmp = "Unable to feed the execution queue due to " + ex.getMessage();
LOG.warn(errorMessageTmp);
errorMessages.add(errorMessageTmp);
}
if (!errorMessages.isEmpty()) {
StringBuilder errorMessageTmp = new StringBuilder();
for (String item : errorMessages) {
errorMessageTmp.append(item);
errorMessageTmp.append(LINE_SEPARATOR);
}
errorMessage.append(errorMessageTmp.toString());
}
errorMessage.append(nbExe);
errorMessage.append(" execution(s) succesfully inserted to queue. ");
if (testcases.getResultMessage().getSource() == MessageEventEnum.DATA_OPERATION_WARNING_PARTIAL_RESULT) {
errorMessage.append(testcases.getResultMessage().getDescription());
}
// Message that everything went fine.
msg = new MessageEvent(MessageEventEnum.GENERIC_OK);
} else {
// In case of errors, we display the help message.
// errorMessage.append(helpMessage);
}
// Init Answer with potencial error from Parsing parameter.
AnswerItem answer = new AnswerItem(msg);
switch(outputFormat) {
case "json":
try {
JSONObject jsonResponse = new JSONObject();
jsonResponse.put("messageType", answer.getResultMessage().getMessage().getCodeString());
jsonResponse.put("message", errorMessage.toString());
jsonResponse.put("helpMessage", helpMessage);
jsonResponse.put("tag", tag);
jsonResponse.put("nbExe", nbExe);
jsonResponse.put("queueList", jsonArray);
response.setContentType("application/json");
response.setCharacterEncoding("utf8");
response.getWriter().print(jsonResponse.toString());
} catch (JSONException e) {
LOG.warn(e);
// returns a default error message with the json format that is able to be parsed by the client-side
response.setContentType("application/json");
response.setCharacterEncoding("utf8");
response.getWriter().print(AnswerUtil.createGenericErrorAnswer());
}
break;
default:
response.setContentType("text");
response.setCharacterEncoding("utf8");
if (error) {
errorMessage.append("\n");
errorMessage.append(helpMessage);
}
response.getWriter().print(errorMessage.toString());
}
// } catch (Exception e) {
// LOG.error(e);
// out.println(helpMessage);
// out.println(e.toString());
// }
}
use of org.cerberus.crud.service.ILogEventService in project cerberus-source by cerberustesting.
the class AddToExecutionQueueV002 method processRequest.
/**
* Process request for both GET and POST method.
*
* <p>
* Request processing is divided in two parts:
* <ol>
* <li>Getting all test cases which have been sent to this servlet;</li>
* <li>Try to insert all these test cases to the execution queue.</li>
* </ol>
* </p>
*
* @param request
* @param response
* @throws ServletException
* @throws IOException
*/
private void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
final String charset = request.getCharacterEncoding();
Date requestDate = new Date();
// Loading Services.
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
inQueueService = appContext.getBean(ITestCaseExecutionQueueService.class);
inQueueFactoryService = appContext.getBean(IFactoryTestCaseExecutionQueue.class);
executionThreadService = appContext.getBean(IExecutionThreadPoolService.class);
testCaseService = appContext.getBean(ITestCaseService.class);
invariantService = appContext.getBean(IInvariantService.class);
applicationService = appContext.getBean(IApplicationService.class);
testCaseCountryService = appContext.getBean(ITestCaseCountryService.class);
campaignParameterService = appContext.getBean(ICampaignParameterService.class);
countryEnvParamService = appContext.getBean(ICountryEnvParamService.class);
// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
// Default message to unexpected error.
MessageEvent msg = new MessageEvent(MessageEventEnum.DATA_OPERATION_ERROR_UNEXPECTED);
msg.setDescription(msg.getDescription().replace("%DESCRIPTION%", ""));
AnswerItem<List<TestCase>> testcases = null;
/**
* Adding Log entry.
*/
ILogEventService logEventService = appContext.getBean(ILogEventService.class);
logEventService.createForPublicCalls("/AddToExecutionQueueV002", "CALL", "AddToExecutionQueueV002 called : " + request.getRequestURL(), request);
// Parsing all parameters.
// Execution scope parameters : Campaign, TestCases, Countries, Environment, Browser.
String campaign = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_CAMPAIGN), null, charset);
List<String> selectTest;
selectTest = ParameterParserUtil.parseListParamAndDecode(request.getParameterValues(PARAMETER_TEST), null, charset);
List<String> selectTestCase;
selectTestCase = ParameterParserUtil.parseListParamAndDecode(request.getParameterValues(PARAMETER_TESTCASE), null, charset);
List<String> countries;
countries = ParameterParserUtil.parseListParamAndDecode(request.getParameterValues(PARAMETER_COUNTRY), null, charset);
List<String> environments;
environments = ParameterParserUtil.parseListParamAndDecodeAndDeleteEmptyValue(request.getParameterValues(PARAMETER_ENVIRONMENT), null, charset);
List<String> browsers = new ArrayList<>();
;
browsers = ParameterParserUtil.parseListParamAndDecode(request.getParameterValues(PARAMETER_BROWSER), browsers, charset);
// Execution parameters.
String tag = ParameterParserUtil.parseStringParam(request.getParameter(PARAMETER_TAG), "");
String robot = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_ROBOT), null, charset);
String robotIP = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_ROBOT_IP), null, charset);
String robotPort = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_ROBOT_PORT), null, charset);
String browserVersion = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_BROWSER_VERSION), null, charset);
String platform = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_PLATFORM), null, charset);
String screenSize = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_SCREENSIZE), null, charset);
int manualURL = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_MANUAL_URL), DEFAULT_VALUE_MANUAL_URL, charset);
String manualHost = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_HOST), null, charset);
String manualContextRoot = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_CONTEXT_ROOT), null, charset);
String manualLoginRelativeURL = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_LOGIN_RELATIVE_URL), null, charset);
String manualEnvData = ParameterParserUtil.parseStringParamAndDecodeAndSanitize(request.getParameter(PARAMETER_MANUAL_ENV_DATA), null, charset);
int screenshot = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_SCREENSHOT), DEFAULT_VALUE_SCREENSHOT, charset);
int verbose = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_VERBOSE), DEFAULT_VALUE_VERBOSE, charset);
String timeout = request.getParameter(PARAMETER_TIMEOUT);
int pageSource = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_PAGE_SOURCE), DEFAULT_VALUE_PAGE_SOURCE, charset);
int seleniumLog = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_SELENIUM_LOG), DEFAULT_VALUE_SELENIUM_LOG, charset);
int retries = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_RETRIES), DEFAULT_VALUE_RETRIES, charset);
String manualExecution = ParameterParserUtil.parseStringParamAndDecode(request.getParameter(PARAMETER_MANUAL_EXECUTION), DEFAULT_VALUE_MANUAL_EXECUTION, charset);
int priority = ParameterParserUtil.parseIntegerParamAndDecode(request.getParameter(PARAMETER_EXEPRIORITY), DEFAULT_VALUE_PRIORITY, charset);
if (manualExecution.equals("")) {
manualExecution = DEFAULT_VALUE_MANUAL_EXECUTION;
}
String outputFormat = ParameterParserUtil.parseStringParamAndDecode(request.getParameter(PARAMETER_OUTPUTFORMAT), DEFAULT_VALUE_OUTPUTFORMAT, charset);
// Defining help message.
String helpMessage = "This servlet is used to add to Cerberus execution queue a list of execution. Execution list will be calculated from cartesian product of " + "testcase, country, environment and browser list. Those list can be defined from the associated servlet parameter but can also be defined from campaign directy inside Cerberus.\n" + "List defined from servlet overwrite the list defined from the campaign. All other execution parameters will be taken to each execution.\n" + "Available parameters:\n" + "- " + PARAMETER_CAMPAIGN + " : Campaign name from which testcase, countries, environment and browser can be defined from Cerberus. [" + campaign + "]\n" + "- " + PARAMETER_TEST + " : List of test to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + selectTest + "]\n" + "- " + PARAMETER_TESTCASE + " : List of testCase to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + selectTestCase + "]\n" + "- " + PARAMETER_COUNTRY + " : List of countries to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + countries + "]\n" + "- " + PARAMETER_ENVIRONMENT + " : List of environment to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + environments + "]\n" + "- " + PARAMETER_BROWSER + " : List of browser to trigger. That list overwrite the list coming from the Campaign (if defined).. [" + browsers + "]\n" + "- " + PARAMETER_ROBOT + " : Robot Name that will be used for every execution triggered. [" + robot + "]\n" + "- " + PARAMETER_ROBOT_IP + " : Robot IP that will be used for every execution triggered. [" + robotIP + "]\n" + "- " + PARAMETER_ROBOT_PORT + " : Robot Port that will be used for every execution triggered. [" + robotPort + "]\n" + "- " + PARAMETER_BROWSER_VERSION + " : Browser Version that will be used for every execution triggered. [" + browserVersion + "]\n" + "- " + PARAMETER_PLATFORM + " : Platform that will be used for every execution triggered. [" + platform + "]\n" + "- " + PARAMETER_SCREENSIZE + " : Size of the screen that will be used for every execution triggered. [" + screenSize + "]\n" + "- " + PARAMETER_MANUAL_URL + " : Activate (1) or not (0) the Manual URL of the application to execute. If activated the 4 parameters after are necessary. [" + manualURL + "]\n" + "- " + PARAMETER_MANUAL_HOST + " : Host of the application to test (only used when " + PARAMETER_MANUAL_URL + " is activated). [" + manualHost + "]\n" + "- " + PARAMETER_MANUAL_CONTEXT_ROOT + " : Context root of the application to test (only used when " + PARAMETER_MANUAL_URL + " is activated). [" + manualContextRoot + "]\n" + "- " + PARAMETER_MANUAL_LOGIN_RELATIVE_URL + " : Relative login URL of the application (only used when " + PARAMETER_MANUAL_URL + " is activated). [" + manualLoginRelativeURL + "]\n" + "- " + PARAMETER_MANUAL_ENV_DATA + " : Environment where to get the test data when a " + PARAMETER_MANUAL_URL + " is defined. (only used when manualURL is active). [" + manualEnvData + "]\n" + "- " + PARAMETER_TAG + " : Tag that will be used for every execution triggered. [" + tag + "]\n" + "- " + PARAMETER_SCREENSHOT + " : Activate or not the screenshots for every execution triggered. [" + screenshot + "]\n" + "- " + PARAMETER_VERBOSE + " : Verbose level for every execution triggered. [" + verbose + "]\n" + "- " + PARAMETER_TIMEOUT + " : Timeout used for the action that will be used for every execution triggered. [" + timeout + "]\n" + "- " + PARAMETER_PAGE_SOURCE + " : Record Page Source during for every execution triggered. [" + pageSource + "]\n" + "- " + PARAMETER_SELENIUM_LOG + " : Get the SeleniumLog at the end of the execution for every execution triggered. [" + seleniumLog + "]\n" + "- " + PARAMETER_MANUAL_EXECUTION + " : Execute testcase in manual mode for every execution triggered. [" + manualExecution + "]\n" + "- " + PARAMETER_RETRIES + " : Number of tries if the result is not OK for every execution triggered. [" + retries + "]\n" + "- " + PARAMETER_EXEPRIORITY + " : Priority that will be used in the queue for every execution triggered. [" + priority + "]\n" + "- " + PARAMETER_OUTPUTFORMAT + " : Format of the servlet output. can be compact, json [" + outputFormat + "]\n";
// try {
// Checking the parameter validity.
StringBuilder errorMessage = new StringBuilder();
boolean error = false;
if (tag == null || tag.isEmpty()) {
if (request.getRemoteUser() != null) {
tag = request.getRemoteUser();
}
if (tag.length() > 0) {
tag += ".";
}
if (campaign != null) {
tag += campaign;
}
if (tag.length() > 0) {
tag += ".";
}
Timestamp timestamp = new Timestamp(System.currentTimeMillis());
String mytimestamp = sdf.format(timestamp);
tag += mytimestamp;
} else if (tag.length() > 255) {
errorMessage.append("Error - Parameter ").append(PARAMETER_TAG).append(" is too big. Maximum size if 255. Current size is : ").append(tag.length()).append("\n");
error = true;
}
if (campaign != null && !campaign.isEmpty()) {
final AnswerItem<Map<String, List<String>>> parsedCampaignParameters = campaignParameterService.parseParametersByCampaign(campaign);
if (parsedCampaignParameters.isCodeEquals(MessageEventEnum.DATA_OPERATION_OK.getCode())) {
// If parameters are already defined from request, we ignore the campaign values.
if (countries == null || countries.isEmpty()) {
countries = parsedCampaignParameters.getItem().get(CampaignParameter.COUNTRY_PARAMETER);
}
if (environments == null || environments.isEmpty()) {
environments = parsedCampaignParameters.getItem().get(CampaignParameter.ENVIRONMENT_PARAMETER);
}
if (browsers == null || browsers.isEmpty()) {
browsers = parsedCampaignParameters.getItem().get(CampaignParameter.BROWSER_PARAMETER);
}
}
if ((countries != null) && (selectTest == null || selectTest.isEmpty())) {
// If no countries are found, there is no need to get the testcase list. None will be returned.
selectTest = new ArrayList<>();
selectTestCase = new ArrayList<>();
testcases = testCaseService.findTestCaseByCampaignNameAndCountries(campaign, countries.toArray(new String[countries.size()]));
for (TestCase campaignTestCase : testcases.getItem()) {
selectTest.add(campaignTestCase.getTest());
selectTestCase.add(campaignTestCase.getTestCase());
}
}
}
if (countries == null || countries.isEmpty()) {
errorMessage.append("Error - No Country defined. You can either feed it with parameter '" + PARAMETER_COUNTRY + "' or add it into the campaign definition.\n");
error = true;
}
if ((StringUtil.isNullOrEmpty(robot)) && (browsers == null || browsers.isEmpty())) {
errorMessage.append("Error - No Browser defined. You can either feed it with parameter '" + PARAMETER_BROWSER + "' or add it into the campaign definition.\n");
error = true;
}
if (selectTest == null || selectTest.isEmpty() || selectTestCase == null || selectTestCase.isEmpty()) {
errorMessage.append("Error - No TestCases defined. You can either feed it with parameters '" + PARAMETER_TEST + "' and '" + PARAMETER_TESTCASE + "' or add it into the campaign definition.\n");
error = true;
}
if ((selectTest != null) && (selectTestCase != null) && (selectTest.size() != selectTestCase.size())) {
errorMessage.append("Error - Test list size (").append(selectTest.size()).append(") is not the same as testcase list size (").append(selectTestCase.size()).append("). Please check that both list are consistent.\n");
error = true;
}
if (manualURL >= 1) {
if (manualHost == null || manualEnvData == null) {
errorMessage.append("Error - ManualURL has been activated but no ManualHost or Manual Environment defined.\n");
error = true;
}
} else if (environments == null || environments.isEmpty()) {
errorMessage.append("Error - No Environment defined (and " + PARAMETER_MANUAL_URL + " not activated). You can either feed it with parameter '" + PARAMETER_ENVIRONMENT + "' or add it into the campaign definition.\n");
error = true;
}
int nbExe = 0;
JSONArray jsonArray = new JSONArray();
String user = request.getRemoteUser() == null ? "" : request.getRemoteUser();
int nbtestcasenotactive = 0;
int nbtestcaseenvgroupnotallowed = 0;
int nbenvnotexist = 0;
boolean tagAlreadyAdded = false;
int nbbrowser = 0;
if (browsers.isEmpty()) {
nbbrowser = 1;
} else {
nbbrowser = browsers.size();
}
int nbtescase = selectTest.size();
int nbenv = environments.size();
int nbcountries = countries.size();
// Starting the request only if previous parameters exist.
if (!error) {
// Part 1: Getting all possible Execution from test cases + countries + environments + browsers which have been sent to this servlet.
Map<String, String> invariantEnv = invariantService.readToHashMapGp1StringByIdname("ENVIRONMENT", "");
List<TestCaseExecutionQueue> toInserts = new ArrayList<TestCaseExecutionQueue>();
try {
HashMap<String, CountryEnvParam> envMap = new HashMap<>();
LOG.debug("Loading all environments.");
for (CountryEnvParam envParam : countryEnvParamService.convert(countryEnvParamService.readActiveBySystem(null))) {
envMap.put(envParam.getSystem() + LOCAL_SEPARATOR + envParam.getCountry() + LOCAL_SEPARATOR + envParam.getEnvironment(), envParam);
}
LOG.debug("Nb of TestCase : " + selectTest.size());
for (int i = 0; i < selectTest.size(); i++) {
// for (String localTest : selectTest) {
String test = selectTest.get(i);
String testCase = selectTestCase.get(i);
TestCase tc = testCaseService.convert(testCaseService.readByKey(test, testCase));
// TestCases that are not active are not inserted into queue.
if (tc.getTcActive().equals("Y")) {
// We only insert testcase that exist for the given country.
for (TestCaseCountry country : testCaseCountryService.convert(testCaseCountryService.readByTestTestCase(null, test, testCase))) {
if (countries.contains(country.getCountry())) {
// for each environment we test that correspondng gp1 is compatible with testcase environment flag activation.
for (String environment : environments) {
String envGp1 = invariantEnv.get(environment);
if (((envGp1.equals("PROD")) && (tc.getActivePROD().equalsIgnoreCase("Y"))) || ((envGp1.equals("UAT")) && (tc.getActiveUAT().equalsIgnoreCase("Y"))) || ((envGp1.equals("QA")) && (tc.getActiveQA().equalsIgnoreCase("Y"))) || (envGp1.equals("DEV"))) {
// Getting Application in order to check application type against browser.
Application app = applicationService.convert(applicationService.readByKey(tc.getApplication()));
if (envMap.containsKey(app.getSystem() + LOCAL_SEPARATOR + country.getCountry() + LOCAL_SEPARATOR + environment)) {
// Create Tag only if not already done and defined.
if (!StringUtil.isNullOrEmpty(tag) && !tagAlreadyAdded) {
// We create or update it.
ITagService tagService = appContext.getBean(ITagService.class);
tagService.createAuto(tag, campaign, user);
tagAlreadyAdded = true;
}
if ((app != null) && (app.getType() != null) && app.getType().equalsIgnoreCase(Application.TYPE_GUI)) {
if (browsers == null || browsers.isEmpty()) {
browsers.add("");
}
for (String browser : browsers) {
try {
LOG.debug("Insert Queue Entry.");
toInserts.add(inQueueFactoryService.create(test, testCase, country.getCountry(), environment, robot, robotIP, robotPort, browser, browserVersion, platform, screenSize, manualURL, manualHost, manualContextRoot, manualLoginRelativeURL, manualEnvData, tag, screenshot, verbose, timeout, pageSource, seleniumLog, 0, retries, manualExecution, priority, user, null, null, null));
} catch (FactoryCreationException e) {
LOG.error("Unable to insert record due to: " + e, e);
LOG.error("test: " + test + "-" + testCase + "-" + country.getCountry() + "-" + environment + "-" + robot);
}
}
} else {
// Application does not support browser so we force an empty value.
LOG.debug("Forcing Browser to empty value. Application type=" + app.getType());
try {
LOG.debug("Insert Queue Entry.");
toInserts.add(inQueueFactoryService.create(test, testCase, country.getCountry(), environment, robot, robotIP, robotPort, "", browserVersion, platform, screenSize, manualURL, manualHost, manualContextRoot, manualLoginRelativeURL, manualEnvData, tag, screenshot, verbose, timeout, pageSource, seleniumLog, 0, retries, manualExecution, priority, user, null, null, null));
} catch (FactoryCreationException e) {
LOG.error("Unable to insert record due to: " + e, e);
LOG.error("test: " + test + "-" + testCase + "-" + country.getCountry() + "-" + environment + "-" + robot);
}
}
} else {
LOG.debug("Env does not exist or is not active.");
nbenvnotexist = nbenvnotexist + nbbrowser;
}
} else {
LOG.debug("Env group not active for testcase : " + environment);
nbtestcaseenvgroupnotallowed = nbtestcaseenvgroupnotallowed + nbbrowser;
}
}
} else {
LOG.debug("Country does not match. " + countries + " " + country.getCountry());
}
}
} else {
LOG.debug("TestCase not Active.");
nbtestcasenotactive = nbtestcasenotactive + (nbcountries * nbenv * nbbrowser);
}
}
} catch (CerberusException ex) {
LOG.warn(ex);
}
// Part 2: Try to insert all these test cases to the execution queue.
List<String> errorMessages = new ArrayList<String>();
for (TestCaseExecutionQueue toInsert : toInserts) {
try {
inQueueService.convert(inQueueService.create(toInsert));
nbExe++;
JSONObject value = new JSONObject();
value.put("queueId", toInsert.getId());
value.put("test", toInsert.getTest());
value.put("testcase", toInsert.getTestCase());
value.put("country", toInsert.getCountry());
value.put("environment", toInsert.getEnvironment());
jsonArray.put(value);
} catch (CerberusException e) {
String errorMessageTmp = "Unable to insert " + toInsert.toString() + " due to " + e.getMessage();
LOG.warn(errorMessageTmp);
errorMessages.add(errorMessageTmp);
continue;
} catch (JSONException ex) {
LOG.error(ex);
}
}
// Part 3 : Trigger JobQueue
try {
executionThreadService.executeNextInQueueAsynchroneously(false);
} catch (CerberusException ex) {
String errorMessageTmp = "Unable to feed the execution queue due to " + ex.getMessage();
LOG.warn(errorMessageTmp);
errorMessages.add(errorMessageTmp);
}
if (!errorMessages.isEmpty()) {
StringBuilder errorMessageTmp = new StringBuilder();
for (String item : errorMessages) {
errorMessageTmp.append(item);
errorMessageTmp.append(LINE_SEPARATOR);
}
errorMessage.append(errorMessageTmp.toString());
}
errorMessage.append(nbExe);
errorMessage.append(" execution(s) succesfully inserted to queue. ");
if (testcases != null && testcases.getResultMessage().getSource() == MessageEventEnum.DATA_OPERATION_WARNING_PARTIAL_RESULT) {
errorMessage.append(testcases.getResultMessage().getDescription());
}
// Message that everything went fine.
msg = new MessageEvent(MessageEventEnum.GENERIC_OK);
} else {
// In case of errors, we display the help message.
// errorMessage.append(helpMessage);
}
// Init Answer with potencial error from Parsing parameter.
AnswerItem answer = new AnswerItem(msg);
switch(outputFormat) {
case "json":
try {
JSONObject jsonResponse = new JSONObject();
jsonResponse.put("messageType", answer.getResultMessage().getMessage().getCodeString());
jsonResponse.put("message", errorMessage.toString());
jsonResponse.put("helpMessage", helpMessage);
jsonResponse.put("tag", tag);
jsonResponse.put("nbExe", nbExe);
jsonResponse.put("nbErrorTCNotActive", nbtestcasenotactive);
jsonResponse.put("nbErrorTCNotAllowedOnEnv", nbtestcaseenvgroupnotallowed);
jsonResponse.put("nbErrorEnvNotExistOrNotActive", nbenvnotexist);
jsonResponse.put("queueList", jsonArray);
response.setContentType("application/json");
response.setCharacterEncoding("utf8");
response.getWriter().print(jsonResponse.toString());
} catch (JSONException e) {
LOG.warn(e);
// returns a default error message with the json format that is able to be parsed by the client-side
response.setContentType("application/json");
response.setCharacterEncoding("utf8");
response.getWriter().print(AnswerUtil.createGenericErrorAnswer());
}
break;
default:
response.setContentType("text");
response.setCharacterEncoding("utf8");
if (error) {
errorMessage.append("\n");
errorMessage.append(helpMessage);
}
response.getWriter().print(errorMessage.toString());
}
// } catch (Exception e) {
// LOG.error(e);
// out.println(helpMessage);
// out.println(e.toString());
// }
}
use of org.cerberus.crud.service.ILogEventService in project cerberus-source by cerberustesting.
the class GetNumberOfExecutions method processRequest.
/**
* Processes requests for both HTTP
* <code>GET</code> and
* <code>POST</code> methods.
*
* @param request servlet request
* @param response servlet response
* @throws ServletException if a servlet-specific error occurs
* @throws IOException if an I/O error occurs
*/
protected void processRequest(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
PrintWriter out = response.getWriter();
// Loading Services.
ApplicationContext appContext = WebApplicationContextUtils.getWebApplicationContext(this.getServletContext());
IApplicationService myApplicationService = appContext.getBean(ApplicationService.class);
IInvariantService myInvariantService = appContext.getBean(InvariantService.class);
// Calling Servlet Transversal Util.
ServletUtil.servletStart(request);
/**
* Adding Log entry.
*/
ILogEventService logEventService = appContext.getBean(LogEventService.class);
logEventService.createForPublicCalls("/GetNumberOfExecutions", "CALL", "GetNumberOfExecutions called : " + request.getRequestURL(), request);
// Parsing all parameters.
String environment = ParameterParserUtil.parseStringParam(request.getParameter("environment"), "PROD");
String test = ParameterParserUtil.parseStringParam(request.getParameter("test"), "");
String application = ParameterParserUtil.parseStringParam(request.getParameter("application"), "");
String country = ParameterParserUtil.parseStringParam(request.getParameter("country"), "");
String controlStatus = ParameterParserUtil.parseStringParam(request.getParameter("controlstatus"), "");
int NbMinutes = ParameterParserUtil.parseIntegerParam(request.getParameter("nbminuteshistory"), 0);
// Defining help message.
String helpMessage = "\nThis servlet return the number of execution performed on WORKING test cases that match the following criterias :\n" + "- nbminuteshistory [mandatory] : the number of minutes in the past from the moment the servlet is called. This parameter must be > 0. [" + NbMinutes + "]\n" + "- test : Executions done on the test. [" + test + "]\n" + "- environment : Environment where the execution happened. Default to PROD. [" + environment + "]\n" + "- country : Executions done on the country. [" + country + "]\n" + "- application : Executions done against that application. [" + application + "]\n" + "- controlstatus : execution that return the following status. [" + controlStatus + "]\n";
try {
// Checking the parameter validity. nbminuteshistory is a mandatory parameter.
boolean error = false;
if (NbMinutes == 0) {
out.println("Error - Parameter nbminuteshistory is mandatory. Please feed it in order to specify the elapsed time where the history should be considered.");
error = true;
}
// Checking the parameter validity. If application has been entered, does it exist ?
if (!application.equalsIgnoreCase("") && !myApplicationService.exist(application)) {
out.println("Error - Application does not exist : " + application);
error = true;
}
if (!country.equalsIgnoreCase("") && !myInvariantService.isInvariantExist("COUNTRY", country)) {
out.println("Warning - Country does not exist : " + country);
}
if (!environment.equalsIgnoreCase("") && !myInvariantService.isInvariantExist("ENVIRONMENT", environment)) {
out.println("Warning - Environment does not exist : " + environment);
}
if (!controlStatus.equalsIgnoreCase("") && !myInvariantService.isInvariantExist("TCESTATUS", controlStatus)) {
out.println("Warning - Control Status does not exist : " + controlStatus);
}
// Starting the request only if previous parameters exist.
if (!error) {
// Getting a timestamp to filter the executions based on the nb of minutes
String dateLimitFrom = DateUtil.getMySQLTimestampTodayDeltaMinutes(-NbMinutes);
ITestCaseExecutionService MyTestExecutionService = appContext.getBean(TestCaseExecutionService.class);
List<TestCaseExecution> myList;
// Getting the lists of test cases the follow the criterias.
try {
myList = MyTestExecutionService.findTCExecutionbyCriteria1(dateLimitFrom, test, "", application, country, environment, controlStatus, "WORKING");
out.println(myList.size());
} catch (CerberusException e) {
out.println("0");
}
} else {
// In case of errors, we displayu the help message.
out.println(helpMessage);
}
} catch (Exception e) {
LOG.warn(Infos.getInstance().getProjectNameAndVersion() + " - Exception catched.", e);
out.print("Error while Getting number of executions : ");
out.println(e.getMessage());
} finally {
out.close();
}
}
Aggregations