Pause Upon VF Module Failure
[vid.git] / vid-automation / src / main / java / org / onap / vid / api / AsyncInstantiationBase.java
index 66bde72..e5da62a 100644 (file)
@@ -1,8 +1,31 @@
 package org.onap.vid.api;
 
+import static java.lang.Boolean.FALSE;
+import static java.lang.Boolean.TRUE;
+import static java.util.Collections.emptyList;
+import static java.util.stream.Collectors.joining;
+import static java.util.stream.Collectors.toMap;
+import static org.hamcrest.CoreMatchers.hasItem;
+import static org.hamcrest.MatcherAssert.assertThat;
+import static org.hamcrest.Matchers.containsInAnyOrder;
+import static org.hamcrest.Matchers.hasSize;
+import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
+import static org.testng.Assert.assertNotNull;
+import static org.testng.AssertJUnit.assertEquals;
+import static org.testng.AssertJUnit.assertTrue;
+import static vid.automation.test.utils.ExtendedHamcrestMatcher.hasItemsFromCollection;
+
 import com.google.common.collect.ImmutableList;
 import com.google.common.collect.ImmutableSet;
-import com.google.common.util.concurrent.Uninterruptibles;
+import java.util.List;
+import java.util.Map;
+import java.util.Set;
+import java.util.UUID;
+import java.util.concurrent.atomic.AtomicReference;
+import java.util.function.Predicate;
+import java.util.stream.Collectors;
+import java.util.stream.IntStream;
+import java.util.stream.Stream;
 import org.apache.commons.lang3.StringUtils;
 import org.apache.commons.lang3.builder.ReflectionToStringBuilder;
 import org.apache.commons.lang3.builder.ToStringStyle;
@@ -38,33 +61,6 @@ import vid.automation.test.model.ServiceAction;
 import vid.automation.test.services.AsyncJobsService;
 import vid.automation.test.services.SimulatorApi;
 
-import java.time.Instant;
-import java.util.List;
-import java.util.Map;
-import java.util.Set;
-import java.util.UUID;
-import java.util.concurrent.TimeUnit;
-import java.util.concurrent.atomic.AtomicReference;
-import java.util.function.Predicate;
-import java.util.stream.Collectors;
-import java.util.stream.IntStream;
-import java.util.stream.Stream;
-
-import static java.lang.Boolean.FALSE;
-import static java.lang.Boolean.TRUE;
-import static java.util.Collections.emptyList;
-import static java.util.stream.Collectors.joining;
-import static java.util.stream.Collectors.toMap;
-import static org.hamcrest.CoreMatchers.hasItem;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.hasSize;
-import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys;
-import static org.testng.Assert.assertNotNull;
-import static org.testng.AssertJUnit.assertEquals;
-import static org.testng.AssertJUnit.assertTrue;
-import static vid.automation.test.utils.ExtendedHamcrestMatcher.hasItemsFromCollection;
-
 public class AsyncInstantiationBase extends BaseMsoApiTest {
 
     public static final String CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF = "asyncInstantiation/vidRequestCreateALaCarteWithVnf.json";
@@ -106,6 +102,10 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
         return uri.toASCIIString() + "/asyncInstantiation";
     }
 
+    protected String getTemplateInfoUrl(String serviceModelId) {
+        return uri.toASCIIString() + "/instantiationTemplates?serviceModelId=" + serviceModelId;
+    }
+
     protected String getJobAuditUrl() {
         return uri.toASCIIString() + "/asyncInstantiation/auditStatus/{JOB_ID}?source={SOURCE}";
     }
