c032d5fed114c7652611f974f8883feaaa476a63
[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 java.util.stream.Collectors.toList;
5 import static java.util.stream.Collectors.toSet;
6 import static org.hamcrest.CoreMatchers.containsString;
7 import static org.hamcrest.CoreMatchers.hasItems;
8 import static org.hamcrest.MatcherAssert.assertThat;
9 import static org.hamcrest.Matchers.allOf;
10 import static org.hamcrest.Matchers.contains;
11 import static org.hamcrest.Matchers.containsInAnyOrder;
12 import static org.hamcrest.Matchers.matchesPattern;
13 import static org.hamcrest.Matchers.not;
14 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
15 import static org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset.DEFAULT_INSTANCE_ID;
16 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
17 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
18 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
19 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPreset;
20 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
21 import static vid.automation.test.services.SimulatorApi.retrieveRecordedRequests;
22
23 import com.google.common.collect.ImmutableList;
24 import com.google.common.collect.ImmutableMap;
25 import java.util.ArrayList;
26 import java.util.HashSet;
27 import java.util.LinkedList;
28 import java.util.List;
29 import java.util.Map;
30 import java.util.UUID;
31 import java.util.stream.Stream;
32 import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
33 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
34 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
35 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
36 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember;
37 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction;
38 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
39 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseDelete;
40 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarteCypress;
41 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService;
42 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress;
43 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteCypress;
44 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteCypress.Keys;
45 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress;
46 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteCypress2;
47 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup;
48 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteALaCarteService;
49 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteInstanceGroup;
50 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
51 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames;
52 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
53 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
54 import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
55 import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
56 import org.onap.vid.model.asyncInstantiation.ServiceInfo;
57 import org.onap.vid.more.LoggerFormatTest;
58 import org.onap.vid.more.LoggerFormatTest.LogName;
59 import org.springframework.core.ParameterizedTypeReference;
60 import org.springframework.http.HttpMethod;
61 import org.springframework.http.ResponseEntity;
62 import org.testng.annotations.AfterMethod;
63 import org.testng.annotations.DataProvider;
64 import org.testng.annotations.Test;
65 import vid.automation.test.Constants;
66 import vid.automation.test.infra.FeatureTogglingTest;
67 import vid.automation.test.infra.Features;
68 import vid.automation.test.model.JobStatus;
69 import vid.automation.test.model.ServiceAction;
70 import vid.automation.test.services.AsyncJobsService;
71 import vid.automation.test.services.SimulatorApi;
72 import vid.automation.test.services.SimulatorApi.RecordedRequests;
73 import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
74
75 @FeatureTogglingTest({Features.FLAG_ASYNC_ALACARTE_VNF})
76 public class AsyncInstantiationALaCarteApiTest extends AsyncInstantiationBase {
77
78     private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json";
79     private static final String CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte.json";
80     private static final String CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte-no-testapi.json";
81     private static final String DELETE_BULK_OF_ALACARTE_REQUEST = "VnfGroup/ServiceWithVnfGroupsDeleteRequest.json";
82     private static final String VIEW_EDIT_VNF_GROUPS_REQUEST = "VnfGroup/VnfGroupCreate1Delete1None1Request.json";
83     private static final String DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST = "VnfGroup/vnfGroupCreate1VnfGroupAndDelete2VnfGroupsRequest.json";
84     private static final String DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS = "VnfGroup/deleteServiceWith2VnfGroupsRequest_AndThreeGroupMembers.json";
85
86
87     private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
88     private static final String MSO_COMPLETE_STATUS = "COMPLETE";
89     private static final String MSO_FAILED_STATUS = "FAILED";
90
91
92     @DataProvider
93     public static Object[][] scenarios() {
94         return new Object[][]{
95                 {Scenario.PARALLEL},
96                 {Scenario.COMPLETED},
97 //                {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
98 //                {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
99                 {Scenario.IN_PROGRESS},
100                 {Scenario.MSO_FAIL}
101         };
102     }
103
104     @AfterMethod
105     protected void dropAllFromNameCounter() {
106         AsyncJobsService asyncJobsService = new AsyncJobsService();
107         asyncJobsService.dropAllFromNameCounter();
108     }
109
110     @Test
111     public void deploy1Service0VnfWithStrictSimulatorCompare__verifyStatusAndAudit() {
112         /*
113         Legit Preset  ||  deploy 1 Service, no VNF inside
114                 -> JobStatus is Eventually success, audit
115                    is adequate; strict simulator compare
116          */
117
118         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "calazixide85");
119         List<PresetMSOBaseCreateInstancePost> createPresets =   ImmutableList.of(new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, DEFAULT_REQUEST_ID));
120         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(new PresetMSOOrchestrationRequestGet());
121         List<BasePreset> presets = getPresets(createPresets, inProgressPresets);
122
123         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
124         final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST);
125
126         assertThat(uuids, hasSize(1));
127         final String jobId = uuids.get(0);
128
129         assertServiceInfoSpecific1(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
130         assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
131     }
132
133     @Test
134     public void deployTwoServicesGetServicesFilterByModelId() {
135         registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), RegistrationStrategy.CLEAR_THEN_SET);
136
137         List<String> uuids = new LinkedList<>();
138         try {
139             //given
140             final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap
141                 .of(SERVICE_NAME, "calazixide85");
142
143             String SERVICE_MODEL_UUID = "e3c34d88-a216-4f1d-a782-9af9f9588705";
144
145             uuids = Stream.of(
146                 createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST).get(0),
147                 createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST).get(0),
148                 createBulkOfInstances(false, 1, names, CREATE_BULK_OF_MACRO_REQUEST).get(0)
149             ).collect(toList());
150
151             //when
152             ResponseEntity<List<ServiceInfo>> response = restTemplate.exchange(
153                 getTemplateInfoUrl(SERVICE_MODEL_UUID),
154                 HttpMethod.GET,
155                 null,
156                 new ParameterizedTypeReference<List<ServiceInfo>>() {
157                 });
158
159             //then
160             final List<ServiceInfo> body = response.getBody();
161
162             //assert that service info list contains only services with desired modelId
163             assertThat(body.stream().map(x -> x.serviceModelId).collect(toSet()),
164                 contains(SERVICE_MODEL_UUID));
165             //assert that service info list contains the 2 first jobs
166             assertThat(body.stream().map(x -> x.jobId).collect(toList()),
167                 hasItems(uuids.get(0), uuids.get(1)));
168             //assert that service info list doesn't contains last jobs
169             assertThat(body.stream().map(x -> x.jobId).collect(toList()),
170                 not(hasItems(uuids.get(2))));
171         }
172         finally {
173             //clear jobs to not disturb next tests
174             uuids.forEach(uuid->new AsyncJobsService().muteAsyncJobById(uuid));
175         }
176     }
177     @Test
178     public void deleteServiceWithTwoVnfGroups_andRetry() {
179         String parentServiceInstanceId = "service-instance-id";
180         String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
181         String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
182         String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
183         String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
184         String parentServiceRequestId = UUID.randomUUID().toString();
185         List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
186
187         //failed to delete vnf group, and then also service is not deleted
188         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
189                 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
190                 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
191                 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
192
193             List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
194                     new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
195                     new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId())
196             );
197
198         List<PresetMSOOrchestrationRequestGet> inProgressPresets = new ArrayList<>();
199         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, firstVnfGroupToDeleteRequestId));
200         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_FAILED_STATUS, secondVnfGroupToDeleteRequestId));
201         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)));
202         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(1)));
203         inProgressPresets.add(new  PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2)));
204
205         List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
206         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
207         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS);
208
209         assertThat(uuids, hasSize(1));
210         final String jobId = uuids.get(0);
211         assertServiceInfoSpecificDeletion(jobId, getErrorStatus(), "SERVICE_INSTANCE_NAME", "service-instance-type");
212         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
213                 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
214                 TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
215
216                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
217                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
218                 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 3L)
219
220         ));
221
222         //retry to delete vnf-group and then delete service
223         List<BasePreset> retryPresets = ImmutableList.of(
224                 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
225                 new PresetMSODeleteALaCarteService(parentServiceRequestId,parentServiceInstanceId ),
226                 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, secondVnfGroupToDeleteRequestId),
227                 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, parentServiceRequestId));
228         registerExpectationFromPresets(retryPresets, RegistrationStrategy.CLEAR_THEN_SET);
229
230         List<String> retryUuids = retryJob(jobId);
231         assertThat(retryUuids, hasSize(1));
232         final String retryJobId = retryUuids.get(0);
233         assertServiceInfoSpecificDeletion(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME", "service-instance-type");
234
235         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
236                 TestUtils.hasOrLacksOfEntry(retryPresets.get(0).getReqPath(), 1L),
237                 TestUtils.hasOrLacksOfEntry(retryPresets.get(1).getReqPath(), 1L),
238                 TestUtils.hasOrLacksOfEntry(retryPresets.get(2).getReqPath(), 1L),
239                 TestUtils.hasOrLacksOfEntry(retryPresets.get(3).getReqPath(), 1L)
240         ));
241     }
242
243     @DataProvider
244     public static Object[][] msoRequestStatusDataProvider() {
245         return new Object[][]{
246                 {MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
247                 {MSO_FAILED_STATUS, JobStatus.FAILED}
248         };
249     }
250
251     @Test(dataProvider = "msoRequestStatusDataProvider")
252     public void deleteServiceWithStrictSimulatorCompare__verifyStatusAndAudit(String msoStatus, JobStatus expectedStatus) {
253         List<PresetMSOBaseDelete> deletePresets =   ImmutableList.of(new PresetMSODeleteALaCarteService( DEFAULT_REQUEST_ID, SERVICE_INSTANCE_ID));
254         List<PresetMSOOrchestrationRequestGet> inProgressPresets =  ImmutableList.of (new PresetMSOOrchestrationRequestGet(msoStatus),
255         new PresetMSOOrchestrationRequestGet(msoStatus));
256         List<BasePreset> presets = getDeletePresets(deletePresets, inProgressPresets);
257
258         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
259         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST);
260
261         assertThat(uuids, hasSize(1));
262         final String jobId = uuids.get(0);
263
264         assertServiceInfoSpecificDeletion(jobId, expectedStatus, "wowServiceWithVnfGroping", "TYLER SILVIA");
265         switch (expectedStatus) {
266             case COMPLETED:
267                 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
268                 break;
269
270             case FAILED:
271                 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
272                 break;
273         }
274
275         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
276                 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
277                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)
278         ));
279     }
280
281     @Test(dataProvider = "msoRequestStatusDataProvider")
282     public void deleteTwoGroupsAddOneGroup(String msoStatus, JobStatus expectedStatus) {
283         String parentServiceInstanceId = "service-instance-id";
284         String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
285         String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
286         String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
287         String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
288         String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
289
290         List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
291                 new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
292                 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
293
294         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
295                 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
296                         PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false));
297         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
298                 new PresetMSOOrchestrationRequestGet(msoStatus, firstVnfGroupToDeleteRequestId),
299                 new PresetMSOOrchestrationRequestGet(msoStatus, secondVnfGroupToDeleteRequestId),
300                 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully.")
301         );
302         List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
303         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
304         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST);
305
306         assertThat(uuids, hasSize(1));
307         final String jobId = uuids.get(0);
308
309         assertServiceInfoSpecificUpdate(jobId, expectedStatus, "SERVICE_INSTANCE_NAME");
310         assertExpectedStatus(expectedStatus, jobId);
311         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
312                 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
313                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
314                 TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
315                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
316                 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
317                 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L)
318         ));
319
320     }
321
322     @Test
323     public void viewEditVnfGroup__verifyStatusAndAudit() {
324         String parentServiceInstanceId = "service-instance-id";
325         String vnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
326
327         SimulatorApi.clearExpectations();
328
329         //failed to create vnf group, failed to remove 1 member (and then also vnf group isn't deleted)
330         viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_FAILED_STATUS);
331
332         final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST);
333
334         try {
335             Thread.sleep(20000);
336         } catch (InterruptedException e) {
337             e.printStackTrace();
338         }
339
340         assertThat(uuids, hasSize(1));
341         final String jobId = uuids.get(0);
342
343         assertServiceInfoSpecificUpdate(jobId, getErrorStatus(), "SERVICE_INSTANCE_NAME");
344         assertExpectedStatus(getErrorStatus(), jobId);
345         Map<String, Long> recordedRequest = SimulatorApi.retrieveRecordedRequestsPathCounter();
346         assertThat(recordedRequest, allOf(
347                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 0L), //delete vnf group
348                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
349                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 3L) //remove vnf group members
350         ));
351         SimulatorApi.clearExpectations();
352         //retry - vnf group create, 1 member remove, vnf group delete
353         viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_COMPLETE_STATUS);
354         final List<String> retryUuids = retryJob(jobId);
355         assertThat(retryUuids, hasSize(1));
356         final String retryJobId = retryUuids.get(0);
357
358         try {
359             Thread.sleep(20000);
360         } catch (InterruptedException e) {
361             e.printStackTrace();
362         }
363         assertServiceInfoSpecificUpdate(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME");
364         assertExpectedStatus(JobStatus.COMPLETED, retryJobId);
365         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
366                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 1L), //delete vnf group
367                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
368                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 1L) //remove vnf group members
369         ));
370     }
371
372     private void viewEditVnfGroup_registerPresets(String parentServiceInstanceId, String vnfGroupToDeleteInstanceId, String msoStatus) {
373         String vnfGroupToDeleteRequestId = UUID.randomUUID().toString();
374         String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
375         List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
376
377         List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
378                 new PresetMSODeleteInstanceGroup(vnfGroupToDeleteRequestId, vnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
379         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
380                 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
381                         PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false),
382                 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
383                 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
384                 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
385         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
386                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupToDeleteRequestId), // delete instance group
387                 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully."), // create instance group
388                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)), // remove instance group member
389                 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupMemberRemoveRequestsIds.get(1)), // remove instance group member
390                 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); // remove instance group member
391
392         List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
393         registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
394     }
395
396     private void assertExpectedStatus(JobStatus expectedStatus, String jobId) {
397         switch (expectedStatus) {
398             case COMPLETED:
399                 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null);
400                 break;
401
402             case FAILED:
403                 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
404                 break;
405         }
406     }
407
408     @Test
409     public void deploy1Service1FailedVnf__verifyStatus_andRetry() {
410         //CreateServiceWithFailedVnf is common for API test and UI test,
411         //so if you change it, make sure both test are compatible with your changes
412         CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
413         createServiceWithFailedVnf.deployService1FailedVnf();
414         createServiceWithFailedVnf.secondRegistration();
415         createServiceWithFailedVnf.retryJob();
416         createServiceWithFailedVnf.retryAssertion();
417         createServiceWithFailedVnf.simulatorCallsAssertion();
418     }
419
420     @DataProvider
421     Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() {
422         boolean isAsyncAlacarteVfModuleWithPauseOnFailure = Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() &&
423                 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ;
424
425         if(isAsyncAlacarteVfModuleWithPauseOnFailure) {
426             return new Object[][] {
427                     {"none", ImmutableMap.of("vfModules", 3L), emptyMap() , true},
428                     {"none", ImmutableMap.of("vfModules", 3L), emptyMap() , false},
429                     {"instance",
430                             ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
431                             ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),
432                             true},
433                     {"network",
434                             ImmutableMap.of("vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L, "serviceInstances", 1L),
435                             ImmutableMap.of("networks", 1L),
436                             true},
437                     {"vnf0",
438                             ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
439                             ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L),
440                             true},
441                     {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
442                             ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L),
443                             true},
444 //                    {"volumeGroup",
445 //                            ImmutableMap.of("vnfs", 1L, "networks", 1L, "vfModules", 1L, "volumeGroups", 1L, "serviceInstances", 1L),
446 //                            ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L),
447 //                            true},
448                     {"vfModule1",
449                             ImmutableMap.of("vfModules", 2L, "volumeGroups", 1L) ,
450                             ImmutableMap.of("vfModules", 2L, "volumeGroups", 1L) ,
451                             true},
452                     {"vfModule2",
453                             ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L),
454                             ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
455                             true }
456             };
457         } else if (Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive()) {
458             return new Object[][]{
459                     {"none", emptyMap(), emptyMap(), true},
460                     {"none", emptyMap(), emptyMap(), false},
461                     {"instance", ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
462                             ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups",
463                                     1L), true},
464                     {"network", emptyMap(),
465                             ImmutableMap.of("networks", 1L), true},
466                     {"vnf0", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
467                             ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L), true},
468                     {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
469                             ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L), true},
470                     {"volumeGroup", ImmutableMap.of("vfModules", 2L),
471                             ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
472                     {"vfModule1", emptyMap(),
473                             ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
474                     {"vfModule2", emptyMap(),
475                             ImmutableMap.of("vfModules", 1L), true}
476             };
477         } else {
478             return new Object[][]{
479                     {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true}
480             };
481         }
482
483     }
484
485     @Test(dataProvider = "data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls")
486     public void deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry(String whatToFail, Map<String, Long> pathCounterOverride, Map<String, Long> retryPathCounterOverride, boolean withTestApi) {
487         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
488         String vnfRequestId = UUID.randomUUID().toString();
489         registerPresetsForRetryTest(whatToFail, names, vnfRequestId, withTestApi);
490
491         final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
492
493         assertThat(uuids, hasSize(1));
494         final String jobId = uuids.get(0);
495
496         JobStatus finalJobStatus;
497         switch (whatToFail) {
498             case "none": finalJobStatus = JobStatus.COMPLETED; break;
499             case "instance": finalJobStatus = JobStatus.FAILED; break;
500             default: finalJobStatus = getErrorStatus(); break;
501         }
502         assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME));
503         assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId);
504
505         if (!"none".equals(whatToFail)) {
506             registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi);
507
508             List<String> retryUuids = retryJob(jobId);
509             assertThat(retryUuids, hasSize(1));
510             final String retryJobId = retryUuids.get(0);
511
512             ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE;
513             assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction);
514
515             assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId);
516         }
517     }
518
519
520     @Test
521     public void deployServiceAfterDragAndDropVFModule__verifyOrderMsoCalls() {
522         final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap
523             .of(SERVICE_NAME, "serviceInstanceName");
524         String vnfRequestId = UUID.randomUUID().toString();
525         registerPresetsForRetryTest("none", names, vnfRequestId, false);
526
527         final List<String> uuids = createBulkOfInstances(false, 1, names,
528             CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
529
530         final String jobId = uuids.get(0);
531
532         assertServiceInfoSpecific2(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
533         assertMSOcalledWithOrder();
534     }
535
536     @Test
537     public void verifyMetricsLogInAsyncInstantiation() {
538
539         final String UUID_REGEX = "[0-9a-fA-F]{8}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{4}\\-[0-9a-fA-F]{12}";
540
541         final String msoURL = "/mso";
542
543         deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry("none",
544                 Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() ? ImmutableMap.of("vfModules", 3L):emptyMap(), emptyMap(), true);
545         List<String> logLines =  LoggerFormatTest.getLogLinesAsList(LogName.metrics2019, 200, 1, restTemplate, uri);
546         List<RecordedRequests> underTestRequests = retrieveRecordedRequests();
547
548         underTestRequests.forEach(request-> {
549             assertThat("X-ONAP-RequestID", request.headers.get("X-ONAP-RequestID"), contains(matchesPattern(UUID_REGEX)));
550             assertThat("X-ECOMP-RequestID", request.headers.get("X-ECOMP-RequestID"), contains(matchesPattern(UUID_REGEX)));
551             assertThat("X-ECOMP-RequestID", request.headers.get("X-InvocationID"), contains(matchesPattern(UUID_REGEX)));
552             assertThat("X-ONAP-PartnerName", request.headers.get("X-ONAP-PartnerName"), contains("VID.VID"));
553         });
554
555         List<String> allInvocationIds = new LinkedList<>();
556         List<String> allMsoRequestsIds = new LinkedList<>();
557
558         underTestRequests.forEach(request->{
559             String invocationId = request.headers.get("X-InvocationID").get(0);
560             allInvocationIds.add(invocationId);
561
562             String requestId = request.headers.get("X-ONAP-RequestID").get(0);
563             if (request.path.contains(msoURL)) {
564                 allMsoRequestsIds.add(requestId);
565             }
566
567             assertThat("request id and invocation id must be found in two rows",
568                 logLines,
569                 hasItems(
570                     allOf(
571                         containsString("RequestID="+requestId),
572                         containsString("InvocationID="+ invocationId),
573                         containsString("Invoke")),
574                     allOf(
575                         containsString("RequestID="+requestId),
576                         containsString("InvocationID="+ invocationId),
577                         containsString("InvokeReturn"))
578                 ));
579         });
580
581         //make sure no InvocationId is repeated twice
582         assertThat("expect all InvocationIds to be unique",
583             allInvocationIds, containsInAnyOrder(new HashSet<>(allInvocationIds).toArray()));
584
585         //make sure no RequestId is repeated twice
586         assertThat("expect all RequestIds to be unique",
587             allMsoRequestsIds, containsInAnyOrder(new HashSet<>(allMsoRequestsIds).toArray()));
588
589     }
590
591     private void registerPresetsForRetryTest(String whatToFail, ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names, String vnfRequestId, boolean withTestApi ) {
592         String networkRequestId = UUID.randomUUID().toString();
593         String vfModule0RequestId = UUID.randomUUID().toString();
594         String vfModule1RequestId = UUID.randomUUID().toString();
595         String vfModule2RequestId = UUID.randomUUID().toString();
596         String volumeGroupRequestId = UUID.randomUUID().toString();
597
598         PresetMSOCreateVnfALaCarteCypress2 vnfPreset =
599             new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API, withTestApi);
600
601         List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
602             new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi),
603             vnfPreset,
604             new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID,  networkRequestId, "ExtVL", Constants.GR_API, withTestApi)
605         );
606         List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
607                 new PresetMSOOrchestrationRequestGet("instance".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE),
608                 new PresetMSOOrchestrationRequestGet("vnf0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vnfRequestId),
609                 new PresetMSOOrchestrationRequestGet("vfModule0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule0RequestId),
610                 new PresetMSOOrchestrationRequestGet("vfModule1".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule1RequestId),
611                 new PresetMSOOrchestrationRequestGet("vfModule2".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule2RequestId),
612                 new PresetMSOOrchestrationRequestGet("volumeGroup".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, volumeGroupRequestId),
613                 new PresetMSOOrchestrationRequestGet("network".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, networkRequestId)
614         );
615         List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets);
616
617         String vfModule1CloudRegionId = Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getLcpCloudRegionId() : "my region";
618
619         Map<Keys, String> vfModule0And2LcpCloudRegionIdAndTenantIdNames =
620             PresetMSOCreateVfModuleALaCarteCypress.lcpCloudRegionIdAndTenantIdNames(
621                 Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getLcpCloudRegionId() : "hvf6",
622                 Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getTenantId() : "624eb554b0d147c19ff8885341760481");
623
624         ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
625                 .addAll(presetsWithoutVfModule)
626                 .add(new PresetSDCGetServiceToscaModelGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
627                 .add(new PresetSDCGetServiceMetadataGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
628                 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule0RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module0Names, vfModule0And2LcpCloudRegionIdAndTenantIdNames, Constants.GR_API, withTestApi))
629                 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVolumeGroup(volumeGroupRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, vfModule1CloudRegionId, Constants.GR_API, withTestApi))
630                 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVfModule(vfModule1RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, volumeGroupRequestId, vfModule1CloudRegionId, Constants.GR_API, withTestApi))
631                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_JUST_ANOTHER_REGION_TO_ATT_AIC)
632                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC)
633                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MY_REGION_TO_ATT_AIC)
634                 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_LCP_REGION_TEXT_TO_ATT_AIC)
635                 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule2RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module2Names, vfModule0And2LcpCloudRegionIdAndTenantIdNames, Constants.GR_API, withTestApi))
636                 .build();
637
638         registerExpectationFromPresets(
639                 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule,
640                 RegistrationStrategy.CLEAR_THEN_SET);
641     }
642
643     private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) {
644         Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L;
645
646         //noinspection unchecked
647         assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
648                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances",
649                         pathCounterOverride.getOrDefault("serviceInstances", defaultValue)),
650
651                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks",
652                         pathCounterOverride.getOrDefault("networks", defaultValue)),
653
654                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs",
655                         pathCounterOverride.getOrDefault("vnfs", defaultValue)),
656
657                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups",
658                         pathCounterOverride.getOrDefault("volumeGroups", defaultValue)),
659
660                 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/vfModules",
661                         pathCounterOverride.getOrDefault("vfModules",
662                                 Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() ? defaultValue : vfModulesDefaultValue))
663         ));
664     }
665
666
667     private void assertMSOcalledWithOrder() {
668
669         List<RecordedRequests> requests = retrieveRecordedRequests();
670
671         String path = "/mso/serviceInstantiation/v7/serviceInstances/.*/vnfs/.*/vfModules";
672         List<String> msoVFModulesRequests =
673             requests.stream().filter(x -> x.path.matches(path)).map(x -> x.body).collect(toList());
674
675         assertThat("request for vfNodule send with position order",
676             msoVFModulesRequests,
677             contains(
678                 containsString("2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0"),
679                 containsString("2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2"),
680                 containsString("2017488PasqualeVpe..PASQUALE_vRE_BV..module-1")
681             ));
682     }
683
684     private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
685         return ImmutableList.of(
686                 vidAuditStatus(jobId, "PENDING", false),
687                 vidAuditStatus(jobId, "IN_PROGRESS", false),
688                 vidAuditStatus(jobId, "COMPLETED", true)
689      );
690     }
691
692     private ImmutableList<JobAuditStatus> msoAuditStatusesCompleted(String jobId ) {
693         return ImmutableList.of(
694                 msoAuditStatus(jobId, "REQUESTED", null, UUID.fromString(DEFAULT_REQUEST_ID)),
695                 msoAuditStatus(jobId, MSO_COMPLETE_STATUS, "Service Instance was created successfully.", UUID.fromString(DEFAULT_REQUEST_ID))
696         );
697     }
698
699     private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
700         return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
701     }
702
703     private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) {
704         assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE);
705     }
706
707     private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName, ServiceAction serviceAction) {
708         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_VERY_SLOW, new ServiceInfo(
709                 "us16807000", jobStatus, false,
710                 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
711                 "JAG1", null,
712                 "092eb9e8e4b7412e8787dd091bc58e86", null,
713                 "AAIAIC25", null,
714                 "TYLER SILVIA", null,
715                 null, serviceInstanceName,
716                 "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0",
717                 jobId, null, serviceAction, false)
718         );
719     }
720
721     private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) {
722         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
723                 "us16807000", jobStatus, false,
724                 null, null, null,
725                 null, null,
726                 null, null,
727                 null, null,
728                 serviceType, null,
729                 null, serviceInstanceName,
730                 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
731                 jobId, null, ServiceAction.DELETE, false)
732         );
733     }
734
735     private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) {
736         assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
737                 "us16807000", jobStatus, false,
738                 null, null, null,
739                 null, null,
740                 null, null,
741                 null, null,
742                 "service-instance-type", null,
743                 "service-instance-id", serviceInstanceName,
744                 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
745                 jobId, null, ServiceAction.UPDATE, false)
746         );
747     }
748
749     enum Scenario {
750         PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL
751     }
752
753 }