Pause Upon VF Module Failure
[vid.git] / vid-automation / src / test / java / org / onap / vid / api / AsyncInstantiationALaCarteApiTest3.java
1 package org.onap.vid.api;
2
3 import static org.apache.commons.lang3.RandomStringUtils.randomAlphabetic;
4 import static org.hamcrest.CoreMatchers.is;
5 import static org.hamcrest.CoreMatchers.nullValue;
6 import static org.hamcrest.MatcherAssert.assertThat;
7 import static org.hamcrest.Matchers.allOf;
8 import static org.hamcrest.Matchers.not;
9 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
10 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
11 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
12 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.RELATED_VNF1_ACTION;
13 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.RELATED_VNF2_ACTION;
14 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
15 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.VNF_GROUP1_ACTION;
16 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
17 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
18
19 import com.google.common.collect.ImmutableList;
20 import com.google.common.collect.ImmutableMap;
21 import java.util.List;
22 import java.util.Map;
23 import java.util.UUID;
24 import java.util.function.Function;
25 import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
26 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
27 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
28 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
29 import org.onap.simulator.presetGenerator.presets.aai.PresetAAISearchNodeQueryNonEmptyResult;
30 import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
31 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember;
32 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction;
33 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
34 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarteServiceCypress2;
35 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService;
36 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService;
37 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceMultipleVnfsServiceCypress;
38 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteServiceCypress;
39 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteServiceCypress2;
40 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup;
41 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteBaseVfModuleCypress;
42 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteNetworkAlaCarteCypress;
43 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteService;
44 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteVfModuleCypress;
45 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteVnfAlaCarteCypress;
46 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
47 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames;
48 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
49 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
50 import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
51 import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
52 import org.onap.vid.model.asyncInstantiation.ServiceInfo;
53 import org.testng.annotations.AfterMethod;
54 import org.testng.annotations.DataProvider;
55 import org.testng.annotations.Test;
56 import vid.automation.test.infra.FeatureTogglingTest;
57 import vid.automation.test.infra.Features;
58 import vid.automation.test.model.JobStatus;
59 import vid.automation.test.model.ServiceAction;
60 import vid.automation.test.services.AsyncJobsService;
61 import vid.automation.test.services.SimulatorApi;
62 import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
63
64 @FeatureTogglingTest({Features.FLAG_ASYNC_ALACARTE_VNF})
65 public class AsyncInstantiationALaCarteApiTest3 extends AsyncInstantiationBase {
66
67     private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json";
68     private static final String CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS = "a-la-carte/redux-multiple-vnf-network.json";
69     private static final String CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF_GROUP = "VnfGroup/serviceWithVnfGroupCreateRequest.json";
70     private static final String PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST = "VnfGroup/payloadTemplate1VnfGroupWith3MembersRequest.json";
71     private static final String DELETE_AND_CREATE_NETWORK_FROM_SERVICE = "asyncInstantiation/vidRequestDelete1Create1Network.json";
72     private static final String DELETE_SERVICE_WITH_NETWORK = "asyncInstantiation/vidRequestDeleteServiceWithNetwork.json";
73     private static final String DELETE_AND_CREATE_VNF_FROM_SERVICE = "asyncInstantiation/vidRequestDelete1Create1Vnf.json";
74     private static final String DELETE_SERVICE_WITH_VNF = "asyncInstantiation/vidRequestDeleteServiceWithVnf.json";
75
76
77     private static final String FIRST_REQUEST_ID = "d1011670-0e1a-4b74-945d-8bf5aede1d9c";
78     private static final String SECOND_REQUEST_ID = "e2011670-0e1a-4b74-945d-8bf5aede1d9c";
79     private static final String THIRD_REQUEST_ID = "f3011670-0e1a-4b74-945d-8bf5aede1d9c";
80     private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
81     private static final String MSO_COMPLETE_STATUS = "COMPLETE";
82     private static final String MSO_FAILED_STATUS = "FAILED";
83
84
85     @DataProvider
86     public static Object[][] scenarios() {
87         return new Object[][]{
88                 {Scenario.PARALLEL},
89                 {Scenario.COMPLETED},
90 //                {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
91 //                {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
92                 {Scenario.IN_PROGRESS},
93                 {Scenario.MSO_FAIL}
94         };
95     }
96
97     @AfterMethod
98     protected void dropAllFromNameCounter() {
99         AsyncJobsService asyncJobsService = new AsyncJobsService();
100         asyncJobsService.dropAllFromNameCounter();
101     }
102
103     @Test(dataProvider = "multipleVnfDataProvider")
104     public void deployServiceFromCypress__multipleVnfsAndNetwork(String expectedStatus, JobStatus expectedJobStatus) {
105         dropAllFromNameCounter();// needed because each data provider info not going to after method
106         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
107
108         List<PresetMSOBaseCreateInstancePost> createPresets =   ImmutableList.of(
109                 new PresetMSOCreateServiceInstanceMultipleVnfsServiceCypress(names, 0, DEFAULT_REQUEST_ID),
110                 new PresetMSOCreateVnfALaCarteServiceCypress(FIRST_REQUEST_ID, SERVICE_INSTANCE_ID,"VFvGeraldine00001", "zzz1"),
111                 new PresetMSOCreateVnfALaCarteServiceCypress(SECOND_REQUEST_ID, SERVICE_INSTANCE_ID,"VFvGeraldine00001_001", "ONAP"),
112                 new PresetMSOCreateNetworkALaCarteServiceCypress2(THIRD_REQUEST_ID, SERVICE_INSTANCE_ID, "ExtVL")
113         );
114         List<PresetMSOOrchestrationRequestGet> inProgressPresets =  ImmutableList.of(
115                 new PresetMSOOrchestrationRequestGet(expectedStatus.equals("SERVICE_FAILED") ? MSO_FAILED_STATUS : MSO_COMPLETE_STATUS, DEFAULT_REQUEST_ID),
116                 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, FIRST_REQUEST_ID, "First VNF instance was created successfully." ),
117                 new PresetMSOOrchestrationRequestGet(expectedStatus, SECOND_REQUEST_ID, expectedStatus.equals(MSO_COMPLETE_STATUS)?"Second VNF instance was created successfully.": MSO_BASE_ERROR),
118                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, THIRD_REQUEST_ID,"Network was created successfully.")
119         );
120         List<BasePreset> presets = getPresets( createPresets, inProgressPresets);
121
122         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
123         registerExpectationFromPreset(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC, RegistrationStrategy.APPEND);
124
125         final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_MULTIPLE_VNF_NETWORK_REQUEST_CYPRESS);
126
127         assertThat(uuids, hasSize(1));
128         final String jobId = uuids.get(0);
129
130         //expected vid statuses
131         ImmutableList<JobAuditStatus> vidAuditStatuses;
132
133         if (expectedStatus.equals(MSO_COMPLETE_STATUS)){
134             vidAuditStatuses = vidAuditStatusesCompleted(jobId);
135         } else if (expectedStatus.equals("SERVICE_FAILED")){
136             vidAuditStatuses = vidAuditStatusesFailed(jobId);
137         } else {
138             vidAuditStatuses = Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() ?
139                                 vidAuditStatusesFailedAndPaused(jobId) :
140                                 vidAuditStatusesCompletedWithErrors(jobId);
141         }
142
143         assertServiceInfoSpecific3(jobId, expectedJobStatus , names.get(SERVICE_NAME));
144         assertAuditStatuses(jobId, vidAuditStatuses, null);
145     }
146
147
148     @DataProvider
149     Object[][] multipleVnfDataProvider() {
150         return new Object[][]{
151                 {
152                     MSO_FAILED_STATUS, Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() ? JobStatus.FAILED_AND_PAUSED :
153                                 JobStatus.COMPLETED_WITH_ERRORS },
154                 {   MSO_COMPLETE_STATUS, JobStatus.COMPLETED },
155                 {   "SERVICE_FAILED", JobStatus.FAILED } };
156     }
157
158     @Test
159     @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
160     public void deploy1ServiceWith1VnfGroup() {
161         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "Grouping_Service_Instance");
162         String serviceReqId = "3cf5ea96-6b34-4945-b5b1-4a7798b1caf2";
163         String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
164         String instanceGroupReqId = "715a5106-cdcc-44ee-8923-83d68a896908";
165
166         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
167                 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteGroupingService(names, 0, serviceReqId),
168                 new PresetMSOCreateVnfGroup("ABC", instanceGroupReqId, PresetMSOCreateVnfGroup.MODEL_INFO_1, serviceInstanceId, false));
169         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
170                 new PresetMSOOrchestrationRequestGet("COMPLETE", serviceReqId),
171                 new PresetMSOOrchestrationRequestGet("COMPLETE", instanceGroupReqId, "Instance group was created successfully."));
172         List<BasePreset> presets = getPresets(createPresets, inProgressPresets);
173
174         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
175
176         final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST_WITH_VNF_GROUP);
177
178         assertThat(uuids, hasSize(1));
179         final String jobId = uuids.get(0);
180
181         assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, new ServiceInfo(
182                 "us16807000", JobStatus.COMPLETED, false,
183                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
184                 null, null,
185                 null, null,
186                 null, null,
187                 "TYLER SILVIA", "SILVIA ROBBINS",
188                 null, names.get(SERVICE_NAME),
189                 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
190                 jobId, null, ServiceAction.INSTANTIATE, false));
191
192
193         assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId),null);
194
195         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
196                 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
197                 TestUtils.hasOrLacksOfEntry(createPresets.get(1).getReqPath(), 1L),
198                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
199                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L)));
200     }
201
202     @DataProvider
203     public static Object[][] addAndDeleteMembersMsoStatus() {
204         return new Object[][]{
205                 {MSO_COMPLETE_STATUS, MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
206                 {MSO_FAILED_STATUS, MSO_FAILED_STATUS, JobStatus.FAILED},
207                 {MSO_FAILED_STATUS, MSO_COMPLETE_STATUS,
208                         Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() ?
209                                 JobStatus.FAILED_AND_PAUSED : JobStatus.COMPLETED_WITH_ERRORS }
210         };
211     }
212
213     @Test(dataProvider = "addAndDeleteMembersMsoStatus")
214     @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
215     public void add1delete1GroupMembers_withGoodResponseFromMso_verifyStatusAndRequests(String firstMemberStatus, String secondMemberStatus, JobStatus expectedJobStatus) {
216
217         String firstMemberRequestId = UUID.randomUUID().toString();
218         String secondMemberRequestId = UUID.randomUUID().toString();
219
220         List<PresetMSOAddOrRemoveOneInstanceGroupMember> instanceGroupMemberPreset = ImmutableList.of(
221                 new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), firstMemberRequestId, InstanceGroupMemberAction.Add),
222                 new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), secondMemberRequestId, InstanceGroupMemberAction.Remove)
223         );
224         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
225                 new PresetMSOOrchestrationRequestGet(firstMemberStatus, firstMemberRequestId),
226                 new PresetMSOOrchestrationRequestGet(secondMemberStatus, secondMemberRequestId)
227         );
228
229         List<BasePreset> presets = getGroupMembersPresets(instanceGroupMemberPreset,inProgressPresets);
230         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
231         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(
232                 VNF_GROUP1_ACTION, "None",
233                 RELATED_VNF1_ACTION, "Create",
234                 RELATED_VNF2_ACTION, "None_Delete"
235         ), PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST);
236
237         assertThat(uuids, hasSize(1));
238         final String jobId = uuids.get(0);
239
240         assertAuditStatuses(jobId, vidAuditStatuses(jobId, expectedJobStatus), null, 60);
241         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
242                 TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(0).getReqPath(), 1L),
243                 TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(1).getReqPath(), 1L),
244                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
245                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L)
246         ));
247     }
248
249     @Test
250     @FeatureTogglingTest(Features.FLAG_1902_VNF_GROUPING)
251     public void addVnfGroupWith2GroupMembers_withGoodResponseFromMso_verifyStatusAndRequests() {
252
253         String vnfGroupRequestId = UUID.randomUUID().toString();
254         String firstMemberRequestId = UUID.randomUUID().toString();
255         String secondMemberRequestId = UUID.randomUUID().toString();
256
257         List <PresetMSOCreateVnfGroup> vnfGroupPreset = ImmutableList.of(
258                 new PresetMSOCreateVnfGroup("VNF_GROUP1_INSTANCE_NAME",vnfGroupRequestId,PresetMSOCreateVnfGroup.MODEL_INFO_0,"service-instance-id", true));
259         List<PresetMSOAddOrRemoveOneInstanceGroupMember> instanceGroupMemberPreset = ImmutableList.of(
260                 new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), firstMemberRequestId, InstanceGroupMemberAction.Add),
261                 new PresetMSOAddOrRemoveOneInstanceGroupMember("VNF_GROUP1_INSTANCE_ID", "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), secondMemberRequestId, InstanceGroupMemberAction.Add)
262         );
263         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
264                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupRequestId),
265                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, firstMemberRequestId),
266                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, secondMemberRequestId)
267         );
268
269         final ImmutableList.Builder<BasePreset> basePresetBuilder = new ImmutableList.Builder<>();
270         basePresetBuilder
271                 .add(new PresetGetSessionSlotCheckIntervalGet())
272                 .add(new PresetAAIGetSubscribersGet())
273                 .addAll(instanceGroupMemberPreset)
274                 .addAll(inProgressPresets)
275                 .addAll(vnfGroupPreset);
276         List<BasePreset> presets = basePresetBuilder.build();
277
278         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
279         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(
280                 VNF_GROUP1_ACTION, "Create",
281                 RELATED_VNF1_ACTION, "Create",
282                 RELATED_VNF2_ACTION, "Create"
283         ), PAYLOAD_TEMPLATE_1_VNF_GROUP_WITH_3_MEMBERS_REQUEST);
284
285         assertThat(uuids, hasSize(1));
286         final String jobId = uuids.get(0);
287
288         assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null, 60);
289         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
290                 TestUtils.hasOrLacksOfEntry(vnfGroupPreset.get(0).getReqPath(), 1L),
291                 TestUtils.hasOrLacksOfEntry(instanceGroupMemberPreset.get(0).getReqPath(), 2L),
292                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
293                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
294                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L)
295         ));
296     }
297
298     @Test(dataProvider = "scenarios")
299     public void aLaCarteServiceScenarioRunner(Scenario scenario) {
300         /*
301         This tests creates one or more a-la-carte requests, following one of the these scenarios:
302
303         MSO_FAIL:        Submits to MSO, but while getting Orchestration status -> MSO
304                          reports failure
305         COMPLETED:       Clean legit flow.
306         NAME_TAKEN:      Sends request for instance, where AAI reports the name is
307                          already taken. Therefore, MSO expects added postfix _001.
308         IN_PROGRESS:     Submits to MSO, but while getting Orchestration status -> MSO
309                          reports IN_PROGRESS endlessly
310         DUPLICATE_NAME:  Sends two requests for instances with the same name.
311         PARALLEL:        Submits 3 requests, that must not interfere with each other.
312          */
313
314         registerExpectationFromPresets(ImmutableList.of(
315                 new PresetGetSessionSlotCheckIntervalGet(),
316                 new PresetAAIGetSubscribersGet()
317         ), RegistrationStrategy.CLEAR_THEN_SET);
318
319
320         final String name0 = randomAlphabetic(18);
321
322         OneServiceActor inProgressCase = new OneServiceActor(
323                 scenario == Scenario.PARALLEL || scenario == Scenario.IN_PROGRESS || scenario == Scenario.DUPLICATE_NAME,
324                 "IN_PROGRESS", "status #1",
325                 ImmutableMap.of(SERVICE_NAME, name0), 0,
326                 JobStatus.IN_PROGRESS, this::vidAuditStatusesInProgress
327         );
328
329         OneServiceActor completedCase = new OneServiceActor(
330                 scenario == Scenario.PARALLEL || scenario == Scenario.COMPLETED,
331                 MSO_COMPLETE_STATUS, "status #2",
332                 ImmutableMap.of(SERVICE_NAME, randomAlphabetic(5)), 0,
333                 JobStatus.COMPLETED, this::vidAuditStatusesCompleted
334         );
335
336         final String name1 = randomAlphabetic(5);
337         OneServiceActor occupiedNameCase = new OneServiceActor(
338                 scenario == Scenario.NAME_TAKEN,
339                 MSO_COMPLETE_STATUS, "status #6",
340                 ImmutableMap.of(SERVICE_NAME, name1), 1,
341                 JobStatus.COMPLETED, this::vidAuditStatusesCompleted,
342                 ImmutableList.of(new PresetAAISearchNodeQueryNonEmptyResult("service-instance", name1))
343         );
344
345         OneServiceActor failedCase = new OneServiceActor(
346                 scenario == Scenario.PARALLEL || scenario == Scenario.MSO_FAIL,
347                 "FAILED", "status #3",
348                 ImmutableMap.of(SERVICE_NAME, randomAlphabetic(10)), 0,
349                 JobStatus.FAILED, this::vidAuditStatusesFailed
350         );
351
352         OneServiceActor duplicateNameCase = new OneServiceActor(
353                 scenario == Scenario.DUPLICATE_NAME,
354                 MSO_COMPLETE_STATUS, "status #4",
355                 ImmutableMap.of(SERVICE_NAME, name0), 1,
356                 JobStatus.COMPLETED, this::vidAuditStatusesCompleted
357         );
358
359         OneServiceActor inProgressTooLongCase = new OneServiceActor(
360                 scenario == Scenario.IN_PROGRESS,
361                 "IN_PROGRESS", "status #5",
362                 ImmutableMap.of(SERVICE_NAME, randomAlphabetic(10)), 0,
363                 JobStatus.FAILED, this::vidAuditStatusesFailed, 24
364         );
365
366         final List<OneServiceActor> servicesActors =
367                 ImmutableList.of(inProgressCase, completedCase, occupiedNameCase, failedCase, duplicateNameCase, inProgressTooLongCase);
368
369         servicesActors.forEach(actor -> registerExpectationFromPresets(actor.getPresets(),
370                 RegistrationStrategy.APPEND));
371
372         servicesActors.forEach(OneServiceActor::createInstances);
373
374         servicesActors.forEach(OneServiceActor::assertServiceInfo);
375         servicesActors.forEach(OneServiceActor::assertAuditStatuses2);
376     }
377
378     @Test
379     public void delete1Create1NetworkFromService() {
380         String deleteRequestId = UUID.randomUUID().toString();
381         String createRequestId = UUID.randomUUID().toString();
382         String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
383         String networkInstanceId = "NETWORK_INSTANCE_ID";
384
385         registerExpectationFromPresets(ImmutableList.of(
386                 new PresetAAIGetSubscribersGet(),
387                 new PresetMSODeleteNetworkAlaCarteCypress(deleteRequestId, serviceInstanceId, networkInstanceId, "us16807000"),
388                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteRequestId),
389                 new PresetMSOCreateNetworkALaCarteServiceCypress2(createRequestId, serviceInstanceId,
390                     "ExtVL", "action-data",
391                     "6b528779-44a3-4472-bdff-9cd15ec93450", "xxx1,platform", "zzz1,ONAP"),
392                 new PresetMSOOrchestrationRequestGet(COMPLETE, createRequestId),
393                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC
394         ), RegistrationStrategy.CLEAR_THEN_SET);
395
396         List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_AND_CREATE_NETWORK_FROM_SERVICE);
397         assertThat(uuids, hasSize(1));
398         String jobId = uuids.get(0);
399
400         assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
401                 "us16807000", JobStatus.COMPLETED, false,
402                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
403                 "JAG1", "YUDFJULP-JAG1",
404                 "092eb9e8e4b7412e8787dd091bc58e86", "USP-SIP-IC-24335-T-01",
405                 "AAIAIC25", null,
406                 "TYLER SILVIA", null,
407                 null, "InstanceName",
408                 "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
409                 jobId, null, ServiceAction.UPDATE, false)
410         );
411     }
412
413     @Test
414     public void deleteServiceWithNetwork() {
415         String deleteNetworkRequestId = UUID.randomUUID().toString();
416         String deleteServiceRequestId = UUID.randomUUID().toString();
417         String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
418         String networkInstanceId = "NETWORK_INSTANCE_ID";
419
420         registerExpectationFromPresets(ImmutableList.of(
421                 new PresetAAIGetSubscribersGet(),
422                 new PresetMSODeleteNetworkAlaCarteCypress(deleteNetworkRequestId, serviceInstanceId, networkInstanceId, "us16807000"),
423                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteNetworkRequestId),
424                 new PresetMSODeleteService(deleteServiceRequestId, serviceInstanceId),
425                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteServiceRequestId),
426                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC
427         ), RegistrationStrategy.CLEAR_THEN_SET);
428
429         List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_NETWORK);
430         assertThat(uuids, hasSize(1));
431         String jobId = uuids.get(0);
432
433         assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
434                 "us16807000", JobStatus.COMPLETED, false,
435                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
436                 "JAG1", "YUDFJULP-JAG1",
437                 "092eb9e8e4b7412e8787dd091bc58e86", "USP-SIP-IC-24335-T-01",
438                 "AAIAIC25", null,
439                 "TYLER SILVIA", null,
440                 null, "InstanceName",
441                 "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
442                 jobId, null, ServiceAction.DELETE, false)
443         );
444     }
445
446     @Test
447     public void delete1VnfWithVfModulesAndCreate1VnfFromService() {
448         String deleteVnfRequestId = UUID.randomUUID().toString();
449         String createVnfRequestId = UUID.randomUUID().toString();
450         String deleteVfModuleRequestId = UUID.randomUUID().toString();
451         String deleteBaseVfModuleRequestId = UUID.randomUUID().toString();
452         String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
453         String vnfInstanceId = "VNF_INSTANCE_ID";
454
455         registerExpectationFromPresets(ImmutableList.of(
456                 new PresetAAIGetSubscribersGet(),
457                 new PresetMSODeleteVnfAlaCarteCypress(deleteVnfRequestId, serviceInstanceId, vnfInstanceId, "us16807000"),
458                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVnfRequestId),
459                 new PresetSDCGetServiceToscaModelGet("6b528779-44a3-4472-bdff-9cd15ec93450", "csar-withDynamicFields-ecompNamingFalse-partialModelDetails-vnfEcompNamingFalse.zip"),
460                 new PresetSDCGetServiceMetadataGet("6b528779-44a3-4472-bdff-9cd15ec93450", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0" , "csar-withDynamicFields-ecompNamingFalse-partialModelDetails-vnfEcompNamingFalse.zip"),
461                 new PresetMSODeleteVfModuleCypress(deleteVfModuleRequestId, serviceInstanceId, vnfInstanceId, "VF_MODULE_INSTANCE_ID"),
462                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVfModuleRequestId),
463                 new PresetMSODeleteBaseVfModuleCypress(deleteBaseVfModuleRequestId, serviceInstanceId, vnfInstanceId, "VF_MODULE_BASE_INSTANCE_ID"),
464                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteBaseVfModuleRequestId),
465                 new PresetMSOCreateVnfALaCarteServiceCypress2(createVnfRequestId, serviceInstanceId, "2017388_PASQUALEvPEmCaNkinstanceName", "zzz1"),
466                 new PresetMSOOrchestrationRequestGet(COMPLETE, createVnfRequestId),
467                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC,
468                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC,
469                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_AAIAIC25_TO_ATT_AIC
470         ), RegistrationStrategy.CLEAR_THEN_SET);
471
472         List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_AND_CREATE_VNF_FROM_SERVICE);
473         assertThat(uuids, hasSize(1));
474         String jobId = uuids.get(0);
475
476         assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
477                 "us16807000", JobStatus.COMPLETED, false,
478                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
479                 "NFT1", "NFTJSSSS-NFT1",
480                 "bae71557c5bb4d5aac6743a4e5f1d054", "AIN Web Tool-15-D-testalexandria",
481                 "hvf6", null,
482                 "TYLER SILVIA", null,
483                 "f8791436-8d55-4fde-b4d5-72dd2cf13cfb", "mCaNkinstancename",
484                 "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
485                 jobId, null, ServiceAction.UPDATE, false)
486         );
487     }
488
489     @Test
490     public void deleteServiceWithVnf() {
491         String deleteVnfRequestId = UUID.randomUUID().toString();
492         String deleteServiceRequestId = UUID.randomUUID().toString();
493         String serviceInstanceId = BaseMSOPreset.DEFAULT_INSTANCE_ID;
494         String vnfInstanceId = "VNF_INSTANCE_ID";
495
496         registerExpectationFromPresets(ImmutableList.of(
497                 new PresetAAIGetSubscribersGet(),
498                 new PresetMSODeleteVnfAlaCarteCypress(deleteVnfRequestId, serviceInstanceId, vnfInstanceId, "us16807000"),
499                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteVnfRequestId),
500                 new PresetMSODeleteService(deleteServiceRequestId, serviceInstanceId),
501                 new PresetMSOOrchestrationRequestGet(COMPLETE, deleteServiceRequestId),
502                 PresetAAIGetCloudOwnersByCloudRegionId.PRESET_SOME_LEGACY_REGION_TO_ATT_AIC
503         ), RegistrationStrategy.CLEAR_THEN_SET);
504
505         List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_VNF);
506         assertThat(uuids, hasSize(1));
507         String jobId = uuids.get(0);
508
509         assertExpectedStatusAndServiceInfo(JobStatus.COMPLETED, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
510                 "us16807000", JobStatus.COMPLETED, false,
511                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
512                 "NFT1", "NFTJSSSS-NFT1",
513                 "bae71557c5bb4d5aac6743a4e5f1d054", "AIN Web Tool-15-D-testalexandria",
514                 "hvf6", null,
515                 "TYLER SILVIA", null,
516                 "f8791436-8d55-4fde-b4d5-72dd2cf13cfb", "mCaNkinstancename",
517                 "6b528779-44a3-4472-bdff-9cd15ec93450", "action-data", "1.0",
518                 jobId, null, ServiceAction.DELETE, false)
519         );
520     }
521
522     private ImmutableList<JobAuditStatus> vidAuditStatusesInProgress(String jobId) {
523         return ImmutableList.of(
524                 vidAuditStatus(jobId, "PENDING", false),
525                 vidAuditStatus(jobId, "IN_PROGRESS", false)
526         );
527     }
528
529     private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
530         return ImmutableList.of(
531                 vidAuditStatus(jobId, "PENDING", false),
532                 vidAuditStatus(jobId, "IN_PROGRESS", false),
533                 vidAuditStatus(jobId, "COMPLETED", true)
534         );
535     }
536
537     private ImmutableList<JobAuditStatus> vidAuditStatuses(String jobId, JobStatus jobStatus) {
538         switch(jobStatus) {
539             case COMPLETED:
540                 return vidAuditStatusesCompleted(jobId);
541             case COMPLETED_WITH_ERRORS:
542                 return vidAuditStatusesCompletedWithErrors(jobId);
543             case FAILED:
544                 return vidAuditStatusesFailed(jobId);
545             case IN_PROGRESS:
546                 return vidAuditStatusesInProgress(jobId);
547             case FAILED_AND_PAUSED:
548                 return vidAuditStatusesFailedAndPaused(jobId);
549         }
550
551         return null;
552     }
553
554     private ImmutableList<JobAuditStatus> msoAuditStatuses(String jobId , String lastStatus, String lastAdditionalInfo) {
555         final List<JobAuditStatus> auditMsoStatuses = getAuditStatuses(jobId, SourceStatus.MSO.name());
556         final UUID actualRequestId = auditMsoStatuses.get(0).getRequestId();
557         return ImmutableList.of(
558                 msoAuditStatus(jobId, "REQUESTED", null, actualRequestId),
559                 msoAuditStatus(jobId, lastStatus, lastAdditionalInfo, actualRequestId)
560         );
561     }
562
563     private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
564         return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
565     }
566
567     private void assertServiceInfoSpecific3(String jobId, JobStatus jobStatus, String serviceInstanceName) {
568         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
569                 "us16807000", jobStatus, false,
570                 "aaa1", "aaa1", "yyy1",
571                 "YYY1", "UUUAIAAI-YYY1",
572                 "1178612d2b394be4834ad77f567c0af2", "AIN Web Tool-15-D-SSPtestcustome",
573                 "hvf6", null,
574                 "TYLER SILVIA", null,
575                 null, serviceInstanceName,
576                 "6e59c5de-f052-46fa-aa7e-2fca9d674c44", "ComplexService", "1.0",
577                 jobId, null, ServiceAction.INSTANTIATE, false)
578         );
579     }
580
581     private List<BasePreset> getGroupMembersPresets(List<PresetMSOAddOrRemoveOneInstanceGroupMember> deleteMembersPreset, List<PresetMSOOrchestrationRequestGet> inProgressPresets) {
582         final ImmutableList.Builder<BasePreset> basePresetBuilder = new ImmutableList.Builder<>();
583         basePresetBuilder
584                 .add(new PresetGetSessionSlotCheckIntervalGet())
585                 .add(new PresetAAIGetSubscribersGet())
586                 .addAll(deleteMembersPreset)
587                 .addAll(inProgressPresets);
588         return basePresetBuilder.build();
589     }
590
591
592     enum Scenario {
593         PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL
594     }
595
596     class OneServiceActor {
597         private final boolean isRelevant;
598         private final String requestId;
599         private final String msoInfo;
600         private final Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames;
601         private final int suffix;
602         private final String expectedMsoLastStatus;
603         private final JobStatus jobStatus;
604         private final Function<String, List<JobAuditStatus>> jobAuditStatusesProvider;
605         private String jobId;
606         private int startedHoursAgo = 1;
607         private List<BasePreset> morePresets = ImmutableList.of();
608
609         private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames, int suffix, JobStatus jobStatus, Function<String, List<JobAuditStatus>> jobAuditStatusesProvider) {
610             this.isRelevant = isRelevant;
611             this.requestId = UUID.randomUUID().toString();
612             this.msoInfo = msoInfo;
613             this.serviceNames = serviceNames;
614             this.suffix = suffix;
615             this.expectedMsoLastStatus = msoLastStatus;
616             this.jobStatus = jobStatus;
617             this.jobAuditStatusesProvider = jobAuditStatusesProvider;
618         }
619
620         private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames, int suffix, JobStatus jobStatus, Function<String, List<JobAuditStatus>> jobAuditStatusesProvider, int startedHoursAgo) {
621             this(isRelevant, msoLastStatus, msoInfo, serviceNames, suffix, jobStatus,  jobAuditStatusesProvider);
622             this.startedHoursAgo = startedHoursAgo;
623         }
624
625         private OneServiceActor(boolean isRelevant, String msoLastStatus, String msoInfo, Map<PresetMSOServiceInstanceGen2WithNames.Keys, String> serviceNames, int suffix, JobStatus jobStatus, Function<String, List<JobAuditStatus>> jobAuditStatusesProvider, List<BasePreset> morePresets) {
626             this(isRelevant, msoLastStatus, msoInfo, serviceNames, suffix, jobStatus,  jobAuditStatusesProvider);
627             this.morePresets = morePresets;
628         }
629
630         public List<BasePreset> getPresets() {
631             // if not relevant -> return empty list
632             return isRelevant ?
633                     ImmutableList.<BasePreset>builder().add(
634                             new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(serviceNames, suffix, requestId),
635                             new PresetMSOOrchestrationRequestGet(expectedMsoLastStatus, requestId, msoInfo, startedHoursAgo)
636                     ).addAll(morePresets).build()
637                     : ImmutableList.of();
638         }
639
640         private void createInstances() {
641             // call VID with 1 request, keep the job id
642             if (!isRelevant) return;
643             final List<String> jobIds = createBulkOfInstances(false, 1, serviceNames, CREATE_BULK_OF_ALACARTE_REQUEST);
644             assertThat(jobIds, hasSize(1));
645             jobId = jobIds.get(0);
646         }
647
648         private void assertServiceInfo() {
649             if (!isRelevant) return;
650             assertThat(jobId, is(not(nullValue())));
651             assertServiceInfoSpecific1(jobId, jobStatus, serviceNames.get(SERVICE_NAME));
652         }
653
654         private void assertAuditStatuses2() {
655             if (!isRelevant) return;
656             assertThat(jobId, is(not(nullValue())));
657             assertAuditStatuses(jobId, jobAuditStatusesProvider.apply(jobId), msoAuditStatuses(jobId, expectedMsoLastStatus, msoInfo));
658         }
659     }
660
661 }