fix - when retrieve topology we are using threadPool and the MDC values are not updated
[vid.git] / vid-automation / src / test / java / org / onap / vid / api / ServiceTreeApiTest.java
1 package org.onap.vid.api;
2
3 import static net.javacrumbs.jsonunit.JsonMatchers.jsonEquals;
4 import static net.javacrumbs.jsonunit.core.Option.IGNORING_ARRAY_ORDER;
5 import static net.javacrumbs.jsonunit.core.Option.IGNORING_EXTRA_FIELDS;
6 import static org.apache.commons.text.StringEscapeUtils.escapeJson;
7 import static org.hamcrest.CoreMatchers.is;
8 import static org.hamcrest.MatcherAssert.assertThat;
9 import static org.hamcrest.Matchers.containsString;
10 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.ATT_AIC;
11 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.ATT_NC;
12 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.AUK51A;
13 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.hvf6;
14 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudOwnersByCloudRegionId.olson3;
15 import static org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet.defaultPlacement;
16 import static vid.automation.test.services.SimulatorApi.RegistrationStrategy.CLEAR_THEN_SET;
17
18 import com.google.common.collect.ImmutableList;
19 import com.google.common.collect.ImmutableMap;
20 import com.google.common.collect.ImmutableMultimap;
21 import com.google.common.collect.Multimap;
22 import java.util.Map;
23 import java.util.UUID;
24 import org.onap.simulator.presetGenerator.presets.aai.Placement;
25 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetCloudRegionFromVnf;
26 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetServiceInstancesByInvariantId;
27 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetSubscribersGet;
28 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIGetVfModulesByVnf;
29 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIModelsByInvariantIdGet;
30 import org.onap.simulator.presetGenerator.presets.aai.PresetAAIStandardQueryGet;
31 import org.onap.simulator.presetGenerator.presets.ecompportal_att.PresetGetSessionSlotCheckIntervalGet;
32 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceMetadataGet;
33 import org.onap.simulator.presetGenerator.presets.sdc.PresetSDCGetServiceToscaModelGet;
34 import org.onap.vid.more.LoggerFormatTest;
35 import org.springframework.http.HttpStatus;
36 import org.springframework.http.ResponseEntity;
37 import org.testng.ITestResult;
38 import org.testng.annotations.BeforeClass;
39 import org.testng.annotations.Test;
40 import org.testng.util.RetryAnalyzerCount;
41 import vid.automation.test.services.SimulatorApi;
42
43 public class ServiceTreeApiTest extends BaseApiTest {
44
45     private static final String API_URL = "/aai_get_service_instance_topology/{subscriberId}/{serviceType}/{serviceInstanceId}";
46
47     @BeforeClass
48     public void login() {
49         super.login();
50     }
51
52     @Test
53     public void serviceWithNoChildren_requestDoesSomething() {
54         final PresetAAIStandardQueryGet serviceInstance =
55                 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "global-customer-id", "service-instance-type", ImmutableMultimap.of());
56
57         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
58                 serviceInstance,
59                 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("service-instance-model-invariant-id")),
60                 new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
61                 new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip")
62         ), CLEAR_THEN_SET);
63         final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
64
65         assertJsonEquals(response, "" +
66                 "{" +
67                 "  \"instanceName\": \"" + escapeJson(serviceInstance.getInstanceName()) + "\"," +
68                 "  \"action\": \"None\"," +
69                 "  \"instanceId\": \"service-instance-id\"," +
70                 "  \"orchStatus\": \"GARBAGE DATA\"," +
71                 "  \"globalSubscriberId\": \"global-customer-id\"," +
72                 "  \"subscriptionServiceType\": \"service-instance-type\"," +
73                 "  \"owningEntityId\": null," +
74                 "  \"owningEntityName\": null," +
75                 "  \"productFamilyId\": null," +
76                 "  \"lcpCloudRegionId\": null," +
77                 "  \"tenantId\": null," +
78                 "  \"tenantName\": null," +
79                 "  \"aicZoneId\": null," +
80                 "  \"aicZoneName\": null," +
81                 "  \"projectName\": null," +
82                 "  \"rollbackOnFailure\": null," +
83                 "  \"modelInfo\": {" +
84                 "    \"modelInvariantId\": \"service-instance-model-invariant-id\"," +
85                 "    \"modelVersionId\": \"7a6ee536-f052-46fa-aa7e-2fca9d674c44\"," +
86                 "    \"modelName\": \"vf_vEPDG\"," +
87                 "    \"modelType\": \"service\"," +
88                 "    \"modelVersion\": \"2.0\"" +
89                 "  }," +
90                 "  \"vnfs\": {}," +
91                 "  \"networks\": {}," +
92                 "  \"vnfGroups\": {}," +
93                 "  \"validationCounter\": 0," +
94                 "  \"existingVNFCounterMap\": {}," +
95                 "  \"existingNetworksCounterMap\": {}," +
96                 "  \"existingVnfGroupCounterMap\": {}," +
97                 "  \"isALaCarte\": false" +
98                 "}");
99     }
100
101     @Test
102     public void searchGroupMembers_expected4vnfs() {
103         PresetAAIStandardQueryGet instanceGroup1 = PresetAAIStandardQueryGet.ofInstanceGroup("L3-NETWORK", "SUB_INTERFACE", ImmutableMultimap.of());
104         PresetAAIStandardQueryGet instanceGroup2 = PresetAAIStandardQueryGet.ofInstanceGroup("LOAD-GROUP", "SERVICE-ACCESS", ImmutableMultimap.of());
105
106         PresetAAIStandardQueryGet vnfPreset1 =
107                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "7a6ee536-f052-46fa-aa7e-2fca9d674c44",  "",
108                         ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
109
110         PresetAAIStandardQueryGet vnfPreset2 =
111                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "eb5f56bf-5855-4e61-bd00-3e19a953bf02",
112                         "\"in-maint\": true,", ImmutableMultimap.of());
113
114         PresetAAIStandardQueryGet vnfPreset3 =
115                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "",
116                         ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()));
117
118         PresetAAIStandardQueryGet vnfPreset4 =
119                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "b7f2e8fb-ac71-4ea0-a801-06ef1479ea84",
120                         "\"in-maint\": true,", ImmutableMultimap.of());
121
122         PresetAAIStandardQueryGet vnfPreset5 =
123                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "b7f2e8fb-ac71-4ea0-a801-06ef1479ea84",
124                         "\"in-maint\": true,", ImmutableMultimap.of("instance-group", instanceGroup2.getReqPath()));
125
126         Multimap<String, String> serviceInstance1 = ImmutableMultimap.<String, String>builder()
127                 .putAll("generic-vnf", vnfPreset1.getReqPath())
128                 .putAll("generic-vnf", vnfPreset3.getReqPath())
129                 .build();
130
131         Multimap<String, String> serviceInstance2 = ImmutableMultimap.<String, String>builder()
132                 .putAll("generic-vnf", vnfPreset2.getReqPath())
133                 .putAll("generic-vnf", vnfPreset4.getReqPath())
134                 .putAll("generic-vnf", vnfPreset5.getReqPath())
135                 .build();
136
137         PresetAAIGetServiceInstancesByInvariantId serviceInstancesList = new PresetAAIGetServiceInstancesByInvariantId(
138                 "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14",
139                 ImmutableMap.of("service-instance-id1", serviceInstance1,
140                         "service-instance-id2", serviceInstance2));
141
142
143         SimulatorApi.registerExpectationFromPresets(
144                 ImmutableList.of(serviceInstancesList,
145                         vnfPreset1, instanceGroup1,
146                         vnfPreset2,
147                         vnfPreset3,
148                         vnfPreset4,
149                         vnfPreset5, instanceGroup2, //this vnf should be filtered out
150                         new PresetAAIModelsByInvariantIdGet(ImmutableList.of("vnf-instance-model-invariant-id")),
151                         new PresetAAIGetCloudRegionFromVnf(vnfPreset1.getInstanceId()),
152                         new PresetAAIGetCloudRegionFromVnf(vnfPreset2.getInstanceId()),
153                         new PresetAAIGetCloudRegionFromVnf(vnfPreset3.getInstanceId()),
154                         new PresetAAIGetCloudRegionFromVnf(vnfPreset4.getInstanceId()),
155                         new PresetAAIGetSubscribersGet()
156                 ), CLEAR_THEN_SET);
157
158         String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" +
159                 "&groupType={groupType}&groupRole={groupRole}";
160
161         final ResponseEntity<String> responseEntity = restTemplate.getForEntity(buildUri(api_url), String.class, "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14", "LOAD-GROUP", "SERVICE-ACCESS");
162         String response = responseEntity.getBody();
163
164         LOGGER.info(response);
165
166         String expected = TestUtils.convertRequest(objectMapper, "VnfGroup/searchMembersResponse.json");
167         expected = expected
168                 .replace("VNF1_INSTANCE_NAME", vnfPreset1.getInstanceName())
169                 .replace("VNF1_INSTANCE_ID", vnfPreset1.getInstanceId())
170                 .replace("VNF1_INSTANCE_TYPE", vnfPreset1.getInstanceType())
171                 .replace("VNF2_INSTANCE_NAME", vnfPreset2.getInstanceName())
172                 .replace("VNF2_INSTANCE_ID", vnfPreset2.getInstanceId())
173                 .replace("VNF2_INSTANCE_TYPE", vnfPreset2.getInstanceType())
174                 .replace("VNF3_INSTANCE_NAME", vnfPreset3.getInstanceName())
175                 .replace("VNF3_INSTANCE_ID", vnfPreset3.getInstanceId())
176                 .replace("VNF3_INSTANCE_TYPE", vnfPreset3.getInstanceType())
177                 .replace("VNF4_INSTANCE_NAME", vnfPreset4.getInstanceName())
178                 .replace("VNF4_INSTANCE_ID", vnfPreset4.getInstanceId())
179                 .replace("VNF4_INSTANCE_TYPE", vnfPreset4.getInstanceType());
180
181         assertJsonEquals(response, expected);
182         final String requestId = responseEntity.getHeaders().getFirst("X-ECOMP-RequestID-echo");
183         LoggerFormatTest.assertHeadersAndMetricLogs(restTemplate, uri, requestId,  "/network/generic-vnfs/generic-vnf/", 5);
184     }
185
186     @Test
187     public void searchGroupMembers_expectedNoResult() {
188         PresetAAIGetServiceInstancesByInvariantId serviceInstancesList = new PresetAAIGetServiceInstancesByInvariantId(
189                 "global-customer-id", "service-instance-type", "24632e6b-584b-4f45-80d4-fefd75fd9f14",
190                 ImmutableMap.of("service-instance-id1", ImmutableMultimap.of(),
191                         "service-instance-id2", ImmutableMultimap.of()));
192
193
194         SimulatorApi.registerExpectationFromPreset(serviceInstancesList, CLEAR_THEN_SET);
195
196         String api_url = "aai_search_group_members?subscriberId={subscriberId}&serviceType={serviceType}&serviceInvariantId={serviceInvariantId}" +
197                 "&groupType={groupType}&groupRole={groupRole}";
198
199         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");
200
201         assertJsonEquals(response, "[]");
202     }
203
204     @Test
205     public void serviceWithMultiplePlys_responseIsReasonable() {
206
207         PresetAAIStandardQueryGet l3NetworkPreset1 =
208                 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Assigned",
209                         ImmutableMultimap.of());
210
211         PresetAAIStandardQueryGet vlanTag1 = PresetAAIStandardQueryGet.ofVlanTag(44);
212
213         PresetAAIStandardQueryGet l3NetworkPreset2 =
214
215                 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Created",
216                         ImmutableMultimap.of("vlan-tag", vlanTag1.getReqPath()));
217
218         PresetAAIStandardQueryGet l3NetworkPreset3 =
219                 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_BASIC", "Assigned", "nvtprov", "ddc3f20c-08b5-40fd-af72-c6d14636b986","94fdd893-4a36-4d70-b16a-ec29c54c184f",
220                         ImmutableMultimap.of());
221
222         PresetAAIStandardQueryGet l3NetworkPreset4 =
223                 PresetAAIStandardQueryGet.ofL3Network("CONTRAIL30_HIMELGUARD", "Created", "preprov", "ddc3f20c-08b5-40fd-af72-c6d14636b986","94fdd893-4a36-4d70-b16a-ec29c54c184f",
224                         ImmutableMultimap.of());
225
226         PresetAAIStandardQueryGet volumeGroup1 =
227                 PresetAAIStandardQueryGet.ofVolumeGroup("vSON_test", ImmutableMultimap.of());
228
229         PresetAAIStandardQueryGet instanceGroup1 = PresetAAIStandardQueryGet.ofInstanceGroup("L3-NETWORK", "Ruby Figueroa", ImmutableMultimap.of());
230
231         PresetAAIStandardQueryGet collection1 =
232                 PresetAAIStandardQueryGet.ofCollectionResource(
233                         "Assigned",
234                         ImmutableMultimap.of("instance-group", instanceGroup1.getReqPath()),
235                         "081ceb56-eb71-4566-a72d-3e7cbee5cdf1",
236                         "ce8c98bc-4691-44fb-8ff0-7a47487c11c4"
237                 );
238
239         PresetAAIStandardQueryGet vnfPreset1 =
240                 PresetAAIStandardQueryGet.ofVnf(randUuid(),
241                         ImmutableMultimap.of("l3-network", l3NetworkPreset1.getReqPath(), "l3-network", l3NetworkPreset2.getReqPath()),
242                         new Placement(ATT_NC, olson3, "229bcdc6eaeb4ca59d55221141d01f8e"));
243
244         PresetAAIStandardQueryGet vnfPreset2 =
245                 PresetAAIStandardQueryGet.ofVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60","91415b44-753d-494c-926a-456a9172bbb9",
246                         "\"in-maint\": true,", ImmutableMultimap.of("volume-group", volumeGroup1.getReqPath()),
247                         new Placement(ATT_AIC, hvf6, "88a6ca3ee0394ade9403f075db23167e"));
248
249
250         Placement vfModule2Placement
251             = new Placement(ATT_NC, AUK51A, "73bb4c548dc048d78eccecd445ac06fc");
252
253         PresetAAIGetVfModulesByVnf twoVfModulesPreset =
254             new PresetAAIGetVfModulesByVnf(vnfPreset2.getInstanceId(), vfModule2Placement);
255
256         final PresetAAIStandardQueryGet serviceInstance =
257                 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "6e59c5de-f052-46fa-aa7e-2fca9d674c44", "d27e42cf-087e-4d31-88ac-6c4b7585f800", "global-customer-id", "service-instance-type",
258                         ImmutableMultimap.<String, String>builder()
259                                 .putAll("l3-network", l3NetworkPreset3.getReqPath(), l3NetworkPreset4.getReqPath())
260                                 .putAll("collection", collection1.getReqPath())
261                                 .putAll("generic-vnf", vnfPreset1.getReqPath(), vnfPreset2.getReqPath())
262                                 .build()
263                 );
264
265         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
266                 serviceInstance,
267                 l3NetworkPreset3, l3NetworkPreset4, vnfPreset1, vnfPreset2, collection1,
268                 volumeGroup1, l3NetworkPreset1, l3NetworkPreset2, instanceGroup1,
269                 vlanTag1, twoVfModulesPreset,
270                 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("d27e42cf-087e-4d31-88ac-6c4b7585f800")),
271                 new PresetGetSessionSlotCheckIntervalGet(),
272                 new PresetAAIGetSubscribersGet(),
273                 new PresetSDCGetServiceMetadataGet("6e59c5de-f052-46fa-aa7e-2fca9d674c44", "d27e42cf-087e-4d31-88ac-6c4b7585f800", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
274                 new PresetSDCGetServiceToscaModelGet("6e59c5de-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip")
275         ), CLEAR_THEN_SET);
276
277         String expected = TestUtils.convertRequest(objectMapper, "aaiGetInstanceTopology/ServiceTreeWithMultipleChildren_serviceInstance.json");
278         expected = expected
279                 .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
280                 .replace("VNF1_INSTANCE_NAME", vnfPreset1.getInstanceName())
281                 .replace("VNF1_INSTANCE_ID", vnfPreset1.getInstanceId())
282                 .replace("VNF1_INSTANCE_TYPE", vnfPreset1.getInstanceType())
283                 .replace("VNF2_INSTANCE_NAME", vnfPreset2.getInstanceName())
284                 .replace("VNF2_INSTANCE_ID", vnfPreset2.getInstanceId())
285                 .replace("VNF2_INSTANCE_TYPE", vnfPreset2.getInstanceType())
286                 .replace("NETWORK1_INSTANCE_NAME", l3NetworkPreset1.getInstanceName())
287                 .replace("NETWORK1_INSTANCE_ID", l3NetworkPreset1.getInstanceId())
288                 .replace("NETWORK2_INSTANCE_NAME", l3NetworkPreset2.getInstanceName())
289                 .replace("NETWORK2_INSTANCE_ID", l3NetworkPreset2.getInstanceId())
290                 .replace("NETWORK3_INSTANCE_NAME", l3NetworkPreset3.getInstanceName())
291                 .replace("NETWORK3_INSTANCE_ID", l3NetworkPreset3.getInstanceId())
292                 .replace("NETWORK4_INSTANCE_NAME", l3NetworkPreset4.getInstanceName())
293                 .replace("NETWORK4_INSTANCE_ID", l3NetworkPreset4.getInstanceId());
294
295         String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
296
297         assertJsonEquals(response, expected);
298     }
299
300     @Override
301     protected void assertJsonEquals(String actual, String expected) {
302         assertThat(actual, jsonEquals(expected)
303                 .when(IGNORING_ARRAY_ORDER)
304                 .when(IGNORING_EXTRA_FIELDS)
305         );
306     }
307
308     @Test
309     public void serviceWithVnfGotError_exceptionIsThrown() {
310
311         PresetAAIStandardQueryGet vnfPreset =
312                 PresetAAIStandardQueryGet.ofVnf(randUuid(),
313                         ImmutableMultimap.of("l3-network", "/aai/v../I'm a wrong path"),
314                         defaultPlacement());
315
316         final PresetAAIStandardQueryGet serviceInstance =
317                 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "global-customer-id", "service-instance-type",
318                         ImmutableMultimap.<String, String>builder()
319                                 .putAll("generic-vnf", vnfPreset.getReqPath())
320                                 .build()
321                 );
322
323         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
324                 serviceInstance,
325                 vnfPreset,
326                 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("service-instance-model-invariant-id")),
327                 new PresetSDCGetServiceMetadataGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "service-instance-model-invariant-id", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
328                 new PresetSDCGetServiceToscaModelGet("7a6ee536-f052-46fa-aa7e-2fca9d674c44", "csar15782222_instantiationTypeMacroWithNetwork.zip"),
329                 new PresetGetSessionSlotCheckIntervalGet(),
330                 new PresetAAIGetSubscribersGet()
331         ), CLEAR_THEN_SET);
332
333         final ResponseEntity<String> response = restTemplateErrorAgnostic.getForEntity(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
334         assertThat(response.getBody(),containsString("AAI node fetching failed"));
335         assertThat(response.getStatusCode(), is(HttpStatus.INTERNAL_SERVER_ERROR));
336     }
337
338     @Test
339     public void serviceWithTwoVnfGroupsAndRelatedVnfs() {
340         PresetAAIStandardQueryGet relatedVnf1 =
341                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "7a6ee536-f052-46fa-aa7e-2fca9d674c44",
342                         "", ImmutableMultimap.of());
343
344         PresetAAIStandardQueryGet relatedVnf2 =
345                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60",
346                         "", ImmutableMultimap.of());
347
348         PresetAAIStandardQueryGet relatedVnf3 =
349                 PresetAAIStandardQueryGet.ofRelatedVnf(randUuid(), "d6557200-ecf2-4641-8094-5393ae3aae60",
350                         "", ImmutableMultimap.of());
351
352         final PresetAAIStandardQueryGet vnfGroup1 =
353                 PresetAAIStandardQueryGet.ofInstanceGroup("vnfGroup-type", "Teresa Bradley",
354                         ImmutableMultimap.<String, String>builder()
355                                 .putAll("generic-vnf", relatedVnf1.getReqPath(), relatedVnf2.getReqPath(), relatedVnf3.getReqPath())
356                                 .build()
357                 );
358
359         final PresetAAIStandardQueryGet vnfGroup2 =
360                 PresetAAIStandardQueryGet.ofInstanceGroup("vnfGroup-type", "Stanley Mccarthy", ImmutableMultimap.of());
361
362         final PresetAAIStandardQueryGet serviceInstance =
363                 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "7ee41ce4-4827-44b0-a48e-2707a59905d2", "global-customer-id", "service-instance-type",
364                         ImmutableMultimap.<String, String>builder()
365                                 .putAll("instance-group", vnfGroup1.getReqPath(),vnfGroup2.getReqPath())
366                                 .build()
367                 );
368
369         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
370                 serviceInstance,
371                 vnfGroup1,vnfGroup2, relatedVnf1, relatedVnf2, relatedVnf3,
372                 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("7ee41ce4-4827-44b0-a48e-2707a59905d2", "vnf-instance-model-invariant-id")),
373                 new PresetGetSessionSlotCheckIntervalGet(),
374                 new PresetAAIGetSubscribersGet(),
375                 new PresetSDCGetServiceMetadataGet("4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "7ee41ce4-4827-44b0-a48e-2707a59905d2", "service-vnf-grouping-csar.zip"),
376                 new PresetSDCGetServiceToscaModelGet("4117a0b6-e234-467d-b5b9-fe2f68c8b0fc", "service-vnf-grouping-csar.zip")
377         ), CLEAR_THEN_SET);
378
379         String expected = TestUtils.convertRequest(objectMapper, "VnfGroup/serviceWithVnfGroupsChildren_serviceInstance.json");
380         expected = expected
381                 .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
382                 .replace("VNF_GROUP1_INSTANCE_ID", vnfGroup1.getInstanceId())
383                 .replace("VNF_GROUP1_INSTANCE_NAME", vnfGroup1.getInstanceName())
384                 .replace("VNF_GROUP1_INSTANCE_TYPE", vnfGroup1.getInstanceType())
385                 .replace("VNF_GROUP1_INSTANCE_ROLE", vnfGroup1.getInstanceRole())
386
387                 .replace("RELATED_VNF1_INSTANCE_ID", relatedVnf1.getInstanceId())
388                 .replace("RELATED_VNF1_INSTANCE_NAME", relatedVnf1.getInstanceName())
389                 .replace("RELATED_VNF1_INSTANCE_TYPE", relatedVnf1.getInstanceType())
390
391                 .replace("RELATED_VNF2_INSTANCE_ID", relatedVnf2.getInstanceId())
392                 .replace("RELATED_VNF2_INSTANCE_NAME", relatedVnf2.getInstanceName())
393                 .replace("RELATED_VNF2_INSTANCE_TYPE", relatedVnf2.getInstanceType())
394
395                 .replace("RELATED_VNF3_INSTANCE_ID", relatedVnf3.getInstanceId())
396                 .replace("RELATED_VNF3_INSTANCE_NAME", relatedVnf3.getInstanceName())
397                 .replace("RELATED_VNF3_INSTANCE_TYPE", relatedVnf3.getInstanceType())
398
399                 .replace("VNF_GROUP2_INSTANCE_ID", vnfGroup2.getInstanceId())
400                 .replace("VNF_GROUP2_INSTANCE_NAME", vnfGroup2.getInstanceName())
401                 .replace("VNF_GROUP2_INSTANCE_TYPE", vnfGroup2.getInstanceType())
402                 .replace("VNF_GROUP2_INSTANCE_ROLE", vnfGroup2.getInstanceRole());
403
404         final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
405
406         assertJsonEquals(response, expected);
407     }
408
409     public static class RetryServiceWithVrf extends RetryAnalyzerCount {
410         // For an unknown reason serviceWithVrf_resultAsExpected test is failing sometimes.
411         // This single retry might shed more light on the situation: will it work the 2nd
412         // time, or still fail 2 times in strike?
413
414         public RetryServiceWithVrf() {
415             setCount(2);
416         }
417
418         @Override
419         public boolean retryMethod(ITestResult result) {
420             if (result.isSuccess()) {
421                 return false;
422             } else {
423                 LOGGER.error(result.getName() + " failed; retrying (" + this.getClass().getCanonicalName() + ")");
424                 return true;
425             }
426         }
427     }
428
429     @Test(retryAnalyzer = RetryServiceWithVrf.class)
430     public void serviceWithVrf_resultAsExpected() {
431         PresetAAIStandardQueryGet vpnBindingPreset =
432                 PresetAAIStandardQueryGet.ofVpn("Active", ImmutableMultimap.of(), "mock-global-1", "mock-role-x", "VPN1260","USA,EMEA");
433
434         // in order to verify thst only one route target is parsed from the Vpn - binding of the network
435         PresetAAIStandardQueryGet vpnBindingPresetOnlyForTheNetwork =
436                 PresetAAIStandardQueryGet.ofVpn("Active", ImmutableMultimap.of(), "shouldNotBeOnResult", "shouldNotBeOnResult","shouldNotBeOnResult","shouldNotBeOnResult");
437
438         PresetAAIStandardQueryGet l3NetworkPreset =
439                 PresetAAIStandardQueryGet.ofL3Network("SR-IOV-PROVIDER2-2", "Assigned",
440                         ImmutableMultimap.of("vpn-binding", vpnBindingPreset.getReqPath(),
441                                 "vpn-binding", vpnBindingPresetOnlyForTheNetwork.getReqPath()));
442
443         PresetAAIStandardQueryGet vrfPreset =
444                 PresetAAIStandardQueryGet.ofVrf("Create",
445                         ImmutableMultimap.of(
446                                 "l3-network", l3NetworkPreset.getReqPath(),
447                                 "vpn-binding", vpnBindingPreset.getReqPath()));
448
449         final PresetAAIStandardQueryGet serviceInstance =
450                 PresetAAIStandardQueryGet.ofServiceInstance("service-instance-id", "BONDING", "INFRASTRUCTURE-VPN", "f028b2e2-7080-4b13-91b2-94944d4c42d8",
451                         "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb", "global-customer-id", "service-instance-type", "GARBAGE DATA",
452                         ImmutableMultimap.of("configuration", vrfPreset.getReqPath()));
453
454         String expected = TestUtils.convertRequest(objectMapper, "aaiGetInstanceTopology/serviceWithVrfTopology.json");
455         expected = expected
456                 .replace("SERVICE_INSTANCE_NAME", serviceInstance.getInstanceName())
457                 .replace("VRF_INSTANCE_ID", vrfPreset.getInstanceId())
458                 .replace("VRF_INSTANCE_NAME", vrfPreset.getInstanceName())
459                 .replace("VPN_INSTANCE_ID", vpnBindingPreset.getInstanceId())
460                 .replace("VPN_INSTANCE_NAME", vpnBindingPreset.getInstanceName())
461                 .replace("NETWORK_INSTANCE_NAME", l3NetworkPreset.getInstanceName())
462                 .replace("NETWORK_INSTANCE_ROLE", l3NetworkPreset.getInstanceRole())
463                 .replace("NETWORK_INSTANCE_ID", l3NetworkPreset.getInstanceId());
464
465         SimulatorApi.registerExpectationFromPresets(ImmutableList.of(
466                 serviceInstance,
467                 vrfPreset,
468                 vpnBindingPreset,
469                 l3NetworkPreset,
470                 new PresetAAIModelsByInvariantIdGet(ImmutableList.of("network-instance-model-invariant-id", "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb", "b67a289b-1688-496d-86e8-1583c828be0a" )),
471                 new PresetGetSessionSlotCheckIntervalGet(),
472                 new PresetAAIGetSubscribersGet(),
473                 new PresetSDCGetServiceMetadataGet("f028b2e2-7080-4b13-91b2-94944d4c42d8", "dfc2c44c-2429-44ca-ae26-1e6dc1f207fb", "service-Infravpn-csar.zip"),
474                 new PresetSDCGetServiceToscaModelGet("f028b2e2-7080-4b13-91b2-94944d4c42d8", "service-Infravpn-csar.zip")
475         ), CLEAR_THEN_SET);
476
477         final String response = restTemplate.getForObject(buildUri(API_URL), String.class, "global-customer-id", "service-instance-type", "service-instance-id");
478
479         try {
480             assertJsonEquals(response, expected);
481         } catch (AssertionError error) {
482             // Logs what happens on simulator's end when error occures
483             final Map<String, Long> recordedSimulatorPaths = SimulatorApi.retrieveRecordedRequestsPathCounter();
484             System.err.println(recordedSimulatorPaths);
485             LOGGER.error(recordedSimulatorPaths);
486             throw error;
487         }
488     }
489
490     private String randUuid() {
491         return UUID.randomUUID().toString();
492     }
493
494 }