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, JobStatus.COMPLETED_WITH_ERRORS, "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 //failed to create vnf group, failed to remove 1 member (and then also vnf group isn't deleted)
328 viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_FAILED_STATUS);
330 final List<String> uuids = createBulkOfInstances(false, 1, ImmutableMap.of(), VIEW_EDIT_VNF_GROUPS_REQUEST);
332 assertThat(uuids, hasSize(1));
333 final String jobId = uuids.get(0);
335 assertServiceInfoSpecificUpdate(jobId, JobStatus.COMPLETED_WITH_ERRORS, "SERVICE_INSTANCE_NAME");
336 assertExpectedStatus(JobStatus.COMPLETED_WITH_ERRORS, jobId);
337 Map<String, Long> recordedRequest = SimulatorApi.retrieveRecordedRequestsPathCounter();
338 assertThat(recordedRequest, allOf(
339 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 0L), //delete vnf group
340 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
341 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 3L) //remove vnf group members
344 //retry - vnf group create, 1 member remove, vnf group delete
345 viewEditVnfGroup_registerPresets(parentServiceInstanceId, vnfGroupToDeleteInstanceId, MSO_COMPLETE_STATUS);
346 final List<String> retryUuids = retryJob(jobId);
347 assertThat(retryUuids, hasSize(1));
348 final String retryJobId = retryUuids.get(0);
350 assertServiceInfoSpecificUpdate(retryJobId, JobStatus.COMPLETED, "SERVICE_INSTANCE_NAME");
351 assertExpectedStatus(JobStatus.COMPLETED, retryJobId);
352 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
353 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId, 1L), //delete vnf group
354 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups", 1L), //create vnf group
355 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./instanceGroups/" + vnfGroupToDeleteInstanceId + "/removeMembers", 1L) //remove vnf group members
359 private void viewEditVnfGroup_registerPresets(String parentServiceInstanceId, String vnfGroupToDeleteInstanceId, String msoStatus) {
360 String vnfGroupToDeleteRequestId = UUID.randomUUID().toString();
361 String vnfGroupToCreateRequestId = UUID.randomUUID().toString();
362 List<String> vnfGroupMemberRemoveRequestsIds = ImmutableList.of(UUID.randomUUID().toString(), UUID.randomUUID().toString(), UUID.randomUUID().toString());
364 List<PresetMSOBaseDelete> deletePresets = ImmutableList.of(
365 new PresetMSODeleteInstanceGroup(vnfGroupToDeleteRequestId, vnfGroupToDeleteInstanceId, getUserCredentials().getUserId()));
366 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
367 new PresetMSOCreateVnfGroup("VNF_GROUP3_INSTANCE_NAME", vnfGroupToCreateRequestId,
368 PresetMSOCreateVnfGroup.MODEL_INFO_0, parentServiceInstanceId, false),
369 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF1_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(0), InstanceGroupMemberAction.Remove),
370 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF2_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(1), InstanceGroupMemberAction.Remove),
371 new PresetMSOAddOrRemoveOneInstanceGroupMember(vnfGroupToDeleteInstanceId, "RELATED_VNF3_INSTANCE_ID", getUserCredentials().getUserId(), vnfGroupMemberRemoveRequestsIds.get(2), InstanceGroupMemberAction.Remove));
372 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
373 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupToDeleteRequestId), // delete instance group
374 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupToCreateRequestId, "Instance group was created successfully."), // create instance group
375 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(0)), // remove instance group member
376 new PresetMSOOrchestrationRequestGet(msoStatus, vnfGroupMemberRemoveRequestsIds.get(1)), // remove instance group member
377 new PresetMSOOrchestrationRequestGet(MSO_COMPLETE_STATUS, vnfGroupMemberRemoveRequestsIds.get(2))); // remove instance group member
379 List<BasePreset> presets = getPresets(deletePresets, createPresets, inProgressPresets);
380 registerExpectationFromPresets(presets, RegistrationStrategy.CLEAR_THEN_SET);
383 private void assertExpectedStatus(JobStatus expectedStatus, String jobId) {
384 switch (expectedStatus) {
386 assertAuditStatuses(jobId, vidAuditStatusesCompleted(jobId), null);
390 assertAuditStatuses(jobId, vidAuditStatusesFailed(jobId), null);
396 public void deploy1Service1FailedVnf__verifyStatus_andRetry() {
397 //CreateServiceWithFailedVnf is common for API test and UI test,
398 //so if you change it, make sure both test are compatible with your changes
399 CreateServiceWithFailedVnf createServiceWithFailedVnf = new CreateServiceWithFailedVnf(this);
400 createServiceWithFailedVnf.deployService1FailedVnf();
401 createServiceWithFailedVnf.secondRegistration();
402 createServiceWithFailedVnf.retryJob();
403 createServiceWithFailedVnf.retryAssertion();
404 createServiceWithFailedVnf.simulatorCallsAssertion();
408 Object[][] data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls() {
409 return Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? new Object[][]{
410 {"none", emptyMap(), emptyMap(), true},
411 {"none", emptyMap(), emptyMap(), false},
412 {"instance", ImmutableMap.of("vnfs", 0L, "networks", 0L, "vfModules", 0L, "volumeGroups", 0L),
413 ImmutableMap.of("serviceInstances", 1L, "vnfs", 1L, "networks", 1L, "vfModules", 3L, "volumeGroups", 1L),true},
414 {"network", emptyMap(),
415 ImmutableMap.of("networks", 1L), true},
416 {"vnf0", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L),
417 ImmutableMap.of("vnfs", 1L, "vfModules", 3L, "volumeGroups", 1L), true},
418 {"vfModule0", ImmutableMap.of("vfModules", 1L, "volumeGroups", 0L),
419 ImmutableMap.of("vfModules", 3L, "volumeGroups", 1L), true},
420 {"volumeGroup", ImmutableMap.of("vfModules", 2L),
421 ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
422 {"vfModule1", emptyMap(),
423 ImmutableMap.of("vfModules", 1L, "volumeGroups", 1L), true},
424 {"vfModule2", emptyMap(),
425 ImmutableMap.of("vfModules", 1L), true}
427 {"none", ImmutableMap.of("vfModules", 0L, "volumeGroups", 0L), emptyMap(), true}
431 @Test(dataProvider = "data_deploy1ServiceFromCypress__verifyStatusAndMsoCalls")
432 public void deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry(String whatToFail, Map<String, Long> pathCounterOverride, Map<String, Long> retryPathCounterOverride, boolean withTestApi) {
433 final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap.of(SERVICE_NAME, "serviceInstanceName");
434 String vnfRequestId = UUID.randomUUID().toString();
435 registerPresetsForRetryTest(whatToFail, names, vnfRequestId, withTestApi);
437 final List<String> uuids = createBulkOfInstances(false, 1, names, withTestApi? CREATE_BULK_OF_ALACARTE_REQUEST_CYPRESS: CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
439 assertThat(uuids, hasSize(1));
440 final String jobId = uuids.get(0);
442 JobStatus finalJobStatus;
443 switch (whatToFail) {
444 case "none": finalJobStatus = JobStatus.COMPLETED; break;
445 case "instance": finalJobStatus = JobStatus.FAILED; break;
446 default: finalJobStatus = JobStatus.COMPLETED_WITH_ERRORS; break;
448 assertServiceInfoSpecific2(jobId, finalJobStatus, names.get(SERVICE_NAME));
449 assertRecordedRequests(pathCounterOverride, 1L, vnfRequestId);
451 if (!"none".equals(whatToFail)) {
452 registerPresetsForRetryTest("none", names, vnfRequestId, withTestApi);
454 List<String> retryUuids = retryJob(jobId);
455 assertThat(retryUuids, hasSize(1));
456 final String retryJobId = retryUuids.get(0);
458 ServiceAction serviceAction = "instance".equals(whatToFail) ? ServiceAction.INSTANTIATE : ServiceAction.UPDATE;
459 assertServiceInfoSpecific2(retryJobId, JobStatus.COMPLETED, names.get(SERVICE_NAME), serviceAction);
461 assertRecordedRequests(retryPathCounterOverride, 0L, vnfRequestId);
467 public void deployServiceAfterDragAndDropVFModule__verifyOrderMsoCalls() {
468 final ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names = ImmutableMap
469 .of(SERVICE_NAME, "serviceInstanceName");
470 String vnfRequestId = UUID.randomUUID().toString();
471 registerPresetsForRetryTest("none", names, vnfRequestId, false);
473 final List<String> uuids = createBulkOfInstances(false, 1, names,
474 CREATE_BULK_OF_ALACARTE_NO_TESTAPI_REQUEST_CYPRESS);
476 final String jobId = uuids.get(0);
478 assertServiceInfoSpecific2(jobId, JobStatus.COMPLETED, names.get(SERVICE_NAME));
479 assertMSOcalledWithOrder();
483 public void verifyMetricsLogInAsyncInstantiation() {
485 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}";
487 final String msoURL = "/mso";
489 deploy1ServiceFromCypress__verifyStatusAndMsoCalls_andRetry("none", emptyMap(), emptyMap(), true);
490 List<String> logLines = LoggerFormatTest.getLogLinesAsList(LogName.metrics2019, 200, 1, restTemplate, uri);
491 List<RecordedRequests> underTestRequests = retrieveRecordedRequests();
493 underTestRequests.forEach(request-> {
494 assertThat("X-ONAP-RequestID", request.headers.get("X-ONAP-RequestID"), contains(matchesPattern(UUID_REGEX)));
495 assertThat("X-ECOMP-RequestID", request.headers.get("X-ECOMP-RequestID"), contains(matchesPattern(UUID_REGEX)));
496 assertThat("X-ECOMP-RequestID", request.headers.get("X-InvocationID"), contains(matchesPattern(UUID_REGEX)));
497 assertThat("X-ONAP-PartnerName", request.headers.get("X-ONAP-PartnerName"), contains("VID.VID"));
500 List<String> allInvocationIds = new LinkedList<>();
501 List<String> allMsoRequestsIds = new LinkedList<>();
503 underTestRequests.forEach(request->{
504 String invocationId = request.headers.get("X-InvocationID").get(0);
505 allInvocationIds.add(invocationId);
507 String requestId = request.headers.get("X-ONAP-RequestID").get(0);
508 if (request.path.contains(msoURL)) {
509 allMsoRequestsIds.add(requestId);
512 assertThat("request id and invocation id must be found in two rows",
516 containsString("RequestID="+requestId),
517 containsString("InvocationID="+ invocationId),
518 containsString("Invoke")),
520 containsString("RequestID="+requestId),
521 containsString("InvocationID="+ invocationId),
522 containsString("InvokeReturn"))
526 //make sure no InvocationId is repeated twice
527 assertThat("expect all InvocationIds to be unique",
528 allInvocationIds, containsInAnyOrder(new HashSet<>(allInvocationIds).toArray()));
530 //make sure no RequestId is repeated twice
531 assertThat("expect all RequestIds to be unique",
532 allMsoRequestsIds, containsInAnyOrder(new HashSet<>(allMsoRequestsIds).toArray()));
536 private void registerPresetsForRetryTest(String whatToFail, ImmutableMap<PresetMSOServiceInstanceGen2WithNames.Keys, String> names, String vnfRequestId, boolean withTestApi ) {
537 String networkRequestId = UUID.randomUUID().toString();
538 String vfModule0RequestId = UUID.randomUUID().toString();
539 String vfModule1RequestId = UUID.randomUUID().toString();
540 String vfModule2RequestId = UUID.randomUUID().toString();
541 String volumeGroupRequestId = UUID.randomUUID().toString();
543 PresetMSOCreateVnfALaCarteCypress2 vnfPreset =
544 new PresetMSOCreateVnfALaCarteCypress2(vnfRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, "2017-488_PASQUALE-vPE", Constants.GR_API, withTestApi);
546 List<PresetMSOBaseCreateInstancePost> createPresets = ImmutableList.of(
547 new PresetMSOCreateServiceInstanceGen2WithNamesAlacarteServiceCypress(names, 0, DEFAULT_REQUEST_ID, Constants.GR_API, withTestApi),
549 new PresetMSOCreateNetworkALaCarteCypress(networkRequestId, DEFAULT_INSTANCE_ID, networkRequestId, "ExtVL", Constants.GR_API, withTestApi)
551 List<PresetMSOOrchestrationRequestGet> inProgressPresets = ImmutableList.of(
552 new PresetMSOOrchestrationRequestGet("instance".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE),
553 new PresetMSOOrchestrationRequestGet("vnf0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vnfRequestId),
554 new PresetMSOOrchestrationRequestGet("vfModule0".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule0RequestId),
555 new PresetMSOOrchestrationRequestGet("vfModule1".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule1RequestId),
556 new PresetMSOOrchestrationRequestGet("vfModule2".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, vfModule2RequestId),
557 new PresetMSOOrchestrationRequestGet("volumeGroup".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, volumeGroupRequestId),
558 new PresetMSOOrchestrationRequestGet("network".equals(whatToFail) ? MSO_FAILED_STATUS : COMPLETE, networkRequestId)
560 List<BasePreset> presetsWithoutVfModule = getPresets(createPresets, inProgressPresets);
562 String vfModule1CloudRegionId = Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getLcpCloudRegionId() : "my region";
564 Map<Keys, String> vfModule0And2LcpCloudRegionIdAndTenantIdNames =
565 PresetMSOCreateVfModuleALaCarteCypress.lcpCloudRegionIdAndTenantIdNames(
566 Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getLcpCloudRegionId() : "hvf6",
567 Features.FLAG_2006_VFMODULE_TAKES_TENANT_AND_REGION_FROM_VNF.isActive() ? vnfPreset.getTenantId() : "624eb554b0d147c19ff8885341760481");
569 ImmutableList<BasePreset> presets = new ImmutableList.Builder<BasePreset>()
570 .addAll(presetsWithoutVfModule)
571 .add(new PresetSDCGetServiceToscaModelGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
572 .add(new PresetSDCGetServiceMetadataGet("2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "e49fbd11-e60c-4a8e-b4bf-30fbe8f4fcc0", "csar-noDynamicFields-ecompNamingFalse-fullModelDetails.zip"))
573 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule0RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module0Names, vfModule0And2LcpCloudRegionIdAndTenantIdNames, Constants.GR_API, withTestApi))
574 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVolumeGroup(volumeGroupRequestId, DEFAULT_INSTANCE_ID, vnfRequestId, vfModule1CloudRegionId, Constants.GR_API, withTestApi))
575 .add(PresetMSOCreateVfModuleWithVolumeGroupALaCarteCypress.forVfModule(vfModule1RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, volumeGroupRequestId, vfModule1CloudRegionId, Constants.GR_API, withTestApi))
576 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_JUST_ANOTHER_REGION_TO_ATT_AIC)
577 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MTN6_TO_ATT_AIC)
578 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_MY_REGION_TO_ATT_AIC)
579 .add(PresetAAIGetCloudOwnersByCloudRegionId.PRESET_LCP_REGION_TEXT_TO_ATT_AIC)
580 .add(new PresetMSOCreateVfModuleALaCarteCypress(vfModule2RequestId, DEFAULT_INSTANCE_ID, vnfRequestId, PresetMSOCreateVfModuleALaCarteCypress.module2Names, vfModule0And2LcpCloudRegionIdAndTenantIdNames, Constants.GR_API, withTestApi))
583 registerExpectationFromPresets(
584 Features.FLAG_ASYNC_ALACARTE_VFMODULE.isActive() ? presets : presetsWithoutVfModule,
585 RegistrationStrategy.CLEAR_THEN_SET);
588 private void assertRecordedRequests(Map<String, Long> pathCounterOverride, Long defaultValue, String vnfRequestId) {
589 Long vfModulesDefaultValue = defaultValue == 1L ? 3L : 0L;
591 //noinspection unchecked
592 assertThat(SimulatorApi.retrieveRecordedRequestsPathCounter(), allOf(
593 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances",
594 pathCounterOverride.getOrDefault("serviceInstances", defaultValue)),
596 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/networks",
597 pathCounterOverride.getOrDefault("networks", defaultValue)),
599 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs",
600 pathCounterOverride.getOrDefault("vnfs", defaultValue)),
602 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/volumeGroups",
603 pathCounterOverride.getOrDefault("volumeGroups", defaultValue)),
605 TestUtils.hasOrLacksOfEntry("/mso/serviceInstantiation/v./serviceInstances/" + DEFAULT_INSTANCE_ID + "/vnfs/" + vnfRequestId + "/vfModules",
606 pathCounterOverride.getOrDefault("vfModules", vfModulesDefaultValue))
611 private void assertMSOcalledWithOrder() {
613 List<RecordedRequests> requests = retrieveRecordedRequests();
615 String path = "/mso/serviceInstantiation/v7/serviceInstances/.*/vnfs/.*/vfModules";
616 List<String> msoVFModulesRequests =
617 requests.stream().filter(x -> x.path.matches(path)).map(x -> x.body).collect(toList());
619 assertThat("request for vfNodule send with position order",
620 msoVFModulesRequests,
622 containsString("2017488PasqualeVpe..PASQUALE_base_vPE_BV..module-0"),
623 containsString("2017488PasqualeVpe..PASQUALE_vPFE_BV..module-2"),
624 containsString("2017488PasqualeVpe..PASQUALE_vRE_BV..module-1")
628 private ImmutableList<JobAuditStatus> vidAuditStatusesCompleted(String jobId) {
629 return ImmutableList.of(
630 vidAuditStatus(jobId, "PENDING", false),
631 vidAuditStatus(jobId, "IN_PROGRESS", false),
632 vidAuditStatus(jobId, "COMPLETED", true)
636 private ImmutableList<JobAuditStatus> msoAuditStatusesCompleted(String jobId ) {
637 return ImmutableList.of(
638 msoAuditStatus(jobId, "REQUESTED", null, UUID.fromString(DEFAULT_REQUEST_ID)),
639 msoAuditStatus(jobId, MSO_COMPLETE_STATUS, "Service Instance was created successfully.", UUID.fromString(DEFAULT_REQUEST_ID))
643 private JobAuditStatus msoAuditStatus(String jobId, String jobStatus, String additionalInfo, UUID requestId) {
644 return new JobAuditStatus(UUID.fromString(jobId), jobStatus, SourceStatus.MSO, requestId, additionalInfo, false);
647 private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName) {
648 assertServiceInfoSpecific2(jobId, jobStatus, serviceInstanceName, ServiceAction.INSTANTIATE);
651 private void assertServiceInfoSpecific2(String jobId, JobStatus jobStatus, String serviceInstanceName, ServiceAction serviceAction) {
652 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_VERY_SLOW, new ServiceInfo(
653 "us16807000", jobStatus, false,
654 "d61e6f2d-12fa-4cc2-91df-7c244011d6fc", "WayneHolland", "WATKINS",
656 "092eb9e8e4b7412e8787dd091bc58e86", null,
658 "TYLER SILVIA", null,
659 null, serviceInstanceName,
660 "2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd", "action-data", "1.0",
661 jobId, null, serviceAction, false)
665 private void assertServiceInfoSpecificDeletion(String jobId, JobStatus jobStatus, String serviceInstanceName, String serviceType) {
666 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
667 "us16807000", jobStatus, false,
673 null, serviceInstanceName,
674 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
675 jobId, null, ServiceAction.DELETE, false)
679 private void assertServiceInfoSpecificUpdate(String jobId, JobStatus jobStatus, String serviceInstanceName) {
680 assertExpectedStatusAndServiceInfo(jobStatus, jobId, PATIENCE_LEVEL.FAIL_SLOW, new ServiceInfo(
681 "us16807000", jobStatus, false,
686 "service-instance-type", null,
687 "service-instance-id", serviceInstanceName,
688 "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "Grouping Service for Test", "1.0",
689 jobId, null, ServiceAction.UPDATE, false)
694 PARALLEL, COMPLETED, NAME_TAKEN, DUPLICATE_NAME, IN_PROGRESS, MSO_FAIL