Best Cerberus-source code snippet using org.cerberus.engine.queuemanagement.entity.TestCaseExecutionQueueToTreat.getPoolSizeAppEnvironment
Source:ExecutionThreadPoolService.java
...142 for (TestCaseExecutionQueueToTreat exe : executionsToTreat) {143 String const02_key = TestCaseExecutionQueueToTreat.CONSTRAIN2_APPLIENV + CONST_SEPARATOR + exe.getSystem() + CONST_SEPARATOR + exe.getEnvironment() + CONST_SEPARATOR + exe.getCountry() + CONST_SEPARATOR + exe.getApplication();144 String const03_key = TestCaseExecutionQueueToTreat.CONSTRAIN3_APPLICATION + CONST_SEPARATOR + exe.getApplication();145 String const04_key = TestCaseExecutionQueueToTreat.CONSTRAIN4_ROBOT + CONST_SEPARATOR + exe.getSelectedRobotHost();146 constrains_current.put(const02_key, exe.getPoolSizeAppEnvironment());147 constrains_current.put(const03_key, exe.getPoolSizeApplication());148 // Getting Robot Host PoolSize from invariant hashmap.149 int robot_poolsize_final = 0;150 if (!StringUtil.isNullOrEmpty(exe.getSelectedRobotHost())) {151 if (robot_poolsize.containsKey(exe.getSelectedRobotHost())) {152 robot_poolsize_final = ParameterParserUtil.parseIntegerParam(robot_poolsize.get(exe.getSelectedRobotHost()), poolSizeRobot);153 } else {154 robot_poolsize_final = poolSizeRobot;155 }156 }157 constrains_current.put(const04_key, robot_poolsize_final);158 }159 return constrains_current;160 }161 @Override162 public HashMap<String, Integer> getCurrentlyToTreat() throws CerberusException {163 AnswerList<TestCaseExecutionQueueToTreat> answer = new AnswerList<>();164 HashMap<String, Integer> constrains_current = new HashMap<String, Integer>();165 // Getting all executions to be treated.166 answer = tceiqService.readQueueToTreat();167 List<TestCaseExecutionQueueToTreat> executionsToTreat = answer.getDataList();168 // Calculate constrain values.169 for (TestCaseExecutionQueueToTreat exe : executionsToTreat) {170 String const01_key = TestCaseExecutionQueueToTreat.CONSTRAIN1_GLOBAL;171 String const02_key = TestCaseExecutionQueueToTreat.CONSTRAIN2_APPLIENV + CONST_SEPARATOR + exe.getSystem() + CONST_SEPARATOR + exe.getEnvironment() + CONST_SEPARATOR + exe.getCountry() + CONST_SEPARATOR + exe.getApplication();172 String const03_key = TestCaseExecutionQueueToTreat.CONSTRAIN3_APPLICATION + CONST_SEPARATOR + exe.getApplication();173 String const04_key = TestCaseExecutionQueueToTreat.CONSTRAIN4_ROBOT + CONST_SEPARATOR + exe.getQueueRobotHost();174 if (constrains_current.containsKey(const01_key)) {175 constrains_current.put(const01_key, constrains_current.get(const01_key) + 1);176 } else {177 constrains_current.put(const01_key, 1);178 }179 if (constrains_current.containsKey(const02_key)) {180 constrains_current.put(const02_key, constrains_current.get(const02_key) + 1);181 } else {182 constrains_current.put(const02_key, 1);183 }184 if (constrains_current.containsKey(const03_key)) {185 constrains_current.put(const03_key, constrains_current.get(const03_key) + 1);186 } else {187 constrains_current.put(const03_key, 1);188 }189 if (constrains_current.containsKey(const04_key)) {190 constrains_current.put(const04_key, constrains_current.get(const04_key) + 1);191 } else {192 constrains_current.put(const04_key, 1);193 }194 }195 return constrains_current;196 }197 /**198 * {@inheritDoc}199 */200 @Override201 public void executeNextInQueue(boolean forceExecution) throws CerberusException {202 if (!instanceActive) {203 LOG.warn("Queue execution disable on that JVM instance.");204 return;205 }206 // Job can be desactivated by parameter.207 if (!(parameterService.getParameterBooleanByKey("cerberus_queueexecution_enable", "", true))) {208 LOG.debug("Queue_Processing_Job disabled by parameter : 'cerberus_queueexecution_enable'.");209 return;210 }211 // We first check that another thread of Cerberus already trigger the job. Only 1 instance of the job is necessary.212 if (!(myVersionService.getMyVersionStringByKey("queueprocessingjobrunning", "N").equals("Y"))213 || forceExecution) {214 // Flag in database that job is already running.215 if (myVersionService.flagMyVersionString("queueprocessingjobrunning") || forceExecution) {216 // Saving the timestamps when the job start in database.217 myVersionService.updateMyVersionString("queueprocessingjobstart", String.valueOf(new Date()));218 if (forceExecution) {219 LOG.debug("Forcing Start of Queue_Processing_Job.");220 }221 int nbqueuedexe = 0;222 // We try to submit new jobs until the job does not trigger any new execution.223 // In Other Words : As long as the job trigger new execution, we execute it.224 do {225 if (!(parameterService.getParameterBooleanByKey("cerberus_queueexecution_enable", "", true))) {226 LOG.debug("Queue_Processing_Job disabled by parameter : 'cerberus_queueexecution_enable'.");227 return;228 }229 nbqueuedexe = 0;230 // Job is not already running, we can trigger it.231 LOG.debug("Starting Queue_Processing_Job.");232 // Getting all executions to be treated.233 AnswerList<TestCaseExecutionQueueToTreat> answer = new AnswerList<>();234 answer = tceiqService.readQueueToTreat();235 List<TestCaseExecutionQueueToTreat> executionsInQueue = answer.getDataList();236 int poolSizeGeneral = 12;237 int poolSizeRobot = 10;238 int queueTimeout = 600000;239 // Init constrain counter (from list of already running execution.).240 int const01_current = 0;241 int const02_current = 0;242 int const03_current = 0;243 int const04_current = 0;244 HashMap<String, Integer> constrains_current = new HashMap<>();245 HashMap<String, Integer> robothost_poolsize = new HashMap<>();246 HashMap<String, List<RobotExecutor>> robot_executor = new HashMap<>();247 HashMap<String, Robot> robot_header = new HashMap<>();248 if (!executionsInQueue.isEmpty()) {249 poolSizeGeneral = parameterService.getParameterIntegerByKey("cerberus_queueexecution_global_threadpoolsize", "", 12);250 poolSizeRobot = parameterService.getParameterIntegerByKey("cerberus_queueexecution_defaultrobothost_threadpoolsize", "", 10);251 queueTimeout = parameterService.getParameterIntegerByKey("cerberus_queueexecution_timeout", "", 600000);252 // Init constrain counter (from list of already running execution.).253 const01_current = 0;254 const02_current = 0;255 const03_current = 0;256 const04_current = 0;257 constrains_current = getCurrentlyRunning();258 LOG.debug("Current Constrains : " + constrains_current);259 // Getting RobotHost PoolSize260 robothost_poolsize = invariantService.readToHashMapGp1IntegerByIdname("ROBOTHOST", poolSizeRobot);261 // Getting the list of robot in scope of the queue entries. This is to avoid getting all robots from database.262 LOG.debug("Getting List of Robot Executor.");263 for (TestCaseExecutionQueueToTreat exe : executionsInQueue) {264 if (!StringUtil.isNullOrEmpty(exe.getQueueRobot())) {265 robot_executor.put(exe.getQueueRobot(), new ArrayList<>());266 }267 }268 LOG.debug("List of Robot from Queue entries : " + robot_executor);269 robot_executor = robotExecutorService.getExecutorListFromRobotHash(robot_executor);270 LOG.debug("Robot Executor List : " + robot_executor);271 LOG.debug("Getting List of Robot (Header).");272 List<String> listRobotS = new ArrayList<>();273 for (Map.Entry<String, List<RobotExecutor>> entry : robot_executor.entrySet()) {274 String key = entry.getKey();275 listRobotS.add(key);276 }277 robot_header = robotService.readToHashMapByRobotList(listRobotS);278 LOG.debug("Robot Header List : " + robot_header);279 }280 String robot = "";281 String robotExecutor = "";282 String robotHost = "";283 String robotPort = "";284 String appType = "";285 List<RobotExecutor> tmpExelist = new ArrayList<>();286 List<RobotExecutor> newTmpExelist = new ArrayList<>();287 // Analysing each execution in the database queue.288 for (TestCaseExecutionQueueToTreat exe : executionsInQueue) {289 LOG.debug("Starting analysing : " + exe.getId());290 String notTriggeredExeMessage = "";291 boolean triggerExe = false;292 robot = exe.getQueueRobot();293 // Getting here the list of possible executor sorted by prio.294 List<RobotExecutor> exelist = new ArrayList<>();295 appType = exe.getAppType();296 if ((appType.equals(Application.TYPE_APK)) || (appType.equals(Application.TYPE_GUI)) || (appType.equals(Application.TYPE_FAT)) || (appType.equals(Application.TYPE_IPA))) {297 // Application require a robot so we can get the list of executors.298 if (StringUtil.isNullOrEmpty(robot)) {299 exelist = new ArrayList<>();300 exelist.add(factoryRobotExecutor.create(0, "", "", "Y", 1, exe.getQueueRobotHost(), exe.getQueueRobotPort(), "", "", "", "", null, "", 0, "", 0, "", "", "", null, "", null));301 } else {302 exelist = robot_executor.get(robot);303 if (exelist == null || exelist.size() < 1) {304 exelist = new ArrayList<>();305 exelist.add(factoryRobotExecutor.create(0, "", "", "Y", 1, "", "", "", "", "", "", null, "", 0, "", 0, "", "", "", null, "", null));306 }307 }308 } else {309 // Application does not require a robot so we create a fake one with empty data.310 exelist = new ArrayList<>();311 exelist.add(factoryRobotExecutor.create(0, "", "", "Y", 1, "", "", "", "", "", "", null, "", 0, "", 0, "", "", "", null, "", null));312 }313 // Looping other every potential executor on the corresponding robot.314 for (RobotExecutor robotExecutor1 : exelist) {315 robotHost = robotExecutor1.getHost();316 robotPort = robotExecutor1.getPort();317 robotExecutor = robotExecutor1.getExecutor();318 LOG.debug("Trying with : " + robotHost + " Port : " + robotPort + " From Robot/Executor : " + robotExecutor1.getRobot() + "/" + robotExecutor1.getExecutor());319 // RobotHost PoolSize if retreived from invariant hashmap.320 int robothost_poolsize_final = 0;321 if (!StringUtil.isNullOrEmpty(robotHost)) {322 if (robothost_poolsize.containsKey(robotHost)) {323 robothost_poolsize_final = ParameterParserUtil.parseIntegerParam(robothost_poolsize.get(robotHost), poolSizeRobot);324 } else {325 robothost_poolsize_final = poolSizeRobot;326 }327 }328 LOG.debug("Pool Values : poolGen " + poolSizeGeneral + " poolApp " + exe.getPoolSizeAppEnvironment() + " poolRobotHost " + robothost_poolsize_final);329 String const01_key = TestCaseExecutionQueueToTreat.CONSTRAIN1_GLOBAL;330 String const02_key = TestCaseExecutionQueueToTreat.CONSTRAIN2_APPLIENV + CONST_SEPARATOR + exe.getSystem() + CONST_SEPARATOR + exe.getEnvironment() + CONST_SEPARATOR + exe.getCountry() + CONST_SEPARATOR + exe.getApplication();331 String const03_key = TestCaseExecutionQueueToTreat.CONSTRAIN3_APPLICATION + CONST_SEPARATOR + exe.getApplication();332 String const04_key = TestCaseExecutionQueueToTreat.CONSTRAIN4_ROBOT + CONST_SEPARATOR + robotHost;333 // Eval Constrain 1334 if (constrains_current.containsKey(const01_key)) {335 const01_current = constrains_current.get(const01_key);336 } else {337 const01_current = 0;338 }339 // Eval Constrain 1340 boolean constMatch01;341 if (poolSizeGeneral == 0) {342 // if poolsize == 0, this means no constrain specified.343 constMatch01 = false;344 } else {345 constMatch01 = (const01_current >= poolSizeGeneral);346 }347 // Eval Constrain 2348 if (constrains_current.containsKey(const02_key)) {349 const02_current = constrains_current.get(const02_key);350 } else {351 const02_current = 0;352 }353 // Eval Constrain 2354 boolean constMatch02;355 if (exe.getPoolSizeAppEnvironment() == 0) {356 // if poolsize == 0, this means no constrain specified.357 constMatch02 = false;358 } else {359 constMatch02 = (const02_current >= exe.getPoolSizeAppEnvironment());360 }361 // Eval Constrain 3362 if (constrains_current.containsKey(const03_key)) {363 const03_current = constrains_current.get(const03_key);364 } else {365 const03_current = 0;366 }367 // Eval Constrain 3368 boolean constMatch03;369 if (exe.getPoolSizeApplication() == 0) {370 // if poolsize == 0, this means no constrain specified.371 constMatch03 = false;372 } else {373 constMatch03 = (const03_current >= exe.getPoolSizeApplication());374 }375 // Eval Constrain 4376 if (constrains_current.containsKey(const04_key)) {377 const04_current = constrains_current.get(const04_key);378 } else {379 const04_current = 0;380 }381 // Eval Constrain 4382 boolean constMatch04;383 if (robothost_poolsize_final == 0) {384 // if poolsize == 0, this means no constrain specified.385 constMatch04 = false;386 } else {387 constMatch04 = (const04_current >= robothost_poolsize_final);388 }389 if ((!constMatch01 && !constMatch02 && !constMatch03 && !constMatch04)390 || (!constMatch01 && exe.getManualExecution().equals("Y"))) {391 // None of the constrains match or exe is manual so we can trigger the execution.392 // Execution could already been triggered on a different executor.393 if (triggerExe == false) {394 // Adding execution to queue.395 if (queueService.updateToWaiting(exe.getId())) {396 try {397 ExecutionQueueWorkerThread task = new ExecutionQueueWorkerThread();398 // Flag on database that execution has been selected.399 robotExecutorService.updateLastExe(robot, robotExecutor);400 // Update robot_executor HasMap for next queued executions in the current batch. If Algo is based on Ranking, nothing needs to be changed.401 if ((robot_header.get(robot) != null)402 && (Robot.LOADBALANCINGEXECUTORMETHOD_ROUNDROBIN.equals(robot_header.get(robot).getLbexemethod()))403 && (exelist.size() > 1)) {404 tmpExelist = robot_executor.get(robot);405 newTmpExelist = new ArrayList<>();406 RobotExecutor lastRobotExecutor = null;407 for (RobotExecutor robotExecutor2 : tmpExelist) {408 // Update new List with RobotExecutor.LOADBALANCINGMETHOD_ROUNDROBIN Algo puting the Executor that has just been inserted at the end.409 if (robotExecutor2.getExecutor().equals(robotExecutor)) {410 lastRobotExecutor = robotExecutor2;411 } else {412 newTmpExelist.add(robotExecutor2);413 }414 }415 newTmpExelist.add(lastRobotExecutor);416 robot_executor.put(robot, newTmpExelist);417 }418 task.setCerberusExecutionUrl(parameterService.getParameterStringByKey("cerberus_url", exe.getSystem(), ""));419 task.setQueueId(exe.getId());420 task.setRobotExecutor(robotExecutor);421 task.setSelectedRobotHost(robotHost);422 task.setToExecuteTimeout(queueTimeout);423 task.setQueueService(queueService);424 task.setQueueDepService(queueDepService);425 task.setRetriesService(retriesService);426 task.setExecThreadPool(threadQueuePool);427 Future<?> future = threadQueuePool.getExecutor().submit(task);428 task.setFuture(future);429 triggerExe = true;430 nbqueuedexe++;431 // Debug messages.432 LOG.debug("RESULT : Execution triggered. Const1 " + constMatch01 + " Const2 " + constMatch02 + " Const3 " + constMatch03 + " Const4 " + constMatch04 + " Manual " + exe.getManualExecution());433 LOG.debug(" CurConst1 " + const01_current + " CurConst2 " + const02_current + " CurConst3 " + const03_current + " CurConst4 " + const04_current);434 // Constrains Counter increase435 constrains_current.put(const01_key, const01_current + 1);436 if (!exe.getManualExecution().equals("Y")) {437 // Specific increment only if automatic execution.438 constrains_current.put(const02_key, const02_current + 1);439 constrains_current.put(const03_key, const03_current + 1);440 constrains_current.put(const04_key, const04_current + 1);441 }442 } catch (Exception e) {443 LOG.error("Failed to add Queueid : " + exe.getId() + " into the queue : " + e.getMessage(), e);444 }445 }446 } else {447 LOG.debug("RESULT : Execution Not triggered. Queueid : " + exe.getId() + " already inserted (on a previous Executor).");448 }449 } else {450 if (constMatch04) {451 notTriggeredExeMessage += "Robot Host contrain on '" + const04_key + "' reached. " + robothost_poolsize_final + " Execution(s) already in pool. ";452 }453 if (constMatch03) {454 notTriggeredExeMessage += "Application contrain on '" + const03_key + "' reached . " + exe.getPoolSizeApplication() + " Execution(s) already in pool. ";455 }456 if (constMatch02) {457 notTriggeredExeMessage += "Application Environment contrain on '" + const02_key + "' reached . " + exe.getPoolSizeAppEnvironment() + " Execution(s) already in pool. ";458 }459 if (constMatch01) {460 notTriggeredExeMessage += "Global contrain reached. " + poolSizeGeneral + " Execution(s) already in pool. ";461 }462 LOG.debug("RESULT : Execution not triggered. Const1 " + constMatch01 + " Const2 " + constMatch02 + " Const3 " + constMatch03 + " Const4 " + constMatch04 + " Manual " + exe.getManualExecution());463 LOG.debug(" CurConst1 " + const01_current + " CurConst2 " + const02_current + " CurConst3 " + const03_current + " CurConst4 " + const04_current);464 }465 }466// End of Queue entry analysis accross all Executors.467 if ((exe.getDebugFlag() != null) && (exe.getDebugFlag().equalsIgnoreCase("Y"))) {468 if (triggerExe == false) {469 queueService.updateComment(exe.getId(), notTriggeredExeMessage);470 }471 LOG.debug("Debug Message : " + notTriggeredExeMessage);...
Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.
You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.
Get 100 minutes of automation test minutes FREE!!