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