diff options
Diffstat (limited to 'vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java')
-rw-r--r-- | vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java | 532 |
1 files changed, 532 insertions, 0 deletions
diff --git a/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java new file mode 100644 index 000000000..539e857c9 --- /dev/null +++ b/vid-automation/src/test/java/org/onap/vid/api/AsyncInstantiationALaCarteApiTest.java @@ -0,0 +1,532 @@ +package org.onap.vid.api; + +import static java.util.Collections.emptyMap; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.hamcrest.Matchers.allOf; +import static org.hamcrest.collection.IsCollectionWithSize.hasSize; +import static org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset.DEFAULT_INSTANCE_ID; +import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID; +import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE; +import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME; +import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets; + +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import java.util.UUID; +import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset; +import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset; +import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseDelete; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarteCypress; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteCypress; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteCypress2; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteALaCarteService; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteInstanceGroup; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet; +import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames; +import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet; +import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet; +import org.onap.vid.model.asyncInstantiation.JobAuditStatus; +import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus; +import org.onap.vid.model.asyncInstantiation.ServiceInfo; +import org.testng.annotations.AfterMethod; +import org.testng.annotations.DataProvider; +import org.testng.annotations.Test; +import vid.automation.test.Constants; +import vid.automation.test.infra.FeatureTogglingTest; +import vid.automation.test.infra.Features; +import vid.automation.test.model.JobStatus; +import vid.automation.test.model.ServiceAction; +import vid.automation.test.services.AsyncJobsService; +import vid.automation.test.services.SimulatorApi; +import vid.automation.test.services.SimulatorApi.RegistrationStrategy; + +@FeatureTogglingTest({Features.FLAG_ASYNC_JOBS, Features.FLAG_ASYNC_INSTANTIATION, Features.FLAG_ASYNC_ALACARTE_VNF}) +public class AsyncInstantiationALaCarteApiTest extends AsyncInstantiationBase { + + private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json"; + private static final String CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte.json"; + private static final String CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte-no-testapi.json"; + private static final String DELETE_BULK_OF_ALACARTE_REQUEST = "VnfGroup/ServiceWithVnfGroupsDeleteRequest.json"; + private static final String VIEW_EDIT_VNF_GROUPS_REQUEST = "VnfGroup/VnfGroupCreate1Delete1None1Request.json"; + private static final String DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST = "VnfGroup/vnfGroupCreate1VnfGroupAndDelete2VnfGroupsRequest.json"; + private static final String DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS = "VnfGroup/deleteServiceWith2VnfGroupsRequest_AndThreeGroupMembers.json"; + + + private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID; + private static final String MSO_COMPLETE_STATUS = "COMPLETE"; + private static final String MSO_FAILED_STATUS = "FAILED"; + + + @DataProvider + public static Object[][] scenarios() { + return new Object[][]{ + {Scenario.PARALLEL}, + {Scenario.COMPLETED}, +// {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro +// {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte + {Scenario.IN_PROGRESS}, + {Scenario.MSO_FAIL} + }; + } + + @AfterMethod + protected void dropAllFromNameCounter() { + AsyncJobsService asyncJobsService = new AsyncJobsService(); + asyncJobsService.dropAllFromNameCounter(); + } + + @Test + public void deploy1Service0VnfWithStrictSimulatorCompare__verifyStatusAndAudit() { + /* + Legit Preset || deploy 1 Service, no VNF inside + -> JobStatus is Eventually success, audit + is adequate; strict simulator compare + */ + + final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "calazixide85"); + List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, DEFAULT_REQUEST_ID)); + List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(new PresetMSOOrchestrationRequestGet()); + List<BasePreset> presets = getPresets(createPresets, inProgressPresets); + + registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); + final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST); + + assertThat(uuids, hasSize(1)); + final String jobId = uuids.get(0); + + assertServiceInfoSpecific1(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME)); + assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId)); + } + + @Test + public void deleteServiceWithTwoVnfGroups_andRetry() { + String parentServiceInstanceId = "service-instance-id"; + String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID"; + String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID"; + String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString(); + String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString(); + String parentServiceRequestId = UUID.randomUUID().toString(); + List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString()); + + //failed to delete vnf group, and then also service is not deleted + List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of( + new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove), + new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove), + new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove)); + + List<PresetMSOBaseDelete> deletePresets = ImmutableList.of( + new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()), + new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()) + ); + + List<PresetMSOOrchestrationRequestGet> inProgressPresets = new ArrayList<>(); + inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, firstVnfGroupToDeleteRequestId)); + inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_FAILED_STATUS, secondVnfGroupToDeleteRequestId)); + inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0))); + inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(1))); + inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); + + List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets); + registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); + final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS); + + assertThat(uuids, hasSize(1)); + final String jobId = uuids.get(0); + assertServiceInfoSpecificDeletion(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME", "service-instance-type"); + assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( + TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L), + + TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 3L) + + )); + + //retry to delete vnf-group and then delete service + List<BasePreset> retryPresets = ImmutableList.of( + new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()), + new PresetMSODeleteALaCarteService(parentServiceRequestId,parentServiceInstanceId ), + new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, secondVnfGroupToDeleteRequestId), + new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, parentServiceRequestId)); + registerExpectationFromPresets(retryPresets, RegistrationStrategy.CLEAR_THEN_SET); + + List<String> retryUuids = retryJob(jobId); + assertThat(retryUuids, hasSize(1)); + final String retryJobId = retryUuids.get(0); + assertServiceInfoSpecificDeletion(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME", "service-instance-type"); + + assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( + TestUtils.hasOrLacksOfEntry(retryPresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(retryPresets.get(1).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(retryPresets.get(2).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(retryPresets.get(3).getReqPath(), 1L) + )); + } + + @DataProvider + public static Object[][] msoRequestStatusDataProvider() { + return new Object[][]{ + {MSO_COMPLETE_STATUS, JobStatus.COMPLETED}, + {MSO_FAILED_STATUS, JobStatus.FAILED} + }; + } + + @Test(dataProvider = "msoRequestStatusDataProvider") + public void deleteServiceWithStrictSimulatorCompare__verifyStatusAndAudit(String msoStatus, JobStatus expectedStatus) { + List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(new PresetMSODeleteALaCarteService( DEFAULT_REQUEST_ID, SERVICE_INSTANCE_ID)); + List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of (new PresetMSOOrchestrationRequestGet(msoStatus), + new PresetMSOOrchestrationRequestGet(msoStatus)); + List<BasePreset> presets = getDeletePresets(deletePresets, inProgressPresets); + + registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); + final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST); + + assertThat(uuids, hasSize(1)); + final String jobId = uuids.get(0); + + assertServiceInfoSpecificDeletion(jobId, expectedStatus, "wowServiceWithVnfGroping", "TYLER SILVIA"); + switch (expectedStatus) { + case COMPLETED: + assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId)); + break; + + case FAILED: + assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null); + break; + } + + assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( + TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L) + )); + } + + @Test(dataProvider = "msoRequestStatusDataProvider") + public void deleteTwoGroupsAddOneGroup(String msoStatus, JobStatus expectedStatus) { + String parentServiceInstanceId = "service-instance-id"; + String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID"; + String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID"; + String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString(); + String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString(); + String vnfGroupToCreateRequestId = UUID.randomUUID().toString(); + + List<PresetMSOBaseDelete> deletePresets = ImmutableList.of( + new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()), + new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId())); + + List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of( + new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId, + PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false)); + List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of( + new PresetMSOOrchestrationRequestGet(msoStatus, firstVnfGroupToDeleteRequestId), + new PresetMSOOrchestrationRequestGet(msoStatus, secondVnfGroupToDeleteRequestId), + new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully.") + ); + List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets); + registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); + final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST); + + assertThat(uuids, hasSize(1)); + final String jobId = uuids.get(0); + + assertServiceInfoSpecificUpdate(jobId, expectedStatus, "SERVICE_INSTANCE_NAME"); + assertExpectedStatus(expectedStatus, jobId); + assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( + TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L), + TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L) + )); + + } + + @Test + public void viewEditVnfGroup__verifyStatusAndAudit() { + String parentServiceInstanceId = "service-instance-id"; + String vnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID"; + + //failed to create vnf group, failed to remove 1 member (and then also vnf group isn't deleted) + viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_FAILED_STATUS); + + final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST); + + assertThat(uuids, hasSize(1)); + final String jobId = uuids.get(0); + + assertServiceInfoSpecificUpdate(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME"); + assertExpectedStatus(JobStatus.COMPLETED_WITH_ERRORS, jobId); + Map<String, Long> recordedRequest = SimulatorApi.retrieveRecordedRequestsPathCounter(); + assertThat(recordedRequest, allOf( + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 0L), //delete vnf group + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 3L) //remove vnf group members + )); + + //retry - vnf group create, 1 member remove, vnf group delete + viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_COMPLETE_STATUS); + final List<String> retryUuids = retryJob(jobId); + assertThat(retryUuids, hasSize(1)); + final String retryJobId = retryUuids.get(0); + + assertServiceInfoSpecificUpdate(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME"); + assertExpectedStatus(JobStatus.COMPLETED, retryJobId); + assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 1L), //delete vnf group + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 1L) //remove vnf group members + )); + } + + private void viewEditVnfGroup_registerPresets(String parentServiceInstanceId, String vnfGroupToDeleteInstanceId, String msoStatus) { + String vnfGroupToDeleteRequestId = UUID.randomUUID().toString(); + String vnfGroupToCreateRequestId = UUID.randomUUID().toString(); + List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString()); + + List<PresetMSOBaseDelete> deletePresets = ImmutableList.of( + new PresetMSODeleteInstanceGroup(vnfGroupToDeleteRequestId, vnfGroupToDeleteInstanceId, getUserCredentials().getUserId())); + List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of( + new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId, + PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false), + new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove), + new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove), + new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove)); + List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of( + new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupToDeleteRequestId), // delete instance group + new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully."), // create instance group + new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)), // remove instance group member + new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupMemberRemoveRequestsIds.get(1)), // remove instance group member + new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); // remove instance group member + + List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets); + registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); + } + + private void assertExpectedStatus(JobStatus expectedStatus, String jobId) { + switch (expectedStatus) { + case COMPLETED: + assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null); + break; + + case FAILED: + assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null); + break; + } + } + + @Test + public void deploy1Service1FailedVnf__verifyStatus_andRetry() { + //CreateServiceWithFailedVnf is common for API test and UI test, + //so if you change it, make sure both test are compatible with your changes + CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this); + createServiceWithFailedVnf.deployService1FailedVnf(); + createServiceWithFailedVnf.secondRegistration(); + createServiceWithFailedVnf.retryJob(); + createServiceWithFailedVnf.retryAssertion(); + createServiceWithFailedVnf.simulatorCallsAssertion(); + } + + @DataProvider + Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() { + return Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? new Object[][]{ + {"none", emptyMap(), emptyMap(), true}, + {"none", emptyMap(), emptyMap(), false}, + {"instance", ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L), + ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),true}, + {"network", emptyMap(), + ImmutableMap.of("networks", 1L), true}, + {"vnf0", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), + ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L), true}, + {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L), + ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L), true}, + {"volumeGroup", ImmutableMap.of("vfModules", 2L), + ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true}, + {"vfModule1", emptyMap(), + ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true}, + {"vfModule2", emptyMap(), + ImmutableMap.of("vfModules", 1L), true} + } : new Object[][]{ + {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true} + }; + } + + @Test(dataProvider = "data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls") + public void deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry(String whatToFail, Map<String, Long> pathCounterOverride, Map<String, Long> retryPathCounterOverride, boolean withTestApi) { + final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName"); + String vnfRequestId = UUID.randomUUID().toString(); + registerPresetsForRetryTest(whatToFail, names, vnfRequestId, withTestApi); + + final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS); + + assertThat(uuids, hasSize(1)); + final String jobId = uuids.get(0); + + JobStatus finalJobStatus; + switch (whatToFail) { + case "none": finalJobStatus = JobStatus.COMPLETED; break; + case "instance": finalJobStatus = JobStatus.FAILED; break; + default: finalJobStatus = JobStatus.COMPLETED_WITH_ERRORS; break; + } + assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME)); + assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId); + + if (!"none".equals(whatToFail)) { + registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi); + + List<String> retryUuids = retryJob(jobId); + assertThat(retryUuids, hasSize(1)); + final String retryJobId = retryUuids.get(0); + + ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE; + assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction); + + assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId); + } + } + + private void registerPresetsForRetryTest(String whatToFail, ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names, String vnfRequestId, boolean withTestApi ) { + String networkRequestId = UUID.randomUUID().toString(); + String vfModule0RequestId = UUID.randomUUID().toString(); + String vfModule1RequestId = UUID.randomUUID().toString(); + String vfModule2RequestId = UUID.randomUUID().toString(); + String volumeGroupRequestId = UUID.randomUUID().toString(); + List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of( + new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi), + new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API, withTestApi), + new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID, networkRequestId, "ExtVL", Constants.GR_API, withTestApi) + ); + List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of( + new PresetMSOOrchestrationRequestGet("instance".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE), + new PresetMSOOrchestrationRequestGet("vnf0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vnfRequestId), + new PresetMSOOrchestrationRequestGet("vfModule0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule0RequestId), + new PresetMSOOrchestrationRequestGet("vfModule1".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule1RequestId), + new PresetMSOOrchestrationRequestGet("vfModule2".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule2RequestId), + new PresetMSOOrchestrationRequestGet("volumeGroup".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, volumeGroupRequestId), + new PresetMSOOrchestrationRequestGet("network".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, networkRequestId) + ); + List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets); + + ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>() + .addAll(presetsWithoutVfModule) + .add(new PresetSDCGetServiceToscaModelGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip")) + .add(new PresetSDCGetServiceMetadataGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip")) + .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule0RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module0Names, Constants.GR_API, withTestApi)) + .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVolumeGroup(volumeGroupRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, Constants.GR_API, withTestApi)) + .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVfModule(vfModule1RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, volumeGroupRequestId, Constants.GR_API, withTestApi)) + .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_JUST_ANOTHER_REGION_TO_ATT_AIC) + .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC) + .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MY_REGION_TO_ATT_AIC) + .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_LCP_REGION_TEXT_TO_ATT_AIC) + .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule2RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module2Names, Constants.GR_API, withTestApi)) + .build(); + + registerExpectationFromPresets( + Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule, + RegistrationStrategy.CLEAR_THEN_SET); + } + + private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) { + Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L; + + //noinspection unchecked + assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances", + pathCounterOverride.getOrDefault("serviceInstances", defaultValue)), + + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks", + pathCounterOverride.getOrDefault("networks", defaultValue)), + + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs", + pathCounterOverride.getOrDefault("vnfs", defaultValue)), + + TestUtils.hasOrLacksOfEntry("/mso/serviceInstances/v./" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups", + pathCounterOverride.getOrDefault("volumeGroups", defaultValue)), + + TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/vfModules", + pathCounterOverride.getOrDefault("vfModules", vfModulesDefaultValue)) + )); + } + + private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) { + return ImmutableList.of( + vidAuditStatus(jobId, "PENDING", false), + vidAuditStatus(jobId, "IN_PROGRESS", false), + vidAuditStatus(jobId, "COMPLETED", true) + ); + } + + private ImmutableList<JobAuditStatus> msoAuditStatusesCompleted(String jobId ) { + return ImmutableList.of( + msoAuditStatus(jobId, "REQUESTED", null, UUID.fromString(DEFAULT_REQUEST_ID)), + msoAuditStatus(jobId, MSO_COMPLETE_STATUS, "Service Instance was created successfully.", UUID.fromString(DEFAULT_REQUEST_ID)) + ); + } + + private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) { + return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false); + } + + private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) { + assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE); + } + + private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName, ServiceAction serviceAction) { + assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo( + "us16807000", jobStatus, false, + "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS", + "JAG1", null, + "092eb9e8e4b7412e8787dd091bc58e86", null, + "JANET25", null, + "TYLER SILVIA", null, + null, serviceInstanceName, + "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0", + jobId, null, serviceAction, false) + ); + } + + private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) { + assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo( + "us16807000", jobStatus, false, + null, null, null, + null, null, + null, null, + null, null, + serviceType, null, + null, serviceInstanceName, + "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0", + jobId, null, ServiceAction.DELETE, false) + ); + } + + private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) { + assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo( + "us16807000", jobStatus, false, + null, null, null, + null, null, + null, null, + null, null, + "service-instance-type", null, + "service-instance-id", serviceInstanceName, + "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0", + jobId, null, ServiceAction.UPDATE, false) + ); + } + + enum Scenario { + PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL + } + +} |