1 package org.onap.vid.api;
3 import static java.util.Collections.emptyMap;
4 import static java.util.stream.Collectors.toList;
5 import static org.hamcrest.CoreMatchers.containsString;
6 import static org.hamcrest.CoreMatchers.hasItems;
7 import static org.hamcrest.MatcherAssert.assertThat;
8 import static org.hamcrest.Matchers.allOf;
9 import static org.hamcrest.Matchers.contains;
10 import static org.hamcrest.Matchers.containsInAnyOrder;
11 import static org.hamcrest.Matchers.matchesPattern;
12 import static org.hamcrest.collection.IsCollectionWithSize.hasSize;
13 import static org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset.DEFAULT_INSTANCE_ID;
14 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost.DEFAULT_REQUEST_ID;
15 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet.COMPLETE;
16 import static org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames.Keys.SERVICE_NAME;
17 import static vid.automation.test.services.SimulatorApi.registerExpectationFromPresets;
18 import static vid.automation.test.services.SimulatorApi.retrieveRecordedRequests;
20 import com.google.common.collect.ImmutableList;
21 import com.google.common.collect.ImmutableMap;
22 import java.util.ArrayList;
23 import java.util.HashSet;
24 import java.util.LinkedList;
25 import java.util.List;
27 import java.util.UUID;
28 import org.onap.simulator.presetGenerator.presets.BasePresets.BaseMSOPreset;
29 import org.onap.simulator.presetGenerator.presets.BasePresets.BasePreset;
30 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId;
31 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember;
32 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOAddOrRemoveOneInstanceGroupMember.InstanceGroupMemberAction;
33 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseCreateInstancePost;
34 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOBaseDelete;
35 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateNetworkALaCarteCypress;
36 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService;
37 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress;
38 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleALaCarteCypress;
39 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress;
40 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfALaCarteCypress2;
41 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOCreateVnfGroup;
42 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteALaCarteService;
43 import org.onap.simulator.presetGenerator.presets.mso.PresetMSODeleteInstanceGroup;
44 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOOrchestrationRequestGet;
45 import org.onap.simulator.presetGenerator.presets.mso.PresetMSOServiceInstanceGen2WithNames;
46 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
47 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
48 import org.onap.vid.model.asyncInstantiation.JobAuditStatus;
49 import org.onap.vid.model.asyncInstantiation.JobAuditStatus.SourceStatus;
50 import org.onap.vid.model.asyncInstantiation.ServiceInfo;
51 import org.onap.vid.more.LoggerFormatTest;
52 import org.onap.vid.more.LoggerFormatTest.LogName;
53 import org.testng.annotations.AfterMethod;
54 import org.testng.annotations.DataProvider;
55 import org.testng.annotations.Test;
56 import vid.automation.test.Constants;
57 import vid.automation.test.infra.FeatureTogglingTest;
58 import vid.automation.test.infra.Features;
59 import vid.automation.test.model.JobStatus;
60 import vid.automation.test.model.ServiceAction;
61 import vid.automation.test.services.AsyncJobsService;
62 import vid.automation.test.services.SimulatorApi;
63 import vid.automation.test.services.SimulatorApi.RecordedRequests;
64 import vid.automation.test.services.SimulatorApi.RegistrationStrategy;
66 @FeatureTogglingTest({Features.FLAG_ASYNC_ALACARTE_VNF})
67 public class AsyncInstantiationALaCarteApiTest extends AsyncInstantiationBase {
69 private static final String CREATE_BULK_OF_ALACARTE_REQUEST = "asyncInstantiation/vidRequestCreateALaCarte.json";
70 private static final String CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte.json";
71 private static final String CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS = "a-la-carte/redux-a-la-carte-no-testapi.json";
72 private static final String DELETE_BULK_OF_ALACARTE_REQUEST = "VnfGroup/ServiceWithVnfGroupsDeleteRequest.json";
73 private static final String VIEW_EDIT_VNF_GROUPS_REQUEST = "VnfGroup/VnfGroupCreate1Delete1None1Request.json";
74 private static final String DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST = "VnfGroup/vnfGroupCreate1VnfGroupAndDelete2VnfGroupsRequest.json";
75 private static final String DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS = "VnfGroup/deleteServiceWith2VnfGroupsRequest_AndThreeGroupMembers.json";
78 private static final String SERVICE_INSTANCE_ID = BaseMSOPreset.DEFAULT_INSTANCE_ID;
79 private static final String MSO_COMPLETE_STATUS = "COMPLETE";
80 private static final String MSO_FAILED_STATUS = "FAILED";
84 public static Object[][] scenarios() {
85 return new Object[][]{
88 // {Scenario.NAME_TAKEN}, Not relevant because the name uniqueness is supported only for bulk in Macro
89 // {Scenario.DUPLICATE_NAME}, Not relevant because name duplication is not handled in A La Carte
90 {Scenario.IN_PROGRESS},
96 protected void dropAllFromNameCounter() {
97 AsyncJobsService asyncJobsService = new AsyncJobsService();
98 asyncJobsService.dropAllFromNameCounter();
102 public void deploy1Service0VnfWithStrictSimulatorCompare__verifyStatusAndAudit() {
104 Legit Preset || deploy 1 Service, no VNF inside
105 -> JobStatus is Eventually success, audit
106 is adequate; strict simulator compare
109 final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "calazixide85");
110 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteService(names, 0, DEFAULT_REQUEST_ID));
111 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(new PresetMSOOrchestrationRequestGet());
112 List<BasePreset> presets = getPresets(createPresets, inProgressPresets);
114 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
115 final List<String> uuids = createBulkOfInstances(false, 1, names, CREATE_BULK_OF_ALACARTE_REQUEST);
117 assertThat(uuids, hasSize(1));
118 final String jobId = uuids.get(0);
120 assertServiceInfoSpecific1(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
121 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
125 public void deleteServiceWithTwoVnfGroups_andRetry() {
126 String parentServiceInstanceId = "service-instance-id";
127 String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
128 String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
129 String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
130 String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
131 String parentServiceRequestId = UUID.randomUUID().toString();
132 List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
134 //failed to delete vnf group, and then also service is not deleted
135 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
136 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
137 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
138 new PresetMSOAddOrRemoveOneInstanceGroupMember(firstVnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
140 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
141 new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
142 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId())
145 List<PresetMSOOrchestrationRequestGet> inProgressPresets = new ArrayList<>();
146 inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, firstVnfGroupToDeleteRequestId));
147 inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_FAILED_STATUS, secondVnfGroupToDeleteRequestId));
148 inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)));
149 inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(1)));
150 inProgressPresets.add(new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2)));
152 List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
153 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
154 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_SERVICE_WITH_TWO_VNF_GROUPS_REQUEST_WITH_GROUPMEMBERS);
156 assertThat(uuids, hasSize(1));
157 final String jobId = uuids.get(0);
158 assertServiceInfoSpecificDeletion(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME", "service-instance-type");
159 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
160 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
161 TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
163 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
164 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
165 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 3L)
169 //retry to delete vnf-group and then delete service
170 List<BasePreset> retryPresets = ImmutableList.of(
171 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
172 new PresetMSODeleteALaCarteService(parentServiceRequestId,parentServiceInstanceId ),
173 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, secondVnfGroupToDeleteRequestId),
174 new PresetMSOOrchestrationRequestGet( MSO_COMPLETE_STATUS, parentServiceRequestId));
175 registerExpectationFromPresets(retryPresets, RegistrationStrategy.CLEAR_THEN_SET);
177 List<String> retryUuids = retryJob(jobId);
178 assertThat(retryUuids, hasSize(1));
179 final String retryJobId = retryUuids.get(0);
180 assertServiceInfoSpecificDeletion(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME", "service-instance-type");
182 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
183 TestUtils.hasOrLacksOfEntry(retryPresets.get(0).getReqPath(), 1L),
184 TestUtils.hasOrLacksOfEntry(retryPresets.get(1).getReqPath(), 1L),
185 TestUtils.hasOrLacksOfEntry(retryPresets.get(2).getReqPath(), 1L),
186 TestUtils.hasOrLacksOfEntry(retryPresets.get(3).getReqPath(), 1L)
191 public static Object[][] msoRequestStatusDataProvider() {
192 return new Object[][]{
193 {MSO_COMPLETE_STATUS, JobStatus.COMPLETED},
194 {MSO_FAILED_STATUS, JobStatus.FAILED}
198 @Test(dataProvider = "msoRequestStatusDataProvider")
199 public void deleteServiceWithStrictSimulatorCompare__verifyStatusAndAudit(String msoStatus, JobStatus expectedStatus) {
200 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(new PresetMSODeleteALaCarteService( DEFAULT_REQUEST_ID, SERVICE_INSTANCE_ID));
201 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of (new PresetMSOOrchestrationRequestGet(msoStatus),
202 new PresetMSOOrchestrationRequestGet(msoStatus));
203 List<BasePreset> presets = getDeletePresets(deletePresets, inProgressPresets);
205 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
206 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_BULK_OF_ALACARTE_REQUEST);
208 assertThat(uuids, hasSize(1));
209 final String jobId = uuids.get(0);
211 assertServiceInfoSpecificDeletion(jobId, expectedStatus, "wowServiceWithVnfGroping", "TYLER SILVIA");
212 switch (expectedStatus) {
214 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), msoAuditStatusesCompleted(jobId));
218 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
222 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
223 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
224 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L)
228 @Test(dataProvider = "msoRequestStatusDataProvider")
229 public void deleteTwoGroupsAddOneGroup(String msoStatus, JobStatus expectedStatus) {
230 String parentServiceInstanceId = "service-instance-id";
231 String firstVnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
232 String secondVnfGroupToDeleteInstanceId = "VNF_GROUP2_INSTANCE_ID";
233 String firstVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
234 String secondVnfGroupToDeleteRequestId = UUID.randomUUID().toString();
235 String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
237 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
238 new PresetMSODeleteInstanceGroup(firstVnfGroupToDeleteRequestId, firstVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()),
239 new PresetMSODeleteInstanceGroup(secondVnfGroupToDeleteRequestId, secondVnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
241 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
242 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
243 PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false));
244 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
245 new PresetMSOOrchestrationRequestGet(msoStatus, firstVnfGroupToDeleteRequestId),
246 new PresetMSOOrchestrationRequestGet(msoStatus, secondVnfGroupToDeleteRequestId),
247 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully.")
249 List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
250 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
251 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), DELETE_TWO_VNF_GROUPS_MEMBER_AND_ADD_ONE_REQUEST);
253 assertThat(uuids, hasSize(1));
254 final String jobId = uuids.get(0);
256 assertServiceInfoSpecificUpdate(jobId, expectedStatus, "SERVICE_INSTANCE_NAME");
257 assertExpectedStatus(expectedStatus, jobId);
258 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
259 TestUtils.hasOrLacksOfEntry(deletePresets.get(0).getReqPath(), 1L),
260 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(0).getReqPath(), 1L),
261 TestUtils.hasOrLacksOfEntry(deletePresets.get(1).getReqPath(), 1L),
262 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(1).getReqPath(), 1L),
263 TestUtils.hasOrLacksOfEntry(createPresets.get(0).getReqPath(), 1L),
264 TestUtils.hasOrLacksOfEntry(inProgressPresets.get(2).getReqPath(), 1L)
270 public void viewEditVnfGroup__verifyStatusAndAudit() {
271 String parentServiceInstanceId = "service-instance-id";
272 String vnfGroupToDeleteInstanceId = "VNF_GROUP1_INSTANCE_ID";
274 //failed to create vnf group, failed to remove 1 member (and then also vnf group isn't deleted)
275 viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_FAILED_STATUS);
277 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST);
279 assertThat(uuids, hasSize(1));
280 final String jobId = uuids.get(0);
282 assertServiceInfoSpecificUpdate(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME");
283 assertExpectedStatus(JobStatus.COMPLETED_WITH_ERRORS, jobId);
284 Map<String, Long> recordedRequest = SimulatorApi.retrieveRecordedRequestsPathCounter();
285 assertThat(recordedRequest, allOf(
286 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 0L), //delete vnf group
287 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
288 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 3L) //remove vnf group members
291 //retry - vnf group create, 1 member remove, vnf group delete
292 viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_COMPLETE_STATUS);
293 final List<String> retryUuids = retryJob(jobId);
294 assertThat(retryUuids, hasSize(1));
295 final String retryJobId = retryUuids.get(0);
297 assertServiceInfoSpecificUpdate(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME");
298 assertExpectedStatus(JobStatus.COMPLETED, retryJobId);
299 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
300 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 1L), //delete vnf group
301 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
302 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 1L) //remove vnf group members
306 private void viewEditVnfGroup_registerPresets(String parentServiceInstanceId, String vnfGroupToDeleteInstanceId, String msoStatus) {
307 String vnfGroupToDeleteRequestId = UUID.randomUUID().toString();
308 String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
309 List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
311 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
312 new PresetMSODeleteInstanceGroup(vnfGroupToDeleteRequestId, vnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
313 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
314 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
315 PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false),
316 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
317 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
318 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
319 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
320 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupToDeleteRequestId), // delete instance group
321 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully."), // create instance group
322 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)), // remove instance group member
323 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupMemberRemoveRequestsIds.get(1)), // remove instance group member
324 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); // remove instance group member
326 List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
327 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
330 private void assertExpectedStatus(JobStatus expectedStatus, String jobId) {
331 switch (expectedStatus) {
333 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null);
337 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
343 public void deploy1Service1FailedVnf__verifyStatus_andRetry() {
344 //CreateServiceWithFailedVnf is common for API test and UI test,
345 //so if you change it, make sure both test are compatible with your changes
346 CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
347 createServiceWithFailedVnf.deployService1FailedVnf();
348 createServiceWithFailedVnf.secondRegistration();
349 createServiceWithFailedVnf.retryJob();
350 createServiceWithFailedVnf.retryAssertion();
351 createServiceWithFailedVnf.simulatorCallsAssertion();
355 Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() {
356 return Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? new Object[][]{
357 {"none", emptyMap(), emptyMap(), true},
358 {"none", emptyMap(), emptyMap(), false},
359 {"instance", ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
360 ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),true},
361 {"network", emptyMap(),
362 ImmutableMap.of("networks", 1L), true},
363 {"vnf0", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
364 ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L), true},
365 {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
366 ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L), true},
367 {"volumeGroup", ImmutableMap.of("vfModules", 2L),
368 ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
369 {"vfModule1", emptyMap(),
370 ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
371 {"vfModule2", emptyMap(),
372 ImmutableMap.of("vfModules", 1L), true}
374 {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true}
378 @Test(dataProvider = "data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls")
379 public void deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry(String whatToFail, Map<String, Long> pathCounterOverride, Map<String, Long> retryPathCounterOverride, boolean withTestApi) {
380 final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
381 String vnfRequestId = UUID.randomUUID().toString();
382 registerPresetsForRetryTest(whatToFail, names, vnfRequestId, withTestApi);
384 final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
386 assertThat(uuids, hasSize(1));
387 final String jobId = uuids.get(0);
389 JobStatus finalJobStatus;
390 switch (whatToFail) {
391 case "none": finalJobStatus = JobStatus.COMPLETED; break;
392 case "instance": finalJobStatus = JobStatus.FAILED; break;
393 default: finalJobStatus = JobStatus.COMPLETED_WITH_ERRORS; break;
395 assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME));
396 assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId);
398 if (!"none".equals(whatToFail)) {
399 registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi);
401 List<String> retryUuids = retryJob(jobId);
402 assertThat(retryUuids, hasSize(1));
403 final String retryJobId = retryUuids.get(0);
405 ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE;
406 assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction);
408 assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId);
414 public void deployServiceAfterDragAndDropVFModule__verifyOrderMsoCalls() {
415 final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap
416 .of(SERVICE_NAME, "serviceInstanceName");
417 String vnfRequestId = UUID.randomUUID().toString();
418 registerPresetsForRetryTest("none", names, vnfRequestId, false);
420 final List<String> uuids = createBulkOfInstances(false, 1, names,
421 CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
423 final String jobId = uuids.get(0);
425 assertServiceInfoSpecific2(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
426 assertMSOcalledWithOrder();
430 public void verifyMetricsLogInAsyncInstantiation() {
432 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}";
434 final String msoURL = "/mso/serviceInstantiation/v";
436 deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry("none", emptyMap(), emptyMap(), true);
437 List<String> logLines = LoggerFormatTest.getLogLinesAsList(LogName.metrics2019, 200, 1, restTemplate, uri);
438 List<RecordedRequests> underTestRequests = retrieveRecordedRequests();
440 underTestRequests.forEach(request-> {
441 assertThat("X-ONAP-RequestID", request.headers.get("X-ONAP-RequestID"), contains(matchesPattern(UUID_REGEX)));
442 assertThat("X-ECOMP-RequestID", request.headers.get("X-ECOMP-RequestID"), contains(matchesPattern(UUID_REGEX)));
443 assertThat("X-ECOMP-RequestID", request.headers.get("X-InvocationID"), contains(matchesPattern(UUID_REGEX)));
444 assertThat("X-ONAP-PartnerName", request.headers.get("X-ONAP-PartnerName"), contains("VID.VID"));
447 List<String> allInvocationIds = new LinkedList<>();
448 List<String> allMsoRequestsIds = new LinkedList<>();
450 underTestRequests.forEach(request->{
451 String invocationId = request.headers.get("X-InvocationID").get(0);
452 allInvocationIds.add(invocationId);
454 String requestId = request.headers.get("X-ONAP-RequestID").get(0);
455 if (request.path.contains(msoURL)) {
456 allMsoRequestsIds.add(requestId);
459 assertThat("request id and invocation id must be found in two rows",
463 containsString("RequestID="+requestId),
464 containsString("InvocationID="+ invocationId),
465 containsString("Invoke")),
467 containsString("RequestID="+requestId),
468 containsString("InvocationID="+ invocationId),
469 containsString("InvokeReturn"))
473 //make sure no InvocationId is repeated twice
474 assertThat("expect all InvocationIds to be unique",
475 allInvocationIds, containsInAnyOrder(new HashSet<>(allInvocationIds).toArray()));
477 //make sure no RequestId is repeated twice
478 assertThat("expect all RequestIds to be unique",
479 allMsoRequestsIds, containsInAnyOrder(new HashSet<>(allMsoRequestsIds).toArray()));
483 private void registerPresetsForRetryTest(String whatToFail, ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names, String vnfRequestId, boolean withTestApi ) {
484 String networkRequestId = UUID.randomUUID().toString();
485 String vfModule0RequestId = UUID.randomUUID().toString();
486 String vfModule1RequestId = UUID.randomUUID().toString();
487 String vfModule2RequestId = UUID.randomUUID().toString();
488 String volumeGroupRequestId = UUID.randomUUID().toString();
489 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
490 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi),
491 new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API, withTestApi),
492 new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID, networkRequestId, "ExtVL", Constants.GR_API, withTestApi)
494 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
495 new PresetMSOOrchestrationRequestGet("instance".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE),
496 new PresetMSOOrchestrationRequestGet("vnf0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vnfRequestId),
497 new PresetMSOOrchestrationRequestGet("vfModule0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule0RequestId),
498 new PresetMSOOrchestrationRequestGet("vfModule1".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule1RequestId),
499 new PresetMSOOrchestrationRequestGet("vfModule2".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule2RequestId),
500 new PresetMSOOrchestrationRequestGet("volumeGroup".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, volumeGroupRequestId),
501 new PresetMSOOrchestrationRequestGet("network".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, networkRequestId)
503 List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets);
505 ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
506 .addAll(presetsWithoutVfModule)
507 .add(new PresetSDCGetServiceToscaModelGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
508 .add(new PresetSDCGetServiceMetadataGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
509 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule0RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module0Names, Constants.GR_API, withTestApi))
510 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVolumeGroup(volumeGroupRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, Constants.GR_API, withTestApi))
511 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVfModule(vfModule1RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, volumeGroupRequestId, Constants.GR_API, withTestApi))
512 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_JUST_ANOTHER_REGION_TO_ATT_AIC)
513 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC)
514 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MY_REGION_TO_ATT_AIC)
515 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_LCP_REGION_TEXT_TO_ATT_AIC)
516 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule2RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module2Names, Constants.GR_API, withTestApi))
519 registerExpectationFromPresets(
520 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule,
521 RegistrationStrategy.CLEAR_THEN_SET);
524 private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) {
525 Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L;
527 //noinspection unchecked
528 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
529 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances",
530 pathCounterOverride.getOrDefault("serviceInstances", defaultValue)),
532 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks",
533 pathCounterOverride.getOrDefault("networks", defaultValue)),
535 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs",
536 pathCounterOverride.getOrDefault("vnfs", defaultValue)),
538 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups",
539 pathCounterOverride.getOrDefault("volumeGroups", defaultValue)),
541 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/vfModules",
542 pathCounterOverride.getOrDefault("vfModules", vfModulesDefaultValue))
547 private void assertMSOcalledWithOrder() {
549 List<RecordedRequests> requests = retrieveRecordedRequests();
551 String path = "/mso/serviceInstantiation/v7/serviceInstances/.*/vnfs/.*/vfModules";
552 List<String> msoVFModulesRequests =
553 requests.stream().filter(x -> x.path.matches(path)).map(x -> x.body).collect(toList());
555 assertThat("request for vfNodule send with position order",
556 msoVFModulesRequests,
558 containsString("2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0"),
559 containsString("2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2"),
560 containsString("2017488PasqualeVpe..PASQUALE_vRE_BV..module-1")
564 private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
565 return ImmutableList.of(
566 vidAuditStatus(jobId, "PENDING", false),
567 vidAuditStatus(jobId, "IN_PROGRESS", false),
568 vidAuditStatus(jobId, "COMPLETED", true)
572 private ImmutableList<JobAuditStatus> msoAuditStatusesCompleted(String jobId ) {
573 return ImmutableList.of(
574 msoAuditStatus(jobId, "REQUESTED", null, UUID.fromString(DEFAULT_REQUEST_ID)),
575 msoAuditStatus(jobId, MSO_COMPLETE_STATUS, "Service Instance was created successfully.", UUID.fromString(DEFAULT_REQUEST_ID))
579 private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
580 return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
583 private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) {
584 assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE);
587 private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName, ServiceAction serviceAction) {
588 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_VERY_SLOW, new ServiceInfo(
589 "us16807000", jobStatus, false,
590 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
592 "092eb9e8e4b7412e8787dd091bc58e86", null,
594 "TYLER SILVIA", null,
595 null, serviceInstanceName,
596 "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0",
597 jobId, null, serviceAction, false)
601 private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) {
602 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
603 "us16807000", jobStatus, false,
609 null, serviceInstanceName,
610 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
611 jobId, null, ServiceAction.DELETE, false)
615 private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) {
616 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
617 "us16807000", jobStatus, false,
622 "service-instance-type", null,
623 "service-instance-id", serviceInstanceName,
624 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
625 jobId, null, ServiceAction.UPDATE, false)
630 PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL