package org.onap.vid.api; import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic; import static org.hamcrest.CoreMatchers.is; import static org.hamcrest.CoreMatchers.nullValue; import static org.hamcrest.MatcherAssert.assertThat; import static org.hamcrest.Matchers.allOf; import static org.hamcrest.Matchers.not; import static org.hamcrest.collection.IsCollectionWithSize.hasSize; 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.RELATED_VNF1_ACTION; import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.RELATED_VNF2_ACTION; import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME; import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.VNF_GROUP1_ACTION; import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset; import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; import java.util.List; import java.util.Map; import java.util.UUID; import java.util.function.Function; 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.aai.PresetAAIGetSubscribersGet; import org.onap.simulator.presetGenerator.presets.aai.PresetAAISearchNodeQueryNonEmptyResult; import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet; 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.PresetMSOCreateNetworkALaCarteServiceCypress2; import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService; import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService; import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceMultipleVnfsServiceCypress; import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteServiceCypress; import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteServiceCypress2; import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup; import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteBaseVfModuleCypress; import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteNetworkAlaCarteCypress; import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteService; import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteVfModuleCypress; import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteVnfAlaCarteCypress; 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.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 AsyncInstantiationALaCarteApiTest3 extends AsyncInstantiationBase { private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json"; private static final String CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS = "a-la-carte/redux-multiple-vnf-network.json"; private static final String CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF_GROUP = "VnfGroup/serviceWithVnfGroupCreateRequest.json"; private static final String PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST = "VnfGroup/payloadTemplate1VnfGroupWith3MembersRequest.json"; private static final String DELETE_AND_CREATE_NETWORK_FROM_SERVICE = "asyncInstantiation/vidRequestDelete1Create1Network.json"; private static final String DELETE_SERVICE_WITH_NETWORK = "asyncInstantiation/vidRequestDeleteServiceWithNetwork.json"; private static final String DELETE_AND_CREATE_VNF_FROM_SERVICE = "asyncInstantiation/vidRequestDelete1Create1Vnf.json"; private static final String DELETE_SERVICE_WITH_VNF = "asyncInstantiation/vidRequestDeleteServiceWithVnf.json"; private static final String FIRST_REQUEST_ID = "d1011670-0e1a-4b74-945d-8bf5aede1d9c"; private static final String SECOND_REQUEST_ID = "e2011670-0e1a-4b74-945d-8bf5aede1d9c"; private static final String THIRD_REQUEST_ID = "f3011670-0e1a-4b74-945d-8bf5aede1d9c"; 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(dataProvider = "multipleVnfDataProvider") public void deployServiceFromCypress__multipleVnfsAndNetwork(String expectedStatus, JobStatus expectedJobStatus) { dropAllFromNameCounter();// needed because each data provider info not going to after method final ImmutableMap names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName"); List createPresets = ImmutableList.of( new PresetMSOCreateServiceInstanceMultipleVnfsServiceCypress(names, 0, DEFAULT_REQUEST_ID), new PresetMSOCreateVnfALaCarteServiceCypress(FIRST_REQUEST_ID, SERVICE_INSTANCE_ID,"VFvGeraldine00001", "zzz1"), new PresetMSOCreateVnfALaCarteServiceCypress(SECOND_REQUEST_ID, SERVICE_INSTANCE_ID,"VFvGeraldine00001_001", "ONAP"), new PresetMSOCreateNetworkALaCarteServiceCypress2(THIRD_REQUEST_ID, SERVICE_INSTANCE_ID, "ExtVL") ); List inProgressPresets = ImmutableList.of( new PresetMSOOrchestrationRequestGet(expectedStatus.equals("SERVICE_FAILED") ? MSO_FAILED_STATUS : MSO_COMPLETE_STATUS, DEFAULT_REQUEST_ID), new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, FIRST_REQUEST_ID, "First VNF instance was created successfully." ), new PresetMSOOrchestrationRequestGet(expectedStatus, SECOND_REQUEST_ID, expectedStatus.equals(MSO_COMPLETE_STATUS)?"Second VNF instance was created successfully.": MSO_BASE_ERROR), new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, THIRD_REQUEST_ID,"Network was created successfully.") ); List presets = getPresets( createPresets, inProgressPresets); registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); registerExpectationFromPreset(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC, RegistrationStrategy.APPEND); final List uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS); assertThat(uuids, hasSize(1)); final String jobId = uuids.get(0); //expected vid statuses ImmutableList vidAuditStatuses; if (expectedStatus.equals(MSO_COMPLETE_STATUS)){ vidAuditStatuses = vidAuditStatusesCompleted(jobId); } else if (expectedStatus.equals("SERVICE_FAILED")){ vidAuditStatuses = vidAuditStatusesFailed(jobId); } else { vidAuditStatuses = vidAuditStatusesCompletedWithErrors(jobId); } assertServiceInfoSpecific3(jobId, expectedJobStatus , names.get(SERVICE_NAME)); assertAuditStatuses(jobId, vidAuditStatuses, null); } @DataProvider Object[][] multipleVnfDataProvider() { return new Object[][]{{MSO_FAILED_STATUS, JobStatus.COMPLETED_WITH_ERRORS},{MSO_COMPLETE_STATUS, JobStatus.COMPLETED}, {"SERVICE_FAILED", JobStatus.FAILED}}; } @Test @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING) public void deploy1ServiceWith1VnfGroup() { final ImmutableMap names = ImmutableMap.of(SERVICE_NAME, "Grouping_Service_Instance"); String serviceReqId = "3cf5ea96-6b34-4945-b5b1-4a7798b1caf2"; String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID; String instanceGroupReqId = "715a5106-cdcc-44ee-8923-83d68a896908"; List createPresets = ImmutableList.of( new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, serviceReqId), new PresetMSOCreateVnfGroup("ABC", instanceGroupReqId, PresetMSOCreateVnfGroup.MODEL_INFO_1, serviceInstanceId, false)); List inProgressPresets = ImmutableList.of( new PresetMSOOrchestrationRequestGet("COMPLETE", serviceReqId), new PresetMSOOrchestrationRequestGet("COMPLETE", instanceGroupReqId, "Instance group was created successfully.")); List presets = getPresets(createPresets, inProgressPresets); registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); final List uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF_GROUP); assertThat(uuids, hasSize(1)); final String jobId = uuids.get(0); assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, new ServiceInfo( "us16807000", JobStatus.COMPLETED, false, "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS", null, null, null, null, null, null, "TYLER SILVIA", "SILVIA ROBBINS", null, names.get(SERVICE_NAME), "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0", jobId, null, ServiceAction.INSTANTIATE, false)); assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId),null); assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(createPresets.get(1).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L))); } @DataProvider public static Object[][] addAndDeleteMembersMsoStatus() { return new Object[][]{ {MSO_COMPLETE_STATUS, MSO_COMPLETE_STATUS, JobStatus.COMPLETED}, {MSO_FAILED_STATUS, MSO_FAILED_STATUS, JobStatus.FAILED}, {MSO_COMPLETE_STATUS, MSO_FAILED_STATUS, JobStatus.COMPLETED_WITH_ERRORS} }; } @Test(dataProvider = "addAndDeleteMembersMsoStatus") @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING) public void add1delete1GroupMembers_withGoodResponseFromMso_verifyStatusAndRequests(String firstMemberStatus, String secondMemberStatus, JobStatus expectedJobStatus) { String firstMemberRequestId = UUID.randomUUID().toString(); String secondMemberRequestId = UUID.randomUUID().toString(); List instanceGroupMemberPreset = ImmutableList.of( new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), firstMemberRequestId, InstanceGroupMemberAction.Add), new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), secondMemberRequestId, InstanceGroupMemberAction.Remove) ); List inProgressPresets = ImmutableList.of( new PresetMSOOrchestrationRequestGet(firstMemberStatus, firstMemberRequestId), new PresetMSOOrchestrationRequestGet(secondMemberStatus, secondMemberRequestId) ); List presets = getGroupMembersPresets(instanceGroupMemberPreset,inProgressPresets); registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); final List uuids = createBulkOfInstances(false, 1, ImmutableMap.of( VNF_GROUP1_ACTION, "None", RELATED_VNF1_ACTION, "Create", RELATED_VNF2_ACTION, "None_Delete" ), PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST); assertThat(uuids, hasSize(1)); final String jobId = uuids.get(0); assertAuditStatuses(jobId, vidAuditStatuses(jobId, expectedJobStatus), null, 60); assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(0).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(1).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L) )); } @Test @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING) public void addVnfGroupWith2GroupMembers_withGoodResponseFromMso_verifyStatusAndRequests() { String vnfGroupRequestId = UUID.randomUUID().toString(); String firstMemberRequestId = UUID.randomUUID().toString(); String secondMemberRequestId = UUID.randomUUID().toString(); List vnfGroupPreset = ImmutableList.of( new PresetMSOCreateVnfGroup("VNF_GROUP1_INSTANCE_NAME",vnfGroupRequestId,PresetMSOCreateVnfGroup.MODEL_INFO_0,"service-instance-id", true)); List instanceGroupMemberPreset = ImmutableList.of( new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), firstMemberRequestId, InstanceGroupMemberAction.Add), new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), secondMemberRequestId, InstanceGroupMemberAction.Add) ); List inProgressPresets = ImmutableList.of( new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupRequestId), new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, firstMemberRequestId), new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, secondMemberRequestId) ); final ImmutableList.Builder basePresetBuilder = new ImmutableList.Builder<>(); basePresetBuilder .add(new PresetGetSessionSlotCheckIntervalGet()) .add(new PresetAAIGetSubscribersGet()) .addAll(instanceGroupMemberPreset) .addAll(inProgressPresets) .addAll(vnfGroupPreset); List presets = basePresetBuilder.build(); registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET); final List uuids = createBulkOfInstances(false, 1, ImmutableMap.of( VNF_GROUP1_ACTION, "Create", RELATED_VNF1_ACTION, "Create", RELATED_VNF2_ACTION, "Create" ), PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST); assertThat(uuids, hasSize(1)); final String jobId = uuids.get(0); assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null, 60); assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf( TestUtils.hasOrLacksOfEntry(vnfGroupPreset.get(0).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(0).getReqPath(), 2L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L), TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L) )); } @Test(dataProvider = "scenarios") public void aLaCarteServiceScenarioRunner(Scenario scenario) { /* This tests creates one or more a-la-carte requests, following one of the these scenarios: MSO_FAIL: Submits to MSO, but while getting Orchestration status -> MSO reports failure COMPLETED: Clean legit flow. NAME_TAKEN: Sends request for instance, where AAI reports the name is already taken. Therefore, MSO expects added postfix _001. IN_PROGRESS: Submits to MSO, but while getting Orchestration status -> MSO reports IN_PROGRESS endlessly DUPLICATE_NAME: Sends two requests for instances with the same name. PARALLEL: Submits 3 requests, that must not interfere with each other. */ registerExpectationFromPresets(ImmutableList.of( new PresetGetSessionSlotCheckIntervalGet(), new PresetAAIGetSubscribersGet() ), RegistrationStrategy.CLEAR_THEN_SET); final String name0 = randomAlphabetic(18); OneServiceActor inProgressCase = new OneServiceActor( scenario == Scenario.PARALLEL || scenario == Scenario.IN_PROGRESS || scenario == Scenario.DUPLICATE_NAME, "IN_PROGRESS", "status #1", ImmutableMap.of(SERVICE_NAME, name0), 0, JobStatus.IN_PROGRESS, this::vidAuditStatusesInProgress ); OneServiceActor completedCase = new OneServiceActor( scenario == Scenario.PARALLEL || scenario == Scenario.COMPLETED, MSO_COMPLETE_STATUS, "status #2", ImmutableMap.of(SERVICE_NAME, randomAlphabetic(5)), 0, JobStatus.COMPLETED, this::vidAuditStatusesCompleted ); final String name1 = randomAlphabetic(5); OneServiceActor occupiedNameCase = new OneServiceActor( scenario == Scenario.NAME_TAKEN, MSO_COMPLETE_STATUS, "status #6", ImmutableMap.of(SERVICE_NAME, name1), 1, JobStatus.COMPLETED, this::vidAuditStatusesCompleted, ImmutableList.of(new PresetAAISearchNodeQueryNonEmptyResult("service-instance", name1)) ); OneServiceActor failedCase = new OneServiceActor( scenario == Scenario.PARALLEL || scenario == Scenario.MSO_FAIL, "FAILED", "status #3", ImmutableMap.of(SERVICE_NAME, randomAlphabetic(10)), 0, JobStatus.FAILED, this::vidAuditStatusesFailed ); OneServiceActor duplicateNameCase = new OneServiceActor( scenario == Scenario.DUPLICATE_NAME, MSO_COMPLETE_STATUS, "status #4", ImmutableMap.of(SERVICE_NAME, name0), 1, JobStatus.COMPLETED, this::vidAuditStatusesCompleted ); OneServiceActor inProgressTooLongCase = new OneServiceActor( scenario == Scenario.IN_PROGRESS, "IN_PROGRESS", "status #5", ImmutableMap.of(SERVICE_NAME, randomAlphabetic(10)), 0, JobStatus.FAILED, this::vidAuditStatusesFailed, 24 ); final List servicesActors = ImmutableList.of(inProgressCase, completedCase, occupiedNameCase, failedCase, duplicateNameCase, inProgressTooLongCase); servicesActors.forEach(actor -> registerExpectationFromPresets(actor.getPresets(), RegistrationStrategy.APPEND)); servicesActors.forEach(OneServiceActor::createInstances); servicesActors.forEach(OneServiceActor::assertServiceInfo); servicesActors.forEach(OneServiceActor::assertAuditStatuses2); } @Test public void delete1Create1NetworkFromService() { String deleteRequestId = UUID.randomUUID().toString(); String createRequestId = UUID.randomUUID().toString(); String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID; String networkInstanceId = "NETWORK_INSTANCE_ID"; registerExpectationFromPresets(ImmutableList.of( new PresetMSODeleteNetworkAlaCarteCypress(deleteRequestId, serviceInstanceId, networkInstanceId, "us16807000"), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteRequestId), new PresetMSOCreateNetworkALaCarteServiceCypress2(createRequestId, serviceInstanceId, "ExtVL", "action-data", "6b528779-44a3-4472-bdff-9cd15ec93450"), new PresetMSOOrchestrationRequestGet(COMPLETE, createRequestId), PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC ), RegistrationStrategy.CLEAR_THEN_SET); List uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_AND_CREATE_NETWORK_FROM_SERVICE); assertThat(uuids, hasSize(1)); String jobId = uuids.get(0); assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo( "us16807000", JobStatus.COMPLETED, false, "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS", "JAG1", "YUDFJULP-JAG1", "092eb9e8e4b7412e8787dd091bc58e86", "USP-SIP-IC-24335-T-01", "JANET25", null, "TYLER SILVIA", null, null, "InstanceName", "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0", jobId, null, ServiceAction.UPDATE, false) ); } @Test public void deleteServiceWithNetwork() { String deleteNetworkRequestId = UUID.randomUUID().toString(); String deleteServiceRequestId = UUID.randomUUID().toString(); String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID; String networkInstanceId = "NETWORK_INSTANCE_ID"; registerExpectationFromPresets(ImmutableList.of( new PresetMSODeleteNetworkAlaCarteCypress(deleteNetworkRequestId, serviceInstanceId, networkInstanceId, "us16807000"), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteNetworkRequestId), new PresetMSODeleteService(deleteServiceRequestId, serviceInstanceId), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteServiceRequestId), PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC ), RegistrationStrategy.CLEAR_THEN_SET); List uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_NETWORK); assertThat(uuids, hasSize(1)); String jobId = uuids.get(0); assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo( "us16807000", JobStatus.COMPLETED, false, "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS", "JAG1", "YUDFJULP-JAG1", "092eb9e8e4b7412e8787dd091bc58e86", "USP-SIP-IC-24335-T-01", "JANET25", null, "TYLER SILVIA", null, null, "InstanceName", "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0", jobId, null, ServiceAction.DELETE, false) ); } @Test public void delete1VnfWithVfModulesAndCreate1VnfFromService() { String deleteVnfRequestId = UUID.randomUUID().toString(); String createVnfRequestId = UUID.randomUUID().toString(); String deleteVfModuleRequestId = UUID.randomUUID().toString(); String deleteBaseVfModuleRequestId = UUID.randomUUID().toString(); String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID; String vnfInstanceId = "VNF_INSTANCE_ID"; registerExpectationFromPresets(ImmutableList.of( new PresetAAIGetSubscribersGet(), new PresetMSODeleteVnfAlaCarteCypress(deleteVnfRequestId, serviceInstanceId, vnfInstanceId, "us16807000"), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVnfRequestId), new PresetSDCGetServiceToscaModelGet("6b528779-44a3-4472-bdff-9cd15ec93450", "csar-withDynamicFields-ecompNamingFalse-partialModelDetails-vnfEcompNamingFalse.zip"), new PresetSDCGetServiceMetadataGet("6b528779-44a3-4472-bdff-9cd15ec93450", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0" , "csar-withDynamicFields-ecompNamingFalse-partialModelDetails-vnfEcompNamingFalse.zip"), new PresetMSODeleteVfModuleCypress(deleteVfModuleRequestId, serviceInstanceId, vnfInstanceId, "VF_MODULE_INSTANCE_ID"), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVfModuleRequestId), new PresetMSODeleteBaseVfModuleCypress(deleteBaseVfModuleRequestId, serviceInstanceId, vnfInstanceId, "VF_MODULE_BASE_INSTANCE_ID"), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteBaseVfModuleRequestId), new PresetMSOCreateVnfALaCarteServiceCypress2(createVnfRequestId, serviceInstanceId, "2017388_PASQUALEvPEmCaNkinstanceName", "zzz1"), new PresetMSOOrchestrationRequestGet(COMPLETE, createVnfRequestId), PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC, PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC, PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AAIAIC25_TO_ATT_AIC ), RegistrationStrategy.CLEAR_THEN_SET); List uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_AND_CREATE_VNF_FROM_SERVICE); assertThat(uuids, hasSize(1)); String jobId = uuids.get(0); assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo( "us16807000", JobStatus.COMPLETED, false, "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS", "NFT1", "NFTJSSSS-NFT1", "bae71557c5bb4d5aac6743a4e5f1d054", "AIN Web Tool-15-D-testalexandria", "hvf6", null, "TYLER SILVIA", null, "f8791436-8d55-4fde-b4d5-72dd2cf13cfb", "mCaNkinstancename", "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0", jobId, null, ServiceAction.UPDATE, false) ); } @Test public void deleteServiceWithVnf() { String deleteVnfRequestId = UUID.randomUUID().toString(); String deleteServiceRequestId = UUID.randomUUID().toString(); String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID; String vnfInstanceId = "VNF_INSTANCE_ID"; registerExpectationFromPresets(ImmutableList.of( new PresetMSODeleteVnfAlaCarteCypress(deleteVnfRequestId, serviceInstanceId, vnfInstanceId, "us16807000"), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVnfRequestId), new PresetMSODeleteService(deleteServiceRequestId, serviceInstanceId), new PresetMSOOrchestrationRequestGet(COMPLETE, deleteServiceRequestId), PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC ), RegistrationStrategy.CLEAR_THEN_SET); List uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_VNF); assertThat(uuids, hasSize(1)); String jobId = uuids.get(0); assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, true, new ServiceInfo( "us16807000", JobStatus.COMPLETED, false, "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS", "NFT1", "NFTJSSSS-NFT1", "bae71557c5bb4d5aac6743a4e5f1d054", "AIN Web Tool-15-D-testalexandria", "hvf6", null, "TYLER SILVIA", null, "f8791436-8d55-4fde-b4d5-72dd2cf13cfb", "mCaNkinstancename", "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0", jobId, null, ServiceAction.DELETE, false) ); } private ImmutableList vidAuditStatusesInProgress(String jobId) { return ImmutableList.of( vidAuditStatus(jobId, "PENDING", false), vidAuditStatus(jobId, "IN_PROGRESS", false) ); } private ImmutableList vidAuditStatusesCompleted(String jobId) { return ImmutableList.of( vidAuditStatus(jobId, "PENDING", false), vidAuditStatus(jobId, "IN_PROGRESS", false), vidAuditStatus(jobId, "COMPLETED", true) ); } private ImmutableList vidAuditStatuses(String jobId, JobStatus jobStatus) { switch(jobStatus) { case COMPLETED: return vidAuditStatusesCompleted(jobId); case COMPLETED_WITH_ERRORS: return vidAuditStatusesCompletedWithErrors(jobId); case FAILED: return vidAuditStatusesFailed(jobId); case IN_PROGRESS: return vidAuditStatusesInProgress(jobId); } return null; } private ImmutableList msoAuditStatuses(String jobId , String lastStatus, String lastAdditionalInfo) { final List auditMsoStatuses = getAuditStatuses(jobId, SourceStatus.MSO.name()); final UUID actualRequestId = auditMsoStatuses.get(0).getRequestId(); return ImmutableList.of( msoAuditStatus(jobId, "REQUESTED", null, actualRequestId), msoAuditStatus(jobId, lastStatus, lastAdditionalInfo, actualRequestId) ); } 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 assertServiceInfoSpecific3(String jobId, JobStatus jobStatus, String serviceInstanceName) { assertExpectedStatusAndServiceInfo(jobStatus, jobId, true, new ServiceInfo( "us16807000", jobStatus, false, "aaa1", "aaa1", "yyy1", "YYY1", "UUUAIAAI-YYY1", "1178612d2b394be4834ad77f567c0af2", "AIN Web Tool-15-D-SSPtestcustome", "hvf6", null, "TYLER SILVIA", null, null, serviceInstanceName, "6e59c5de-f052-46fa-aa7e-2fca9d674c44", "ComplexService", "1.0", jobId, null, ServiceAction.INSTANTIATE, false) ); } private List getGroupMembersPresets(List deleteMembersPreset, List inProgressPresets) { final ImmutableList.Builder basePresetBuilder = new ImmutableList.Builder<>(); basePresetBuilder .add(new PresetGetSessionSlotCheckIntervalGet()) .add(new PresetAAIGetSubscribersGet()) .addAll(deleteMembersPreset) .addAll(inProgressPresets); return basePresetBuilder.build(); } enum Scenario { PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL } class OneServiceActor { private final boolean isRelevant; private final String requestId; private final String msoInfo; private final Map serviceNames; private final int suffix; private final String expectedMsoLastStatus; private final JobStatus jobStatus; private final Function> jobAuditStatusesProvider; private String jobId; private int startedHoursAgo = 1; private List morePresets = ImmutableList.of(); private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map serviceNames, int suffix, JobStatus jobStatus, Function> jobAuditStatusesProvider) { this.isRelevant = isRelevant; this.requestId = UUID.randomUUID().toString(); this.msoInfo = msoInfo; this.serviceNames = serviceNames; this.suffix = suffix; this.expectedMsoLastStatus = msoLastStatus; this.jobStatus = jobStatus; this.jobAuditStatusesProvider = jobAuditStatusesProvider; } private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map serviceNames, int suffix, JobStatus jobStatus, Function> jobAuditStatusesProvider, int startedHoursAgo) { this(isRelevant, msoLastStatus, msoInfo, serviceNames, suffix, jobStatus, jobAuditStatusesProvider); this.startedHoursAgo = startedHoursAgo; } private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map serviceNames, int suffix, JobStatus jobStatus, Function> jobAuditStatusesProvider, List morePresets) { this(isRelevant, msoLastStatus, msoInfo, serviceNames, suffix, jobStatus, jobAuditStatusesProvider); this.morePresets = morePresets; } public List getPresets() { // if not relevant -> return empty list return isRelevant ? ImmutableList.builder().add( new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(serviceNames, suffix, requestId), new PresetMSOOrchestrationRequestGet(expectedMsoLastStatus, requestId, msoInfo, startedHoursAgo) ).addAll(morePresets).build() : ImmutableList.of(); } private void createInstances() { // call VID with 1 request, keep the job id if (!isRelevant) return; final List jobIds = createBulkOfInstances(false, 1, serviceNames, CREATE_BULK_OF_ALACARTE_REQUEST); assertThat(jobIds, hasSize(1)); jobId = jobIds.get(0); } private void assertServiceInfo() { if (!isRelevant) return; assertThat(jobId, is(not(nullValue()))); assertServiceInfoSpecific1(jobId, jobStatus, serviceNames.get(SERVICE_NAME)); } private void assertAuditStatuses2() { if (!isRelevant) return; assertThat(jobId, is(not(nullValue()))); assertAuditStatuses(jobId, jobAuditStatusesProvider.apply(jobId), msoAuditStatuses(jobId, expectedMsoLastStatus, msoInfo)); } } }