@@ -135,7 +135,8 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
     }
 
     protected boolean getExpectedRetryEnabled(JobStatus jobStatus) {
-        return Features.FLAG_1902_RETRY_JOB.isActive() && (jobStatus==JobStatus.FAILED || jobStatus==JobStatus.COMPLETED_WITH_ERRORS);
+        return Features.FLAG_1902_RETRY_JOB.isActive() && (jobStatus==JobStatus.FAILED || jobStatus==JobStatus.COMPLETED_WITH_ERRORS
+                || jobStatus==JobStatus.FAILED_AND_PAUSED);
     }
 
     public List<BasePreset> getPresets(List<PresetMSOBaseDelete> presetOnDeleteList, List<PresetMSOBaseCreateInstancePost> presetOnCreateList, List<PresetMSOOrchestrationRequestGet> presetInProgressList) {
@@ -196,27 +197,14 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
     }
 
     protected void assertAndRetryIfNeeded(Runnable asserter, long timeoutInSeconds) {
-        final Instant expiry = Instant.now().plusSeconds(timeoutInSeconds);
-        while (true) {
-            try {
-                asserter.run();
-                break; // we're cool, assertion passed
-            } catch (AssertionError fail) {
-                Uninterruptibles.sleepUninterruptibly(1, TimeUnit.SECONDS);
-                if (Instant.now().isAfter(expiry)) {
-                    throw fail;
-                } else {
-                    System.out.println("retrying after: " + fail);
-                }
-            }
-        }
+        TestUtils.assertAndRetryIfNeeded(timeoutInSeconds, asserter);
     }
 
     protected ImmutableList<JobAuditStatus> vidAuditStatusesCompletedWithErrors(String jobId) {
         return ImmutableList.of(
                 vidAuditStatus(jobId, "PENDING", false),
                 vidAuditStatus(jobId, "IN_PROGRESS", false),
-                vidAuditStatus(jobId, "COMPLETED_WITH_ERRORS", true)
+                vidAuditStatus(jobId, "COMPLETED_WITH_ERROR", true)
         );
     }
 
@@ -227,7 +215,13 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
                 vidAuditStatus(jobId, "FAILED", true)
         );
     }
-
+    protected ImmutableList<JobAuditStatus> vidAuditStatusesFailedAndPaused(String jobId) {
+        return ImmutableList.of(
+                vidAuditStatus(jobId, "PENDING", false),
+                vidAuditStatus(jobId, "IN_PROGRESS", false),
+                vidAuditStatus(jobId, "FAILED_AND_PAUSED", true)
+        );
+    }
     protected JobAuditStatus vidAuditStatus(String jobId, String jobStatus, boolean isFinal) {
         return new JobAuditStatus(UUID.fromString(jobId), jobStatus, JobAuditStatus.SourceStatus.VID, null, null, isFinal);
     }
@@ -302,15 +296,19 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
         final List<String> jobIds = createBulkOfMacroInstances(presets, false, bulkSize, names);
         Assert.assertEquals(jobIds.size(),bulkSize);
 
+        waitForJobsToSuccessfullyCompleted(bulkSize, jobIds);
+        return jobIds;
+    }
+
+    public void waitForJobsToSuccessfullyCompleted(int bulkSize, List<String> jobIds) {
         assertTrue(String.format("Not all services with ids: %s are in state completed after 30 sec",
                 jobIds.stream().collect(joining(","))),
 
                 Wait.waitFor(y-> serviceListCall().getBody().stream()
                         .filter(si -> jobIds.contains(si.jobId))
-                        .filter(si -> si.jobStatus==JobStatus.COMPLETED)
+                        .filter(si -> si.jobStatus== JobStatus.COMPLETED)
                         .count() == bulkSize,
                 null, 30, 1 ));
-        return jobIds;
     }
 
     protected List<JobAuditStatus> getJobMsoAuditStatusForAlaCarte(String jobUUID, String requestId, String serviceInstanceId){
@@ -507,7 +505,7 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
                     .filter(serviceInfo -> serviceInfo.jobId.equals(jobId))
                     .findFirst().orElse(null);
             Assert.assertNotNull(serviceInfoFromDB);
-            Assert.assertEquals(serviceInfoDataReflected(expectedServiceInfo), serviceInfoDataReflected(serviceInfoFromDB));
+            Assert.assertEquals(serviceInfoDataReflected(serviceInfoFromDB), serviceInfoDataReflected(expectedServiceInfo));
             assertTrue("actual service instance doesn't contain template service name:" + expectedServiceInfo.serviceInstanceName,
                     serviceInfoFromDB.serviceInstanceName.contains(expectedServiceInfo.serviceInstanceName));
 
@@ -537,7 +535,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();
 
@@ -545,12 +543,15 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
         ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
                 .add(new PresetGetSessionSlotCheckIntervalGet())
                 .add(new PresetAAIGetSubscribersGet())
+                .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN3_TO_ATT_SABABA, PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MDT1_TO_ATT_NC)
                 .addAll(msoBulkPresets)
                 .addAll(customPresets)
                 .build();
 
         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) {
@@ -584,4 +585,8 @@ public class AsyncInstantiationBase extends BaseMsoApiTest {
             org.junit.Assert.assertEquals("MSO instanceType  #" + i + " is not as expected", expectedStatus.getInstanceType(), actualStatus.getInstanceType());
         });
     }
+    protected static JobStatus getErrorStatus() {
+            return Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() ?
+                            JobStatus.FAILED_AND_PAUSED : JobStatus.COMPLETED_WITH_ERRORS;
+   }
 }