From c4797ab96b2b5bfd1a0a31f7a5d284b75124f130 Mon Sep 17 00:00:00 2001 From: Michael Vorburger Date: Sun, 3 May 2020 19:12:14 +0200 Subject: [PATCH] more clean up in SchedulerJobsTest (re. FINERACT-922) This does NOT, yet, fix FINERACT-922, but it splits the old test into new smaller test methods, which (hopefully) should always pass, except for the last one. --- .../integrationtests/SchedulerJobsTest.java | 67 ++++++++++--------- .../SchedulerJobsTestResults.java | 5 +- .../common/SchedulerJobHelper.java | 28 +++++--- 3 files changed, 58 insertions(+), 42 deletions(-) diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java index 5ad6f227e..65cfad9c4 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTest.java @@ -42,71 +42,76 @@ public class SchedulerJobsTest { @Before public void setup() { Utils.initializeRESTAssured(); - this.requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); - this.requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); - this.requestSpec.header("Fineract-Platform-TenantId", "default"); - this.schedulerJobHelper = new SchedulerJobHelper(this.requestSpec); + requestSpec = new RequestSpecBuilder().setContentType(ContentType.JSON).build(); + requestSpec.header("Authorization", "Basic " + Utils.loginIntoServerAndGetBase64EncodedAuthenticationKey()); + requestSpec.header("Fineract-Platform-TenantId", "default"); + schedulerJobHelper = new SchedulerJobHelper(requestSpec); } @Test public void testFlippingSchedulerStatus() throws InterruptedException { // Retrieving Status of Scheduler - Boolean schedulerStatus = this.schedulerJobHelper.getSchedulerStatus(); + Boolean schedulerStatus = schedulerJobHelper.getSchedulerStatus(); if (schedulerStatus == true) { - this.schedulerJobHelper.updateSchedulerStatus("stop"); - schedulerStatus = this.schedulerJobHelper.getSchedulerStatus(); + schedulerJobHelper.updateSchedulerStatus("stop"); + schedulerStatus = schedulerJobHelper.getSchedulerStatus(); // Verifying Status of the Scheduler after stopping assertEquals("Verifying Scheduler Job Status", false, schedulerStatus); } else { - this.schedulerJobHelper.updateSchedulerStatus("start"); - schedulerStatus = this.schedulerJobHelper.getSchedulerStatus(); + schedulerJobHelper.updateSchedulerStatus("start"); + schedulerStatus = schedulerJobHelper.getSchedulerStatus(); // Verifying Status of the Scheduler after starting assertEquals("Verifying Scheduler Job Status", true, schedulerStatus); } } @Test - @Ignore // TODO FINERACT-852 - public void testSchedulerJobs() throws InterruptedException { - // Retrieving All Scheduler Jobs - List allSchedulerJobsData = this.schedulerJobHelper.getAllSchedulerJobs(); - assertNotNull(allSchedulerJobsData); - - for (Integer jobIndex = 0; jobIndex < allSchedulerJobsData.size(); jobIndex++) { - Integer jobId = (Integer) allSchedulerJobsData.get(jobIndex).get("jobId"); + public void testFlippingJobsActiveStatus() throws InterruptedException { + // Stop the Scheduler while we test flapping jobs' active on/off, to avoid side effects + schedulerJobHelper.updateSchedulerStatus("stop"); + // For each retrieved scheduled job (by ID)... + for (Integer jobId : schedulerJobHelper.getAllSchedulerJobIds()) { // Retrieving Scheduler Job by ID - Map schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId.toString()); - assertNotNull(schedulerJob); + Map schedulerJob = schedulerJobHelper.getSchedulerJobById(jobId); Boolean active = (Boolean) schedulerJob.get("active"); - - if (active == true) { - active = false; - } else { - active = true; - } + active = !active; // Updating Scheduler Job - Map changes = this.schedulerJobHelper.updateSchedulerJob(jobId.toString(), active.toString()); + Map changes = schedulerJobHelper.updateSchedulerJob(jobId, active.toString()); + // Verifying Scheduler Job updates assertEquals("Verifying Scheduler Job Updates", active, changes.get("active")); + schedulerJob = schedulerJobHelper.getSchedulerJobById(jobId); + assertEquals("Verifying Get Scheduler Job", active, schedulerJob.get("active")); + } + } + + @Test + @Ignore // TODO FINERACT-852 & FINERACT-922 + public void testSchedulerJobs() throws InterruptedException { + // For each retrieved scheduled job (by ID)... + for (Integer jobId : schedulerJobHelper.getAllSchedulerJobIds()) { + // Retrieving Scheduler Job by ID + Map schedulerJob = schedulerJobHelper.getSchedulerJobById(jobId); + // Executing Scheduler Job - this.schedulerJobHelper.runSchedulerJob(this.requestSpec, jobId.toString()); + schedulerJobHelper.runSchedulerJob(requestSpec, jobId.toString()); // Retrieving Scheduler Job by ID - schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId.toString()); + schedulerJob = schedulerJobHelper.getSchedulerJobById(jobId); assertNotNull(schedulerJob); // Waiting for Job to complete while ((Boolean) schedulerJob.get("currentlyRunning") == true) { Thread.sleep(500); - schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId.toString()); + schedulerJob = schedulerJobHelper.getSchedulerJobById(jobId); assertNotNull(schedulerJob); - System.out.println("Job " +jobId.toString() +" is Still Running"); + System.out.println("Job " + jobId +" is Still Running"); } - List jobHistoryData = this.schedulerJobHelper.getSchedulerJobHistory(jobId.toString()); + List jobHistoryData = schedulerJobHelper.getSchedulerJobHistory(jobId); // Verifying the Status of the Recently executed Scheduler Job assertFalse("Job History is empty :( Was it too slow? Failures in background job?", jobHistoryData.isEmpty()); diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java index ee44d8b97..907322c0b 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/SchedulerJobsTestResults.java @@ -36,6 +36,7 @@ import java.util.Calendar; import java.util.HashMap; import java.util.List; import java.util.Locale; +import java.util.Map; import org.apache.fineract.integrationtests.common.ClientHelper; import org.apache.fineract.integrationtests.common.GlobalConfigurationHelper; import org.apache.fineract.integrationtests.common.HolidayHelper; @@ -772,12 +773,12 @@ public class SchedulerJobsTestResults { this.schedulerJobHelper.executeJob(JobName); - HashMap schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId.toString()); + Map schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId); Assert.assertNotNull(schedulerJob); while ((Boolean) schedulerJob.get("currentlyRunning") == true) { Thread.sleep(15000); - schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId.toString()); + schedulerJob = this.schedulerJobHelper.getSchedulerJobById(jobId); Assert.assertNotNull(schedulerJob); } diff --git a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java index 435d7c1bf..b2504cb0f 100644 --- a/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java +++ b/fineract-provider/src/integrationTest/java/org/apache/fineract/integrationtests/common/SchedulerJobHelper.java @@ -18,6 +18,8 @@ */ package org.apache.fineract.integrationtests.common; +import static org.junit.Assert.assertNotNull; + import com.google.gson.Gson; import io.restassured.builder.ResponseSpecBuilder; import io.restassured.specification.RequestSpecification; @@ -26,6 +28,8 @@ import java.util.ArrayList; import java.util.HashMap; import java.util.List; import java.util.Map; +import java.util.function.ToIntFunction; +import java.util.stream.Collectors; import org.junit.Assert; @SuppressWarnings({ "rawtypes", "unchecked" }) @@ -47,17 +51,23 @@ public class SchedulerJobHelper { this.response202Spec = responseSpec; } - public List getAllSchedulerJobs() { + private List getAllSchedulerJobs() { final String GET_ALL_SCHEDULER_JOBS_URL = "/fineract-provider/api/v1/jobs?" + Utils.TENANT_IDENTIFIER; System.out.println("------------------------ RETRIEVING ALL SCHEDULER JOBS -------------------------"); final ArrayList response = Utils.performServerGet(requestSpec, response200Spec, GET_ALL_SCHEDULER_JOBS_URL, ""); return response; } - public HashMap getSchedulerJobById(final String jobId) { + public List getAllSchedulerJobIds() { + ToIntFunction mapper = map -> (Integer) map.get("jobId"); + return getAllSchedulerJobs().stream().mapToInt(mapper).boxed().collect(Collectors.toList()); + } + + public Map getSchedulerJobById(int jobId) { final String GET_SCHEDULER_JOB_BY_ID_URL = "/fineract-provider/api/v1/jobs/" + jobId + "?" + Utils.TENANT_IDENTIFIER; System.out.println("------------------------ RETRIEVING SCHEDULER JOB BY ID -------------------------"); - final HashMap response = Utils.performServerGet(requestSpec, response200Spec, GET_SCHEDULER_JOB_BY_ID_URL, ""); + final Map response = Utils.performServerGet(requestSpec, response200Spec, GET_SCHEDULER_JOB_BY_ID_URL, ""); + assertNotNull(response); return response; } @@ -74,10 +84,10 @@ public class SchedulerJobHelper { Utils.performServerPost(requestSpec, response202Spec, UPDATE_SCHEDULER_STATUS_URL, runSchedulerJobAsJSON(), null); } - public Map updateSchedulerJob(final String jobId, final String active) { + public Map updateSchedulerJob(int jobId, final String active) { final String UPDATE_SCHEDULER_JOB_URL = "/fineract-provider/api/v1/jobs/" + jobId + "?" + Utils.TENANT_IDENTIFIER; System.out.println("------------------------ UPDATING SCHEDULER JOB -------------------------"); - final Map response = Utils.performServerPut(requestSpec, response200Spec, UPDATE_SCHEDULER_JOB_URL, + final Map response = Utils.performServerPut(requestSpec, response200Spec, UPDATE_SCHEDULER_JOB_URL, updateSchedulerJobAsJSON(active), "changes"); return response; } @@ -89,7 +99,7 @@ public class SchedulerJobHelper { return new Gson().toJson(map); } - public List getSchedulerJobHistory(final String jobId) { + public List getSchedulerJobHistory(int jobId) { final String GET_SCHEDULER_STATUS_URL = "/fineract-provider/api/v1/jobs/" + jobId + "/runhistory?" + Utils.TENANT_IDENTIFIER; System.out.println("------------------------ RETRIEVING SCHEDULER JOB HISTORY -------------------------"); final Map response = Utils.performServerGet(requestSpec, response200Spec, GET_SCHEDULER_STATUS_URL, ""); @@ -122,18 +132,18 @@ public class SchedulerJobHelper { runSchedulerJob(this.requestSpec, jobId.toString()); // Retrieving Scheduler Job by ID - Map schedulerJob = getSchedulerJobById(jobId.toString()); + Map schedulerJob = getSchedulerJobById(jobId); Assert.assertNotNull(schedulerJob); // Waiting for Job to complete while ((Boolean) schedulerJob.get("currentlyRunning") == true) { Thread.sleep(15000); - schedulerJob = getSchedulerJobById(jobId.toString()); + schedulerJob = getSchedulerJobById(jobId); Assert.assertNotNull(schedulerJob); System.out.println("Job is Still Running"); } - List jobHistoryData = getSchedulerJobHistory(jobId.toString()); + List jobHistoryData = getSchedulerJobHistory(jobId); Assert.assertFalse("Job History is empty :( Was it too slow? Failures in background job?", jobHistoryData.isEmpty());