aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIttay Stern <ittay.stern@att.com>2020-02-17 09:48:20 +0200
committerIttay Stern <ittay.stern@att.com>2020-02-17 08:55:03 +0000
commita4fd70a3a183a3ced4c46415a25d081ece8ac098 (patch)
tree6b501395489531e0d16cd35a1098a8f11208bcc1
parent599bfc9cf2a435006622332f9f3e5071f64bbbd6 (diff)
Fix intermittent test inProgressJobMoreThan24HoursIsFailedInVidAudit
Bit more time was needed. Issue-ID: VID-647 Change-Id: Ie7e101a2eb85e71a38d1cb2efd9f7327e4705fd3 Signed-off-by: Ittay Stern <ittay.stern@att.com>
-rw-r--r--vid-automation/src/main/java/org/onap/vid/api/AsyncInstantiationBase.java4
-rw-r--r--vid-automation/src/main/java/org/onap/vid/api/TestUtils.java34
-rw-r--r--vid-automation/src/main/java/vid/automation/test/infra/Wait.java15
-rw-r--r--vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationMacroApiTest.java63
4 files changed, 64 insertions, 52 deletions
diff --git a/vid-automation/src/main/java/org/onap/vid/api/AsyncInstantiationBase.java b/vid-automation/src/main/java/org/onap/vid/api/AsyncInstantiationBase.java
index 4475c366b..ee3982c19 100644
--- a/vid-automation/src/main/java/org/onap/vid/api/AsyncInstantiationBase.java
+++ b/vid-automation/src/main/java/org/onap/vid/api/AsyncInstantiationBase.java
@@ -544,7 +544,7 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
.toString();
}
- protected void addBulkPendingWithCustomList(List<BasePreset> customPresets){
+ protected Map<Keys, String> addBulkPendingWithCustomList(List<BasePreset> customPresets){
Map<Keys, String> names = generateNames();
final int bulkSize = 2 + customPresets.size();
@@ -559,6 +559,8 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
List<String> jobIds = createBulkOfMacroInstances(presets, false, bulkSize, names);
Assert.assertEquals(jobIds.size(),bulkSize);
+
+ return names;
}
protected void verifyAuditStatuses(String jobId, List<String> statuses, JobAuditStatus.SourceStatus source) {
diff --git a/vid-automation/src/main/java/org/onap/vid/api/TestUtils.java b/vid-automation/src/main/java/org/onap/vid/api/TestUtils.java
index a2fe82e9d..cc292caa7 100644
--- a/vid-automation/src/main/java/org/onap/vid/api/TestUtils.java
+++ b/vid-automation/src/main/java/org/onap/vid/api/TestUtils.java
@@ -1,27 +1,29 @@
package org.onap.vid.api;
+import static org.apache.commons.text.CharacterPredicates.DIGITS;
+import static org.apache.commons.text.CharacterPredicates.LETTERS;
+import static org.hamcrest.CoreMatchers.is;
+import static org.hamcrest.Matchers.hasEntry;
+import static org.hamcrest.Matchers.hasKey;
+import static org.hamcrest.Matchers.not;
+import static vid.automation.test.utils.RegExMatcher.matchesRegEx;
+
import com.fasterxml.jackson.core.JsonParser;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.databind.SerializationFeature;
+import java.io.IOException;
+import java.io.InputStream;
+import java.util.Map;
+import java.util.Scanner;
+import javax.ws.rs.client.WebTarget;
+import javax.ws.rs.core.Response;
import org.apache.commons.text.RandomStringGenerator;
import org.hamcrest.Matcher;
import org.springframework.core.io.Resource;
import org.springframework.core.io.support.PathMatchingResourcePatternResolver;
import org.springframework.core.io.support.ResourcePatternResolver;
import org.springframework.http.HttpStatus;
-
-import javax.ws.rs.client.WebTarget;
-import javax.ws.rs.core.Response;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.Map;
-import java.util.Scanner;
-
-import static org.apache.commons.text.CharacterPredicates.DIGITS;
-import static org.apache.commons.text.CharacterPredicates.LETTERS;
-import static org.hamcrest.CoreMatchers.is;
-import static org.hamcrest.Matchers.*;
-import static vid.automation.test.utils.RegExMatcher.matchesRegEx;
+import org.testng.annotations.DataProvider;
public class TestUtils {
@@ -96,4 +98,10 @@ public class TestUtils {
public static String generateRandomAlphaNumeric(int length) {
return generator.generate(length);
}
+
+ @DataProvider
+ public static Object[][] trueAndFalse() {
+ return new Object[][]{{true}, {false}};
+ }
+
}
diff --git a/vid-automation/src/main/java/vid/automation/test/infra/Wait.java b/vid-automation/src/main/java/vid/automation/test/infra/Wait.java
index cab3a2d5b..c392c2815 100644
--- a/vid-automation/src/main/java/vid/automation/test/infra/Wait.java
+++ b/vid-automation/src/main/java/vid/automation/test/infra/Wait.java
@@ -1,20 +1,21 @@
package vid.automation.test.infra;
+import java.util.concurrent.TimeUnit;
+import java.util.function.Predicate;
import org.apache.commons.collections.CollectionUtils;
+import org.apache.commons.lang3.exception.ExceptionUtils;
import org.onap.sdc.ci.tests.utilities.GeneralUIUtils;
import org.openqa.selenium.JavascriptExecutor;
import org.openqa.selenium.NoSuchElementException;
import vid.automation.test.Constants;
-import java.util.concurrent.TimeUnit;
-import java.util.function.Predicate;
-
public class Wait {
public static boolean byText(String text) {
return GeneralUIUtils.findAndWaitByText(text, Constants.generalTimeout);
}
public static <T> boolean waitFor(Predicate<T> predicate, T input, int numOfRetries, int interval, TimeUnit intervalUnit) {
+ Throwable lastError = null;
for (int i=0; i<numOfRetries; i++) {
try {
if (predicate.test(input)) {
@@ -22,6 +23,7 @@ public class Wait {
}
}
catch (Throwable t) {
+ lastError = t;
System.out.println(String.format("a retry failed due to: %s %s", t, t.getMessage()));
}
try {
@@ -30,7 +32,12 @@ public class Wait {
e.printStackTrace();
}
}
- return false;
+
+ if (lastError != null) {
+ throw ExceptionUtils.<RuntimeException>rethrow(lastError);
+ } else {
+ return false;
+ }
}
public static <T> boolean waitFor(Predicate<T> predicate, T input, int numOfRetries, int interval) {
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationMacroApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationMacroApiTest.java
index 5abc9a865..00aa69120 100644
--- a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationMacroApiTest.java
+++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationMacroApiTest.java
@@ -1,5 +1,6 @@
package org.onap.vid.api;
+import static java.util.Collections.singletonList;
import static java.util.stream.Collectors.counting;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toList;
@@ -300,48 +301,42 @@ public class AsyncInstantiationMacroApiTest extends AsyncInstantiationBase {
}
- @Test
- public void inProgressJobMoreThan24HoursIsFailedInVidAudit() throws JsonProcessingException {
- addBulkPendingWithCustomList(Collections.singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS",24)));
+ @Test(dataProvider = "trueAndFalse", dataProviderClass = TestUtils.class)
+ public void inProgressJobMoreThan24HoursIsFailedInVidAudit(Boolean over24Hours) throws JsonProcessingException {
- AtomicReference<ServiceInfo> inProgressJob = new AtomicReference<>();
- AtomicReference<List<ServiceInfo>> serviceInfoRef = new AtomicReference<>();
- boolean isJobFound = Wait.waitFor(x->{
- List<ServiceInfo> serviceInfoList = serviceListCall().getBody();
- serviceInfoRef.set(serviceInfoList);
- inProgressJob.set(serviceInfoList.stream().
- filter(serviceInfo -> serviceInfo.serviceInstanceId.equals(PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID) && serviceInfo.jobStatus.equals(JobStatus.FAILED))
- .findFirst()
- .orElse(null));
- return inProgressJob.get() != null;
- }, null, 15, 1);
+ // in case 24 did not pass -- IN_PROGRESS should persist; if 24 hour did pass -- fail
- org.junit.Assert.assertTrue(
- "Job with DEFAULT_SERVICE_INSTANCE_ID=" + PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID
- + " and status FAILED should present: " + objectMapper.writeValueAsString(serviceInfoRef.get()), isJobFound);
+ int startedHoursAgo = over24Hours ? 24 : 23;
+ JobStatus jobStatus = over24Hours ? JobStatus.FAILED : JobStatus.IN_PROGRESS;
- verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name(),JobStatus.FAILED.name()), JobAuditStatus.SourceStatus.VID);
- verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO);
- }
+ List<String> expectedStatuses = over24Hours
+ ? Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name(), JobStatus.FAILED.name())
+ : Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name());
- @Test
- public void inProgressJobLessThan24HoursIsStillInProgressInVidAudit(){
- addBulkPendingWithCustomList(Collections.singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS",23)));
+ AtomicReference<List<ServiceInfo>> serviceInfoRef = new AtomicReference<>();
+
+ Map<Keys, String> names = addBulkPendingWithCustomList(
+ singletonList(new PresetMSOOrchestrationRequestGet("IN_PROGRESS", startedHoursAgo)));
- AtomicReference<ServiceInfo> inProgressJob = new AtomicReference<>();
- boolean isJobFound = Wait.waitFor(x->{
+ boolean isJobFound = Wait.waitFor(x -> {
List<ServiceInfo> serviceInfoList = serviceListCall().getBody();
- inProgressJob.set(serviceInfoList.stream().filter(serviceInfo -> serviceInfo.serviceInstanceId.equals(PresetMSOOrchestrationRequestGet.DEFAULT_SERVICE_INSTANCE_ID))
- .findFirst()
- .orElse(null));
- return inProgressJob.get() != null;
- }, null, 15, 1);
+ serviceInfoRef.set(serviceInfoList);
+ ServiceInfo inProgressJob = serviceInfoList.stream()
+ .filter(serviceInfo -> serviceInfo.serviceInstanceName.equals(names.get(Keys.SERVICE_NAME)))
+ .findFirst()
+ .orElseThrow(() -> new AssertionError("Job with serviceInstanceName=" + Keys.SERVICE_NAME + " not found"));
- org.junit.Assert.assertTrue("Job with DEFAULT_SERVICE_INSTANCE_ID should present", isJobFound);
- org.junit.Assert.assertEquals("Tested job status is not as expected", JobStatus.IN_PROGRESS, inProgressJob.get().getJobStatus());
+ org.junit.Assert.assertEquals("Tested job status is not as expected",
+ jobStatus, inProgressJob.getJobStatus());
- verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList(JobStatus.PENDING.name(), JobStatus.IN_PROGRESS.name()), JobAuditStatus.SourceStatus.VID);
- verifyAuditStatuses(inProgressJob.get().jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO);
+ verifyAuditStatuses(inProgressJob.jobId, expectedStatuses, JobAuditStatus.SourceStatus.VID);
+ verifyAuditStatuses(inProgressJob.jobId, Arrays.asList("REQUESTED", "IN_PROGRESS"), JobAuditStatus.SourceStatus.MSO);
+
+ return true;
+ }, null, 10, 2);
+
+ org.junit.Assert.assertTrue(
+ "Job with serviceInstanceName=" + Keys.SERVICE_NAME + " should present: " + objectMapper.writeValueAsString(serviceInfoRef.get()), isJobFound);
}
@Test