1 package org.onap.vid.api;
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;
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;
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;
75 @FeatureTogglingTest({Features.FLAG_ASYNC_ALACARTE_VNF})
76 public class AsyncInstantiationALaCarteApiTest extends AsyncInstantiationBase {
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";
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";
93 public static Object[][] scenarios() {
94 return new Object[][]{
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},
105 protected void dropAllFromNameCounter() {
106 AsyncJobsService asyncJobsService = new AsyncJobsService();
107 asyncJobsService.dropAllFromNameCounter();
111 public void deploy1Service0VnfWithStrictSimulatorCompare__verifyStatusAndAudit() {
113 Legit Preset || deploy 1 Service, no VNF inside
114 -> JobStatus is Eventually success, audit
115 is adequate; strict simulator compare
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);
123 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
124 final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST);
126 assertThat(uuids, hasSize(1));
127 final String jobId = uuids.get(0);
129 assertServiceInfoSpecific1(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
130 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
134 public void deployTwoServicesGetServicesFilterByModelId() {
135 registerExpectationFromPreset(new PresetAAIGetSubscribersGet(), RegistrationStrategy.CLEAR_THEN_SET);
137 List<String> uuids = new LinkedList<>();
140 final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap
141 .of(SERVICE_NAME, "calazixide85");
143 String SERVICE_MODEL_UUID = "e3c34d88-a216-4f1d-a782-9af9f9588705";
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)
152 ResponseEntity<List<ServiceInfo>> response = restTemplate.exchange(
153 getTemplateInfoUrl(SERVICE_MODEL_UUID),
156 new ParameterizedTypeReference<List<ServiceInfo>>() {
160 final List<ServiceInfo> body = response.getBody();
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))));
173 //clear jobs to not disturb next tests
174 uuids.forEach(uuid->new AsyncJobsService().muteAsyncJobById(uuid));
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());
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));
193 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
194 new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
195 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId())
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)));
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);
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),
216 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
217 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
218 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 3L)
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);
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");
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)
244 public static Object[][] msoRequestStatusDataProvider() {
245 return new Object[][]{
246 {MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
247 {MSO_FAILED_STATUS, JobStatus.FAILED}
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);
258 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
259 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST);
261 assertThat(uuids, hasSize(1));
262 final String jobId = uuids.get(0);
264 assertServiceInfoSpecificDeletion(jobId, expectedStatus, "wowServiceWithVnfGroping", "TYLER SILVIA");
265 switch (expectedStatus) {
267 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
271 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
275 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
276 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
277 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)
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();
290 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
291 new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
292 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
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.")
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);
306 assertThat(uuids, hasSize(1));
307 final String jobId = uuids.get(0);
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)
323 public void viewEditVnfGroup__verifyStatusAndAudit() {
324 String parentServiceInstanceId = "service-instance-id";
325 String vnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
327 SimulatorApi.clearExpectations();
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);
332 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST);
336 } catch (InterruptedException e) {
340 assertThat(uuids, hasSize(1));
341 final String jobId = uuids.get(0);
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
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);
360 } catch (InterruptedException e) {
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
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());
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
392 List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
393 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
396 private void assertExpectedStatus(JobStatus expectedStatus, String jobId) {
397 switch (expectedStatus) {
399 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null);
403 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
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();
421 Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() {
422 boolean isAsyncAlacarteVfModuleWithPauseOnFailure = Features.FLAG_2008_PAUSE_VFMODULE_INSTANTIATION_FAILURE.isActive() &&
423 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ;
425 if(isAsyncAlacarteVfModuleWithPauseOnFailure) {
426 return new Object[][] {
427 {"none", ImmutableMap.of("vfModules", 3L), emptyMap() , true},
428 {"none", ImmutableMap.of("vfModules", 3L), emptyMap() , false},
430 ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
431 ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),
434 ImmutableMap.of("vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L, "serviceInstances", 1L),
435 ImmutableMap.of("networks", 1L),
438 ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
439 ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L),
441 {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
442 ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L),
445 // ImmutableMap.of("vnfs", 1L, "networks", 1L, "vfModules", 1L, "volumeGroups", 1L, "serviceInstances", 1L),
446 // ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L),
449 ImmutableMap.of("vfModules", 2L, "volumeGroups", 1L) ,
450 ImmutableMap.of("vfModules", 2L, "volumeGroups", 1L) ,
453 ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L),
454 ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
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",
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}
478 return new Object[][]{
479 {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true}
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);
491 final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
493 assertThat(uuids, hasSize(1));
494 final String jobId = uuids.get(0);
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;
502 assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME));
503 assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId);
505 if (!"none".equals(whatToFail)) {
506 registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi);
508 List<String> retryUuids = retryJob(jobId);
509 assertThat(retryUuids, hasSize(1));
510 final String retryJobId = retryUuids.get(0);
512 ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE;
513 assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction);
515 assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId);
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);
527 final List<String> uuids = createBulkOfInstances(false, 1, names,
528 CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
530 final String jobId = uuids.get(0);
532 assertServiceInfoSpecific2(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
533 assertMSOcalledWithOrder();
537 public void verifyMetricsLogInAsyncInstantiation() {
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}";
541 final String msoURL = "/mso";
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();
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"));
555 List<String> allInvocationIds = new LinkedList<>();
556 List<String> allMsoRequestsIds = new LinkedList<>();
558 underTestRequests.forEach(request->{
559 String invocationId = request.headers.get("X-InvocationID").get(0);
560 allInvocationIds.add(invocationId);
562 String requestId = request.headers.get("X-ONAP-RequestID").get(0);
563 if (request.path.contains(msoURL)) {
564 allMsoRequestsIds.add(requestId);
567 assertThat("request id and invocation id must be found in two rows",
571 containsString("RequestID="+requestId),
572 containsString("InvocationID="+ invocationId),
573 containsString("Invoke")),
575 containsString("RequestID="+requestId),
576 containsString("InvocationID="+ invocationId),
577 containsString("InvokeReturn"))
581 //make sure no InvocationId is repeated twice
582 assertThat("expect all InvocationIds to be unique",
583 allInvocationIds, containsInAnyOrder(new HashSet<>(allInvocationIds).toArray()));
585 //make sure no RequestId is repeated twice
586 assertThat("expect all RequestIds to be unique",
587 allMsoRequestsIds, containsInAnyOrder(new HashSet<>(allMsoRequestsIds).toArray()));
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();
598 PresetMSOCreateVnfALaCarteCypress2 vnfPreset =
599 new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API, withTestApi);
601 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
602 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi),
604 new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID, networkRequestId, "ExtVL", Constants.GR_API, withTestApi)
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)
615 List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets);
617 String vfModule1CloudRegionId = Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getLcpCloudRegionId() : "my region";
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");
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))
638 registerExpectationFromPresets(
639 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule,
640 RegistrationStrategy.CLEAR_THEN_SET);
643 private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) {
644 Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L;
646 //noinspection unchecked
647 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
648 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances",
649 pathCounterOverride.getOrDefault("serviceInstances", defaultValue)),
651 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks",
652 pathCounterOverride.getOrDefault("networks", defaultValue)),
654 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs",
655 pathCounterOverride.getOrDefault("vnfs", defaultValue)),
657 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups",
658 pathCounterOverride.getOrDefault("volumeGroups", defaultValue)),
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))
667 private void assertMSOcalledWithOrder() {
669 List<RecordedRequests> requests = retrieveRecordedRequests();
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());
675 assertThat("request for vfNodule send with position order",
676 msoVFModulesRequests,
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")
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)
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))
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);
703 private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) {
704 assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE);
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",
712 "092eb9e8e4b7412e8787dd091bc58e86", null,
714 "TYLER SILVIA", null,
715 null, serviceInstanceName,
716 "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0",
717 jobId, null, serviceAction, false)
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,
729 null, serviceInstanceName,
730 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
731 jobId, null, ServiceAction.DELETE, false)
735 private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) {
736 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
737 "us16807000", jobStatus, false,
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)
750 PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL