1 package org.onap.vid.api;
3 import com.google.common.collect.ImmutableList;
4 import com.google.common.collect.ImmutableMap;
5 import com.google.common.collect.ImmutableMultimap;
6 import com.google.common.collect.Multimap;
7 import org.onap.simulator.presetGenerator.presets.aai.*;
8 import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
9 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
10 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
11 import org.springframework.http.HttpStatus;
12 import org.springframework.http.ResponseEntity;
13 import org.testng.annotations.BeforeClass;
14 import org.testng.annotations.Test;
15 import vid.automation.test.services.SimulatorApi;
17 import java.util.UUID;
19 import static org.apache.commons.text.StringEscapeUtils.escapeJson;
20 import static org.hamcrest.CoreMatchers.is;
21 import static org.hamcrest.MatcherAssert.assertThat;
22 import static org.hamcrest.Matchers.*;
23 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
25 public class ServiceTreeApiTest extends BaseApiTest {
27 private static final String API_URL = "/aai_get_service_instance_topology/{subscriberId}/{serviceType}/{serviceInstanceId}";
35 public void serviceWithNoChildren_requestDoesSomething() {
36 final PresetAAIStandardQueryGet serviceInstance =
37 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "global-customer-id", "service-instance-type", ImmutableMultimap.of());
39 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
41 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("service-instance-model-invariant-id")),
42 new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
43 new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip")
45 final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
47 assertJsonEquals(response, "" +
49 " \"instanceName\": \"" + escapeJson(serviceInstance.getInstanceName()) + "\"," +
50 " \"action\": \"None\"," +
51 " \"instanceId\": \"service-instance-id\"," +
52 " \"orchStatus\": \"GARBAGE DATA\"," +
53 " \"globalSubscriberId\": \"global-customer-id\"," +
54 " \"subscriptionServiceType\": \"service-instance-type\"," +
55 " \"owningEntityId\": null," +
56 " \"owningEntityName\": null," +
57 " \"productFamilyId\": null," +
58 " \"lcpCloudRegionId\": null," +
59 " \"tenantId\": null," +
60 " \"tenantName\": null," +
61 " \"aicZoneId\": null," +
62 " \"aicZoneName\": null," +
63 " \"projectName\": null," +
64 " \"rollbackOnFailure\": null," +
66 " \"modelInvariantId\": \"service-instance-model-invariant-id\"," +
67 " \"modelVersionId\": \"7a6ee536-f052-46fa-aa7e-2fca9d674c44\"," +
68 " \"modelName\": \"vf_vEPDG\"," +
69 " \"modelType\": \"service\"," +
70 " \"modelVersion\": \"2.0\"" +
73 " \"networks\": {}," +
74 " \"vnfGroups\": {}," +
75 " \"validationCounter\": 0," +
76 " \"existingVNFCounterMap\": {}," +
77 " \"existingNetworksCounterMap\": {}," +
78 " \"existingVnfGroupCounterMap\": {}," +
79 " \"isALaCarte\": false" +
84 public void searchGroupMembers_expected4vnfs() {
85 PresetAAIStandardQueryGet instanceGroup1 = PresetAAIStandardQueryGet.ofInstanceGroup("L3-NETWORK", "SUB_INTERFACE", ImmutableMultimap.of());
86 PresetAAIStandardQueryGet instanceGroup2 = PresetAAIStandardQueryGet.ofInstanceGroup("LOAD-GROUP", "SERVICE-ACCESS", ImmutableMultimap.of());
88 PresetAAIStandardQueryGet vnfPreset1 =
89 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "",
90 ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
92 PresetAAIStandardQueryGet vnfPreset2 =
93 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
94 "\"in-maint\": true,", ImmutableMultimap.of());
96 PresetAAIStandardQueryGet vnfPreset3 =
97 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "",
98 ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
100 PresetAAIStandardQueryGet vnfPreset4 =
101 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "b7f2e8fb-ac71-4ea0-a801-06ef1479ea84",
102 "\"in-maint\": true,", ImmutableMultimap.of());
104 PresetAAIStandardQueryGet vnfPreset5 =
105 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "b7f2e8fb-ac71-4ea0-a801-06ef1479ea84",
106 "\"in-maint\": true,", ImmutableMultimap.of("instance-group", instanceGroup2.getReqPath()));
108 Multimap<String, String> serviceInstance1 = ImmutableMultimap.<String, String>builder()
109 .putAll("generic-vnf", vnfPreset1.getReqPath())
110 .putAll("generic-vnf", vnfPreset3.getReqPath())
113 Multimap<String, String> serviceInstance2 = ImmutableMultimap.<String, String>builder()
114 .putAll("generic-vnf", vnfPreset2.getReqPath())
115 .putAll("generic-vnf", vnfPreset4.getReqPath())
116 .putAll("generic-vnf", vnfPreset5.getReqPath())
119 PresetAAIGetServiceInstancesByInvariantId serviceInstancesList = new PresetAAIGetServiceInstancesByInvariantId(
120 "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14",
121 ImmutableMap.of("service-instance-id1", serviceInstance1,
122 "service-instance-id2", serviceInstance2));
125 SimulatorApi.registerExpectationFromPresets(
126 ImmutableList.of(serviceInstancesList,
127 vnfPreset1, instanceGroup1,
131 vnfPreset5, instanceGroup2, //this vnf should be filtered out
132 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("vnf-instance-model-invariant-id")),
133 new PresetAAIGetCloudRegionFromVnf(vnfPreset1.getInstanceId()),
134 new PresetAAIGetCloudRegionFromVnf(vnfPreset2.getInstanceId()),
135 new PresetAAIGetCloudRegionFromVnf(vnfPreset3.getInstanceId()),
136 new PresetAAIGetCloudRegionFromVnf(vnfPreset4.getInstanceId())
139 String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" +
140 "&groupType={groupType}&groupRole={groupRole}";
142 final String response = restTemplate.getForObject(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS");
144 LOGGER.info(response);
146 String expected = TestUtils.convertRequest(objectMapper, "VnfGroup/searchMembersResponse.json");
148 .replace("VNF1_INSTANCE_NAME", vnfPreset1.getInstanceName())
149 .replace("VNF1_INSTANCE_ID", vnfPreset1.getInstanceId())
150 .replace("VNF1_INSTANCE_TYPE", vnfPreset1.getInstanceType())
151 .replace("VNF2_INSTANCE_NAME", vnfPreset2.getInstanceName())
152 .replace("VNF2_INSTANCE_ID", vnfPreset2.getInstanceId())
153 .replace("VNF2_INSTANCE_TYPE", vnfPreset2.getInstanceType())
154 .replace("VNF3_INSTANCE_NAME", vnfPreset3.getInstanceName())
155 .replace("VNF3_INSTANCE_ID", vnfPreset3.getInstanceId())
156 .replace("VNF3_INSTANCE_TYPE", vnfPreset3.getInstanceType())
157 .replace("VNF4_INSTANCE_NAME", vnfPreset4.getInstanceName())
158 .replace("VNF4_INSTANCE_ID", vnfPreset4.getInstanceId())
159 .replace("VNF4_INSTANCE_TYPE", vnfPreset4.getInstanceType());
161 assertJsonEquals(response, expected);
165 public void searchGroupMembers_expectedNoResult() {
166 PresetAAIGetServiceInstancesByInvariantId serviceInstancesList = new PresetAAIGetServiceInstancesByInvariantId(
167 "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14",
168 ImmutableMap.of("service-instance-id1", ImmutableMultimap.of(),
169 "service-instance-id2", ImmutableMultimap.of()));
172 SimulatorApi.registerExpectationFromPreset(serviceInstancesList, CLEAR_THEN_SET);
174 String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" +
175 "&groupType={groupType}&groupRole={groupRole}";
177 final String response = restTemplate.getForObject(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS");
179 assertJsonEquals(response, "[]");
183 public void serviceWithMultiplePlys_responseIsReasonable() {
185 PresetAAIStandardQueryGet l3NetworkPreset1 =
186 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Assigned",
187 ImmutableMultimap.of());
189 PresetAAIStandardQueryGet vlanTag1 = PresetAAIStandardQueryGet.ofVlanTag(44);
191 PresetAAIStandardQueryGet l3NetworkPreset2 =
193 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Created",
194 ImmutableMultimap.of("vlan-tag", vlanTag1.getReqPath()));
196 PresetAAIStandardQueryGet l3NetworkPreset3 =
197 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Assigned", "nvtprov", "ddc3f20c-08b5-40fd-af72-c6d14636b986","94fdd893-4a36-4d70-b16a-ec29c54c184f",
198 ImmutableMultimap.of());
200 PresetAAIStandardQueryGet l3NetworkPreset4 =
201 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_HIMELGUARD", "Created", "preprov", "ddc3f20c-08b5-40fd-af72-c6d14636b986","94fdd893-4a36-4d70-b16a-ec29c54c184f",
202 ImmutableMultimap.of());
204 PresetAAIStandardQueryGet volumeGroup1 =
205 PresetAAIStandardQueryGet.ofVolumeGroup("vSON_test", ImmutableMultimap.of());
207 PresetAAIStandardQueryGet instanceGroup1 = PresetAAIStandardQueryGet.ofInstanceGroup("L3-NETWORK", "Ruby Figueroa", ImmutableMultimap.of());
209 PresetAAIStandardQueryGet collection1 =
210 PresetAAIStandardQueryGet.ofCollectionResource("Assigned",
211 ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
213 PresetAAIStandardQueryGet vnfPreset1 =
214 PresetAAIStandardQueryGet.ofVnf(randUuid(),
215 ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath(), "l3-network", l3NetworkPreset2.getReqPath()));
217 PresetAAIStandardQueryGet vnfPreset2 =
218 PresetAAIStandardQueryGet.ofVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60","91415b44-753d-494c-926a-456a9172bbb9",
219 "\"in-maint\": true,", ImmutableMultimap.of("volume-group", volumeGroup1.getReqPath()));
221 PresetAAIGetVfModulesByVnf vfModules2 = new PresetAAIGetVfModulesByVnf(vnfPreset2.getInstanceId());
223 final PresetAAIStandardQueryGet serviceInstance =
224 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", "d27e42cf-087e-4d31-88ac-6c4b7585f800", "global-customer-id", "service-instance-type",
225 ImmutableMultimap.<String, String>builder()
226 .putAll("l3-network", l3NetworkPreset3.getReqPath(), l3NetworkPreset4.getReqPath())
227 .putAll("collection", collection1.getReqPath())
228 .putAll("generic-vnf", vnfPreset1.getReqPath(), vnfPreset2.getReqPath())
232 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
234 l3NetworkPreset3, l3NetworkPreset4, vnfPreset1, vnfPreset2, collection1,
235 volumeGroup1, l3NetworkPreset1, l3NetworkPreset2, instanceGroup1,
236 vlanTag1, vfModules2,
237 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("d27e42cf-087e-4d31-88ac-6c4b7585f800")),
238 new PresetGetSessionSlotCheckIntervalGet(),
239 new PresetAAIGetSubscribersGet(),
240 new PresetSDCGetServiceMetadataGet("6e59c5de-f052-46fa-aa7e-2fca9d674c44", "d27e42cf-087e-4d31-88ac-6c4b7585f800", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
241 new PresetSDCGetServiceToscaModelGet("6e59c5de-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip")
244 String expected = TestUtils.convertRequest(objectMapper, "aaiGetInstanceTopology/ServiceTreeWithMultipleChildren_serviceInstance.json");
246 .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
247 .replace("VNF1_INSTANCE_NAME", vnfPreset1.getInstanceName())
248 .replace("VNF1_INSTANCE_ID", vnfPreset1.getInstanceId())
249 .replace("VNF1_INSTANCE_TYPE", vnfPreset1.getInstanceType())
250 .replace("VNF2_INSTANCE_NAME", vnfPreset2.getInstanceName())
251 .replace("VNF2_INSTANCE_ID", vnfPreset2.getInstanceId())
252 .replace("VNF2_INSTANCE_TYPE", vnfPreset2.getInstanceType())
253 .replace("NETWORK1_INSTANCE_NAME", l3NetworkPreset1.getInstanceName())
254 .replace("NETWORK1_INSTANCE_ID", l3NetworkPreset1.getInstanceId())
255 .replace("NETWORK2_INSTANCE_NAME", l3NetworkPreset2.getInstanceName())
256 .replace("NETWORK2_INSTANCE_ID", l3NetworkPreset2.getInstanceId())
257 .replace("NETWORK3_INSTANCE_NAME", l3NetworkPreset3.getInstanceName())
258 .replace("NETWORK3_INSTANCE_ID", l3NetworkPreset3.getInstanceId())
259 .replace("NETWORK4_INSTANCE_NAME", l3NetworkPreset4.getInstanceName())
260 .replace("NETWORK4_INSTANCE_ID", l3NetworkPreset4.getInstanceId());
262 String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
264 assertJsonEquals(response, expected);
268 public void serviceWithVnfGotError_exceptionIsThrown() {
270 PresetAAIStandardQueryGet vnfPreset =
271 PresetAAIStandardQueryGet.ofVnf(randUuid(),
272 ImmutableMultimap.of("l3-network", "/aai/v../I'm a wrong path"));
274 final PresetAAIStandardQueryGet serviceInstance =
275 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "global-customer-id", "service-instance-type",
276 ImmutableMultimap.<String, String>builder()
277 .putAll("generic-vnf", vnfPreset.getReqPath())
281 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
284 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("service-instance-model-invariant-id")),
285 new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
286 new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
287 new PresetGetSessionSlotCheckIntervalGet(),
288 new PresetAAIGetSubscribersGet()
291 final ResponseEntity<String> response = restTemplateErrorAgnostic.getForEntity(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
292 assertThat(response.getBody(),containsString("AAI node fetching failed"));
293 assertThat(response.getStatusCode(), is(HttpStatus.INTERNAL_SERVER_ERROR));
297 public void serviceWithTwoVnfGroupsAndRelatedVnfs() {
298 PresetAAIStandardQueryGet relatedVnf1 =
299 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
300 "", ImmutableMultimap.of());
302 PresetAAIStandardQueryGet relatedVnf2 =
303 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60",
304 "", ImmutableMultimap.of());
306 PresetAAIStandardQueryGet relatedVnf3 =
307 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60",
308 "", ImmutableMultimap.of());
310 final PresetAAIStandardQueryGet vnfGroup1 =
311 PresetAAIStandardQueryGet.ofInstanceGroup("vnfGroup-type", "Teresa Bradley",
312 ImmutableMultimap.<String, String>builder()
313 .putAll("generic-vnf", relatedVnf1.getReqPath(), relatedVnf2.getReqPath(), relatedVnf3.getReqPath())
317 final PresetAAIStandardQueryGet vnfGroup2 =
318 PresetAAIStandardQueryGet.ofInstanceGroup("vnfGroup-type", "Stanley Mccarthy", ImmutableMultimap.of());
320 final PresetAAIStandardQueryGet serviceInstance =
321 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "7ee41ce4-4827-44b0-a48e-2707a59905d2", "global-customer-id", "service-instance-type",
322 ImmutableMultimap.<String, String>builder()
323 .putAll("instance-group", vnfGroup1.getReqPath(),vnfGroup2.getReqPath())
327 SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
329 vnfGroup1,vnfGroup2, relatedVnf1, relatedVnf2, relatedVnf3,
330 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("7ee41ce4-4827-44b0-a48e-2707a59905d2", "vnf-instance-model-invariant-id")),
331 new PresetGetSessionSlotCheckIntervalGet(),
332 new PresetAAIGetSubscribersGet(),
333 new PresetSDCGetServiceMetadataGet("4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "7ee41ce4-4827-44b0-a48e-2707a59905d2", "service-vnf-grouping-csar.zip"),
334 new PresetSDCGetServiceToscaModelGet("4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "service-vnf-grouping-csar.zip")
337 String expected = TestUtils.convertRequest(objectMapper, "VnfGroup/serviceWithVnfGroupsChildren_serviceInstance.json");
339 .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
340 .replace("VNF_GROUP1_INSTANCE_ID", vnfGroup1.getInstanceId())
341 .replace("VNF_GROUP1_INSTANCE_NAME", vnfGroup1.getInstanceName())
342 .replace("VNF_GROUP1_INSTANCE_TYPE", vnfGroup1.getInstanceType())
343 .replace("VNF_GROUP1_INSTANCE_ROLE", vnfGroup1.getInstanceRole())
345 .replace("RELATED_VNF1_INSTANCE_ID", relatedVnf1.getInstanceId())
346 .replace("RELATED_VNF1_INSTANCE_NAME", relatedVnf1.getInstanceName())
347 .replace("RELATED_VNF1_INSTANCE_TYPE", relatedVnf1.getInstanceType())
349 .replace("RELATED_VNF2_INSTANCE_ID", relatedVnf2.getInstanceId())
350 .replace("RELATED_VNF2_INSTANCE_NAME", relatedVnf2.getInstanceName())
351 .replace("RELATED_VNF2_INSTANCE_TYPE", relatedVnf2.getInstanceType())
353 .replace("RELATED_VNF3_INSTANCE_ID", relatedVnf3.getInstanceId())
354 .replace("RELATED_VNF3_INSTANCE_NAME", relatedVnf3.getInstanceName())
355 .replace("RELATED_VNF3_INSTANCE_TYPE", relatedVnf3.getInstanceType())
357 .replace("VNF_GROUP2_INSTANCE_ID", vnfGroup2.getInstanceId())
358 .replace("VNF_GROUP2_INSTANCE_NAME", vnfGroup2.getInstanceName())
359 .replace("VNF_GROUP2_INSTANCE_TYPE", vnfGroup2.getInstanceType())
360 .replace("VNF_GROUP2_INSTANCE_ROLE", vnfGroup2.getInstanceRole());
362 final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
364 assertJsonEquals(response, expected);
367 private String randUuid() {
368 return UUID.randomUUID().toString();