Add flag flag_flash_more_actions_button_in_old_view_edit
[vid.git] / vid-automation / src / test / java / org / onap / vid / api / AsyncInstantiationALaCarteApiTest.java
1 package org.onap.vid.api;
2
3 import com.google.common.collect.ImmutableList;
4 import com.google.common.collect.ImmutableMap;
5 import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
6 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
7 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
8 import org.onap.simulator.presetGenerator.presets.mso.*;
9 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction;
10 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
11 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
12 import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
13 import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
14 import org.onap.vid.model.asyncInstantiation.ServiceInfo;
15 import org.testng.annotations.AfterMethod;
16 import org.testng.annotations.DataProvider;
17 import org.testng.annotations.Test;
18 import vid.automation.test.Constants;
19 import vid.automation.test.infra.FeatureTogglingTest;
20 import vid.automation.test.infra.Features;
21 import vid.automation.test.model.JobStatus;
22 import vid.automation.test.model.ServiceAction;
23 import vid.automation.test.services.AsyncJobsService;
24 import vid.automation.test.services.SimulatorApi;
25 import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
26
27 import java.util.ArrayList;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.UUID;
31
32 import static java.util.Collections.emptyMap;
33 import static org.hamcrest.MatcherAssert.assertThat;
34 import static org.hamcrest.Matchers.allOf;
35 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
36 import static org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset.DEFAULT_INSTANCE_ID;
37 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
38 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
39 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
40 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
41
42 @FeatureTogglingTest({Features.FLAG_ASYNC_ALACARTE_VNF})
43 public class AsyncInstantiationALaCarteApiTest extends AsyncInstantiationBase {
44
45     private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json";
46     private static final String CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte.json";
47     private static final String CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte-no-testapi.json";
48     private static final String DELETE_BULK_OF_ALACARTE_REQUEST = "VnfGroup/ServiceWithVnfGroupsDeleteRequest.json";
49     private static final String VIEW_EDIT_VNF_GROUPS_REQUEST = "VnfGroup/VnfGroupCreate1Delete1None1Request.json";
50     private static final String DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST = "VnfGroup/vnfGroupCreate1VnfGroupAndDelete2VnfGroupsRequest.json";
51     private static final String DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS = "VnfGroup/deleteServiceWith2VnfGroupsRequest_AndThreeGroupMembers.json";
52
53
54     private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
55     private static final String MSO_COMPLETE_STATUS = "COMPLETE";
56     private static final String MSO_FAILED_STATUS = "FAILED";
57
58
59     @DataProvider
60     public static Object[][] scenarios() {
61         return new Object[][]{
62                 {Scenario.PARALLEL},
63                 {Scenario.COMPLETED},
64 //                {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
65 //                {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
66                 {Scenario.IN_PROGRESS},
67                 {Scenario.MSO_FAIL}
68         };
69     }
70
71     @AfterMethod
72     protected void dropAllFromNameCounter() {
73         AsyncJobsService asyncJobsService = new AsyncJobsService();
74         asyncJobsService.dropAllFromNameCounter();
75     }
76
77     @Test
78     public void deploy1Service0VnfWithStrictSimulatorCompare__verifyStatusAndAudit() {
79         /*
80         Legit Preset  ||  deploy 1 Service, no VNF inside
81                 -> JobStatus is Eventually success, audit
82                    is adequate; strict simulator compare
83          */
84
85         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "calazixide85");
86         List<PresetMSOBaseCreateInstancePost> createPresets =   ImmutableList.of(new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, DEFAULT_REQUEST_ID));
87         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(new PresetMSOOrchestrationRequestGet());
88         List<BasePreset> presets = getPresets(createPresets, inProgressPresets);
89
90         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
91         final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST);
92
93         assertThat(uuids, hasSize(1));
94         final String jobId = uuids.get(0);
95
96         assertServiceInfoSpecific1(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
97         assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
98     }
99
100     @Test
101     public void deleteServiceWithTwoVnfGroups_andRetry() {
102         String parentServiceInstanceId = "service-instance-id";
103         String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
104         String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
105         String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
106         String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
107         String parentServiceRequestId = UUID.randomUUID().toString();
108         List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
109
110         //failed to delete vnf group, and then also service is not deleted
111         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
112                 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
113                 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
114                 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
115
116             List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
117                     new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
118                     new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId())
119             );
120
121         List<PresetMSOOrchestrationRequestGet> inProgressPresets = new ArrayList<>();
122         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, firstVnfGroupToDeleteRequestId));
123         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_FAILED_STATUS, secondVnfGroupToDeleteRequestId));
124         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)));
125         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(1)));
126         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2)));
127
128         List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
129         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
130         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS);
131
132         assertThat(uuids, hasSize(1));
133         final String jobId = uuids.get(0);
134         assertServiceInfoSpecificDeletion(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME", "service-instance-type");
135         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
136                 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
137                 TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
138
139                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
140                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
141                 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 3L)
142
143         ));
144
145         //retry to delete vnf-group and then delete service
146         List<BasePreset> retryPresets = ImmutableList.of(
147                 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
148                 new PresetMSODeleteALaCarteService(parentServiceRequestId,parentServiceInstanceId ),
149                 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, secondVnfGroupToDeleteRequestId),
150                 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, parentServiceRequestId));
151         registerExpectationFromPresets(retryPresets, RegistrationStrategy.CLEAR_THEN_SET);
152
153         List<String> retryUuids = retryJob(jobId);
154         assertThat(retryUuids, hasSize(1));
155         final String retryJobId = retryUuids.get(0);
156         assertServiceInfoSpecificDeletion(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME", "service-instance-type");
157
158         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
159                 TestUtils.hasOrLacksOfEntry(retryPresets.get(0).getReqPath(), 1L),
160                 TestUtils.hasOrLacksOfEntry(retryPresets.get(1).getReqPath(), 1L),
161                 TestUtils.hasOrLacksOfEntry(retryPresets.get(2).getReqPath(), 1L),
162                 TestUtils.hasOrLacksOfEntry(retryPresets.get(3).getReqPath(), 1L)
163         ));
164     }
165
166     @DataProvider
167     public static Object[][] msoRequestStatusDataProvider() {
168         return new Object[][]{
169                 {MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
170                 {MSO_FAILED_STATUS, JobStatus.FAILED}
171         };
172     }
173
174     @Test(dataProvider = "msoRequestStatusDataProvider")
175     public void deleteServiceWithStrictSimulatorCompare__verifyStatusAndAudit(String msoStatus, JobStatus expectedStatus) {
176         List<PresetMSOBaseDelete> deletePresets =   ImmutableList.of(new PresetMSODeleteALaCarteService( DEFAULT_REQUEST_ID, SERVICE_INSTANCE_ID));
177         List<PresetMSOOrchestrationRequestGet> inProgressPresets =  ImmutableList.of (new PresetMSOOrchestrationRequestGet(msoStatus),
178         new PresetMSOOrchestrationRequestGet(msoStatus));
179         List<BasePreset> presets = getDeletePresets(deletePresets, inProgressPresets);
180
181         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
182         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST);
183
184         assertThat(uuids, hasSize(1));
185         final String jobId = uuids.get(0);
186
187         assertServiceInfoSpecificDeletion(jobId, expectedStatus, "wowServiceWithVnfGroping", "TYLER SILVIA");
188         switch (expectedStatus) {
189             case COMPLETED:
190                 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
191                 break;
192
193             case FAILED:
194                 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
195                 break;
196         }
197
198         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
199                 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
200                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)
201         ));
202     }
203
204     @Test(dataProvider = "msoRequestStatusDataProvider")
205     public void deleteTwoGroupsAddOneGroup(String msoStatus, JobStatus expectedStatus) {
206         String parentServiceInstanceId = "service-instance-id";
207         String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
208         String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
209         String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
210         String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
211         String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
212
213         List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
214                 new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
215                 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
216
217         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
218                 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
219                         PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false));
220         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
221                 new PresetMSOOrchestrationRequestGet(msoStatus, firstVnfGroupToDeleteRequestId),
222                 new PresetMSOOrchestrationRequestGet(msoStatus, secondVnfGroupToDeleteRequestId),
223                 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully.")
224         );
225         List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
226         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
227         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST);
228
229         assertThat(uuids, hasSize(1));
230         final String jobId = uuids.get(0);
231
232         assertServiceInfoSpecificUpdate(jobId, expectedStatus, "SERVICE_INSTANCE_NAME");
233         assertExpectedStatus(expectedStatus, jobId);
234         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
235                 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
236                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
237                 TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
238                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
239                 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
240                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L)
241         ));
242
243     }
244
245     @Test
246     public void viewEditVnfGroup__verifyStatusAndAudit() {
247         String parentServiceInstanceId = "service-instance-id";
248         String vnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
249
250         //failed to create vnf group, failed to remove 1 member (and then also vnf group isn't deleted)
251         viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_FAILED_STATUS);
252
253         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST);
254
255         assertThat(uuids, hasSize(1));
256         final String jobId = uuids.get(0);
257
258         assertServiceInfoSpecificUpdate(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME");
259         assertExpectedStatus(JobStatus.COMPLETED_WITH_ERRORS, jobId);
260         Map<String, Long> recordedRequest = SimulatorApi.retrieveRecordedRequestsPathCounter();
261         assertThat(recordedRequest, allOf(
262                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 0L), //delete vnf group
263                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
264                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 3L) //remove vnf group members
265         ));
266
267         //retry - vnf group create, 1 member remove, vnf group delete
268         viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_COMPLETE_STATUS);
269         final List<String> retryUuids = retryJob(jobId);
270         assertThat(retryUuids, hasSize(1));
271         final String retryJobId = retryUuids.get(0);
272
273         assertServiceInfoSpecificUpdate(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME");
274         assertExpectedStatus(JobStatus.COMPLETED, retryJobId);
275         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
276                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 1L), //delete vnf group
277                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
278                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 1L) //remove vnf group members
279         ));
280     }
281
282     private void viewEditVnfGroup_registerPresets(String parentServiceInstanceId, String vnfGroupToDeleteInstanceId, String msoStatus) {
283         String vnfGroupToDeleteRequestId = UUID.randomUUID().toString();
284         String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
285         List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
286
287         List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
288                 new PresetMSODeleteInstanceGroup(vnfGroupToDeleteRequestId, vnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
289         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
290                 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
291                         PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false),
292                 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
293                 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
294                 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
295         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
296                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupToDeleteRequestId), // delete instance group
297                 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully."), // create instance group
298                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)), // remove instance group member
299                 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupMemberRemoveRequestsIds.get(1)), // remove instance group member
300                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); // remove instance group member
301
302         List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
303         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
304     }
305
306     private void assertExpectedStatus(JobStatus expectedStatus, String jobId) {
307         switch (expectedStatus) {
308             case COMPLETED:
309                 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null);
310                 break;
311
312             case FAILED:
313                 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
314                 break;
315         }
316     }
317
318     @Test
319     public void deploy1Service1FailedVnf__verifyStatus_andRetry() {
320         //CreateServiceWithFailedVnf is common for API test and UI test,
321         //so if you change it, make sure both test are compatible with your changes
322         CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
323         createServiceWithFailedVnf.deployService1FailedVnf();
324         createServiceWithFailedVnf.secondRegistration();
325         createServiceWithFailedVnf.retryJob();
326         createServiceWithFailedVnf.retryAssertion();
327         createServiceWithFailedVnf.simulatorCallsAssertion();
328     }
329
330     @DataProvider
331     Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() {
332         return Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? new Object[][]{
333                 {"none", emptyMap(), emptyMap(), true},
334                 {"none", emptyMap(), emptyMap(), false},
335                 {"instance",  ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
336                         ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),true},
337                 {"network", emptyMap(),
338                         ImmutableMap.of("networks", 1L), true},
339                 {"vnf0", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
340                         ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L), true},
341                 {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
342                         ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L), true},
343                 {"volumeGroup", ImmutableMap.of("vfModules", 2L),
344                         ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
345                 {"vfModule1", emptyMap(),
346                         ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
347                 {"vfModule2", emptyMap(),
348                         ImmutableMap.of("vfModules", 1L), true}
349         } : new Object[][]{
350                 {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true}
351         };
352     }
353
354     @Test(dataProvider = "data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls")
355     public void deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry(String whatToFail, Map<String, Long> pathCounterOverride, Map<String, Long> retryPathCounterOverride, boolean withTestApi) {
356         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
357         String vnfRequestId = UUID.randomUUID().toString();
358         registerPresetsForRetryTest(whatToFail, names, vnfRequestId, withTestApi);
359
360         final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
361
362         assertThat(uuids, hasSize(1));
363         final String jobId = uuids.get(0);
364
365         JobStatus finalJobStatus;
366         switch (whatToFail) {
367             case "none": finalJobStatus = JobStatus.COMPLETED; break;
368             case "instance": finalJobStatus = JobStatus.FAILED; break;
369             default: finalJobStatus = JobStatus.COMPLETED_WITH_ERRORS; break;
370         }
371         assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME));
372         assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId);
373
374         if (!"none".equals(whatToFail)) {
375             registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi);
376
377             List<String> retryUuids = retryJob(jobId);
378             assertThat(retryUuids, hasSize(1));
379             final String retryJobId = retryUuids.get(0);
380
381             ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE;
382             assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction);
383
384             assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId);
385         }
386     }
387
388     private void registerPresetsForRetryTest(String whatToFail, ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names, String vnfRequestId, boolean withTestApi ) {
389         String networkRequestId = UUID.randomUUID().toString();
390         String vfModule0RequestId = UUID.randomUUID().toString();
391         String vfModule1RequestId = UUID.randomUUID().toString();
392         String vfModule2RequestId = UUID.randomUUID().toString();
393         String volumeGroupRequestId = UUID.randomUUID().toString();
394         List<PresetMSOBaseCreateInstancePost> createPresets =   ImmutableList.of(
395                 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi),
396                 new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API,  withTestApi),
397                 new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID,  networkRequestId, "ExtVL", Constants.GR_API, withTestApi)
398         );
399         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
400                 new PresetMSOOrchestrationRequestGet("instance".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE),
401                 new PresetMSOOrchestrationRequestGet("vnf0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vnfRequestId),
402                 new PresetMSOOrchestrationRequestGet("vfModule0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule0RequestId),
403                 new PresetMSOOrchestrationRequestGet("vfModule1".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule1RequestId),
404                 new PresetMSOOrchestrationRequestGet("vfModule2".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule2RequestId),
405                 new PresetMSOOrchestrationRequestGet("volumeGroup".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, volumeGroupRequestId),
406                 new PresetMSOOrchestrationRequestGet("network".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, networkRequestId)
407         );
408         List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets);
409
410         ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
411                 .addAll(presetsWithoutVfModule)
412                 .add(new PresetSDCGetServiceToscaModelGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
413                 .add(new PresetSDCGetServiceMetadataGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
414                 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule0RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module0Names,  Constants.GR_API, withTestApi))
415                 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVolumeGroup(volumeGroupRequestId, DEFAULT_INSTANCE_ID, vnfRequestId,  Constants.GR_API, withTestApi))
416                 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVfModule(vfModule1RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, volumeGroupRequestId, Constants.GR_API, withTestApi))
417                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_JUST_ANOTHER_REGION_TO_ATT_AIC)
418                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC)
419                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MY_REGION_TO_ATT_AIC)
420                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_LCP_REGION_TEXT_TO_ATT_AIC)
421                 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule2RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module2Names,  Constants.GR_API, withTestApi))
422                 .build();
423
424         registerExpectationFromPresets(
425                 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule,
426                 RegistrationStrategy.CLEAR_THEN_SET);
427     }
428
429     private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) {
430         Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L;
431
432         //noinspection unchecked
433         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
434                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances",
435                         pathCounterOverride.getOrDefault("serviceInstances", defaultValue)),
436
437                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks",
438                         pathCounterOverride.getOrDefault("networks", defaultValue)),
439
440                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs",
441                         pathCounterOverride.getOrDefault("vnfs", defaultValue)),
442
443                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstances/v./" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups",
444                         pathCounterOverride.getOrDefault("volumeGroups", defaultValue)),
445
446                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/vfModules",
447                         pathCounterOverride.getOrDefault("vfModules", vfModulesDefaultValue))
448         ));
449     }
450
451     private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
452         return ImmutableList.of(
453                 vidAuditStatus(jobId, "PENDING", false),
454                 vidAuditStatus(jobId, "IN_PROGRESS", false),
455                 vidAuditStatus(jobId, "COMPLETED", true)
456      );
457     }
458
459     private ImmutableList<JobAuditStatus> msoAuditStatusesCompleted(String jobId ) {
460         return ImmutableList.of(
461                 msoAuditStatus(jobId, "REQUESTED", null, UUID.fromString(DEFAULT_REQUEST_ID)),
462                 msoAuditStatus(jobId, MSO_COMPLETE_STATUS, "Service Instance was created successfully.", UUID.fromString(DEFAULT_REQUEST_ID))
463         );
464     }
465
466     private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
467         return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
468     }
469
470     private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) {
471         assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE);
472     }
473
474     private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName, ServiceAction serviceAction) {
475         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_VERY_SLOW, new ServiceInfo(
476                 "us16807000", jobStatus, false,
477                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
478                 "JAG1", null,
479                 "092eb9e8e4b7412e8787dd091bc58e86", null,
480                 "AAIAIC25", null,
481                 "TYLER SILVIA", null,
482                 null, serviceInstanceName,
483                 "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0",
484                 jobId, null, serviceAction, false)
485         );
486     }
487
488     private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) {
489         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
490                 "us16807000", jobStatus, false,
491                 null, null, null,
492                 null, null,
493                 null, null,
494                 null, null,
495                 serviceType, null,
496                 null, serviceInstanceName,
497                 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
498                 jobId, null, ServiceAction.DELETE, false)
499         );
500     }
501
502     private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) {
503         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
504                 "us16807000", jobStatus, false,
505                 null, null, null,
506                 null, null,
507                 null, null,
508                 null, null,
509                 "service-instance-type", null,
510                 "service-instance-id", serviceInstanceName,
511                 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
512                 jobId, null, ServiceAction.UPDATE, false)
513         );
514     }
515
516     enum Scenario {
517         PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL
518     }
519
520 }