2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.aai.sparky.crossentityreference.sync;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
34 import org.hamcrest.Matcher;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.mockito.Matchers;
38 import org.mockito.Mockito;
39 import org.onap.aai.restclient.client.OperationResult;
40 import org.onap.aai.sparky.config.oxm.CrossEntityReferenceLookup;
41 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
42 import org.onap.aai.sparky.config.oxm.CrossEntityReferenceDescriptor;
43 import org.onap.aai.sparky.config.oxm.CrossEntityReference;
44 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
45 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
46 import org.onap.aai.sparky.config.oxm.SearchableEntityLookup;
47 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
48 import org.onap.aai.sparky.search.SearchServiceAdapter;
49 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
50 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
51 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
52 import org.onap.aai.sparky.sync.enumeration.OperationState;
53 import org.onap.aai.sparky.util.StringCollectionContainsMatcher;
54 import org.onap.aai.sparky.util.TestResourceLoader;
56 import com.fasterxml.jackson.databind.ObjectMapper;
58 public class CrossEntityReferenceSynchronizerTest {
60 private static ObjectMapper mapper = new ObjectMapper();
62 private CrossEntityReferenceSynchronizer cerSynchronizer;
64 private ElasticSearchSchemaConfig esSchemaConfig;
65 private NetworkStatisticsConfig aaiStatConfig;
66 private NetworkStatisticsConfig esStatConfig;
67 private OxmEntityLookup oxmEntityLookup;
68 private SearchableEntityLookup searchableEntityLookup;
69 private SearchServiceAdapter searchServiceAdapter;
70 private ActiveInventoryAdapter aaiAdapter;
71 private CrossEntityReferenceLookup cerLookup;
72 private RestEndpointConfig aaiRestEndPointConfig;
75 public void init() throws Exception {
77 esSchemaConfig = new ElasticSearchSchemaConfig();
78 esSchemaConfig.setIndexDocType("default");
79 esSchemaConfig.setIndexMappingsFileName(null);
80 esSchemaConfig.setIndexName("aggregation-index-name");
81 esSchemaConfig.setIndexSettingsFileName(null);
84 aaiStatConfig = new NetworkStatisticsConfig();
86 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
88 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
89 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
90 aaiStatConfig.setBytesHistogramNumBins(20);
91 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
93 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
94 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
95 aaiStatConfig.setQueueLengthHistogramNumBins(20);
96 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
98 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
99 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
100 aaiStatConfig.setTaskAgeHistogramNumBins(20);
101 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
103 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
104 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
105 aaiStatConfig.setResponseTimeHistogramNumBins(20);
106 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
108 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
109 aaiStatConfig.setTpsHistogramMaxYAxis(100);
110 aaiStatConfig.setTpsHistogramNumBins(20);
111 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
113 esStatConfig = new NetworkStatisticsConfig();
115 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
117 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
118 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
119 esStatConfig.setBytesHistogramNumBins(20);
120 esStatConfig.setBytesHistogramNumDecimalPoints(2);
122 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
123 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
124 esStatConfig.setQueueLengthHistogramNumBins(20);
125 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
127 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
128 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
129 esStatConfig.setTaskAgeHistogramNumBins(20);
130 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
132 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
133 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
134 esStatConfig.setResponseTimeHistogramNumBins(20);
135 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
137 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
138 esStatConfig.setTpsHistogramMaxYAxis(100);
139 esStatConfig.setTpsHistogramNumBins(20);
140 esStatConfig.setTpsHistogramNumDecimalPoints(2);
142 oxmEntityLookup = new OxmEntityLookup();
144 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
145 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
148 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
150 processors.add(oxmEntityLookup);
153 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
154 new HashMap<String, OxmEntityDescriptor>();
156 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
157 genericVnfDescriptor.setEntityName("generic-vnf");
158 List<String> pkeyNames = new ArrayList<String>();
159 pkeyNames.add("vnf-name");
161 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
163 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
166 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
168 cerLookup = new CrossEntityReferenceLookup();
169 processors.add(cerLookup);
171 Map<String, CrossEntityReferenceDescriptor> crossReferenceEntityDescriptors =
172 new HashMap<String, CrossEntityReferenceDescriptor>();
174 CrossEntityReferenceDescriptor crossReferenceEntiDescriptor = new CrossEntityReferenceDescriptor();
175 CrossEntityReference crossEntityReference = new CrossEntityReference();
176 crossEntityReference.setTargetEntityType("service-instance");
177 List<String> refEntities = new ArrayList<String>();
178 refEntities.add("service-type");
179 crossEntityReference.setReferenceAttributes(refEntities);
181 List<String> crossEntityPkeyNames = new ArrayList<String>();
182 crossEntityPkeyNames.add("service-type");
183 crossReferenceEntiDescriptor.setPrimaryKeyAttributeNames(crossEntityPkeyNames);
185 crossReferenceEntiDescriptor.setCrossEntityReference(crossEntityReference);
186 crossReferenceEntiDescriptor.setEntityName("service-subscription");
187 crossReferenceEntityDescriptors.put("service-subscription", crossReferenceEntiDescriptor);
188 cerLookup.setCrossReferenceEntityDescriptors(crossReferenceEntityDescriptors);
190 searchableEntityLookup = new SearchableEntityLookup();
191 processors.add(searchableEntityLookup);
193 aaiRestEndPointConfig = new RestEndpointConfig();
194 aaiRestEndPointConfig.setNumRequestRetries(5);
196 Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig);
201 public void validateBasicConstruction() throws Exception {
203 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
204 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
206 cerSynchronizer.setAaiAdapter(aaiAdapter);
207 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
209 assertNotNull(cerSynchronizer.getAaiAdapter());
210 assertNotNull(cerSynchronizer.getSearchServiceAdapter());
214 private Matcher<List<String>> listContainsValue(String expectedValue) {
215 return new StringCollectionContainsMatcher(expectedValue);
219 public void validateSmallSync() throws Exception {
221 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
222 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
224 cerSynchronizer.setAaiAdapter(aaiAdapter);
225 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
227 String nodesQueryResponse = TestResourceLoader
228 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
230 OperationResult entitySelfLinks = new OperationResult();
232 entitySelfLinks.setResultCode(200);
233 entitySelfLinks.setResult(nodesQueryResponse);
235 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
236 .thenReturn(entitySelfLinks);
239 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
240 Mockito.anyString()))
242 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
245 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
246 Mockito.anyString()))
248 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
252 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
254 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
257 .when(aaiAdapter.queryActiveInventoryWithRetries(
258 Matchers.contains("service-subscription-2"), Mockito.anyString(),
259 Mockito.anyInt(),Mockito.anyString()))
260 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
261 "/sync/aai/service-subscription-service-subscription-2.json")));
264 .when(aaiAdapter.queryActiveInventoryWithRetries(
265 Matchers.contains("service-subscription-1"), Mockito.anyString(),
266 Mockito.anyInt(),Mockito.anyString()))
267 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
268 "/sync/aai/service-subscription-service-subscription-1.json")));
271 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
272 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
273 .thenReturn(new OperationResult(200, TestResourceLoader
274 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
277 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
278 Matchers.argThat(listContainsValue("service-instance-59"))))
279 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
282 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
283 Matchers.argThat(listContainsValue("service-instance-54"))))
285 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
288 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
289 Matchers.argThat(listContainsValue("service-instance-55"))))
291 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
294 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
295 Matchers.argThat(listContainsValue("service-instance-50"))))
297 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
300 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
301 Matchers.argThat(listContainsValue("service-instance-52"))))
303 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
306 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
307 Matchers.argThat(listContainsValue("service-instance-57"))))
309 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
312 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
313 Matchers.argThat(listContainsValue("service-instance-53"))))
315 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
318 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
319 Matchers.argThat(listContainsValue("service-instance-58"))))
321 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
324 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
325 Matchers.argThat(listContainsValue("service-instance-51"))))
327 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
330 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
331 Matchers.argThat(listContainsValue("service-instance-56"))))
333 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
339 .when(aaiAdapter.queryActiveInventoryWithRetries(
340 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
341 Mockito.anyInt(),Mockito.anyString()))
342 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
343 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
346 .when(aaiAdapter.queryActiveInventoryWithRetries(
347 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
348 Mockito.anyInt(),Mockito.anyString()))
349 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
350 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
353 .when(aaiAdapter.queryActiveInventoryWithRetries(
354 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
355 Mockito.anyInt(),Mockito.anyString()))
356 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
357 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
360 .when(aaiAdapter.queryActiveInventoryWithRetries(
361 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
362 Mockito.anyInt(),Mockito.anyString()))
363 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
364 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
367 .when(aaiAdapter.queryActiveInventoryWithRetries(
368 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
369 Mockito.anyInt(),Mockito.anyString()))
370 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
371 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
374 .when(aaiAdapter.queryActiveInventoryWithRetries(
375 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
376 Mockito.anyInt(),Mockito.anyString()))
377 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
378 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
381 .when(aaiAdapter.queryActiveInventoryWithRetries(
382 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
383 Mockito.anyInt(),Mockito.anyString()))
384 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
385 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
388 .when(aaiAdapter.queryActiveInventoryWithRetries(
389 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
390 Mockito.anyInt(),Mockito.anyString()))
391 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
392 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
395 .when(aaiAdapter.queryActiveInventoryWithRetries(
396 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
397 Mockito.anyInt(),Mockito.anyString()))
398 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
399 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
402 .when(aaiAdapter.queryActiveInventoryWithRetries(
403 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
404 Mockito.anyInt(),Mockito.anyString()))
405 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
406 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
416 .when(aaiAdapter.queryActiveInventoryWithRetries(
417 Matchers.contains("service-instance-59"), Mockito.anyString(),
419 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
420 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
423 .when(aaiAdapter.queryActiveInventoryWithRetries(
424 Matchers.contains("service-instance-54"), Mockito.anyString(),
426 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
427 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
430 .when(aaiAdapter.queryActiveInventoryWithRetries(
431 Matchers.contains("service-instance-55"), Mockito.anyString(),
433 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
434 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
437 .when(aaiAdapter.queryActiveInventoryWithRetries(
438 Matchers.contains("service-instance-50"), Mockito.anyString(),
440 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
441 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
444 .when(aaiAdapter.queryActiveInventoryWithRetries(
445 Matchers.contains("service-instance-52"), Mockito.anyString(),
447 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
448 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
451 .when(aaiAdapter.queryActiveInventoryWithRetries(
452 Matchers.contains("service-instance-57"), Mockito.anyString(),
454 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
455 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
458 .when(aaiAdapter.queryActiveInventoryWithRetries(
459 Matchers.contains("service-instance-53"), Mockito.anyString(),
461 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
462 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
465 .when(aaiAdapter.queryActiveInventoryWithRetries(
466 Matchers.contains("service-instance-58"), Mockito.anyString(),
468 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
469 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
472 .when(aaiAdapter.queryActiveInventoryWithRetries(
473 Matchers.contains("service-instance-51"), Mockito.anyString(),
475 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
476 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
479 .when(aaiAdapter.queryActiveInventoryWithRetries(
480 Matchers.contains("service-instance-56"), Mockito.anyString(),
482 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
483 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
491 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
492 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
493 "http://server.proxy:9200/myindex/mytype/doc2",
494 "http://server.proxy:9200/myindex/mytype/doc3");
497 * Our initial gets from elastic search should be record-not-found
499 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
500 .thenReturn(new OperationResult(404, null));
501 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
502 .thenReturn(new OperationResult(404, null));
503 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
504 .thenReturn(new OperationResult(404, null));
507 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
508 .thenReturn(new OperationResult(200, null));
510 OperationState syncState = cerSynchronizer.doSync();
511 assertEquals(OperationState.OK, syncState);
513 assertNotNull(cerSynchronizer.getStatReport(false));
514 assertNotNull(cerSynchronizer.getStatReport(true));
516 cerSynchronizer.clearCache();
517 cerSynchronizer.shutdown();
523 public void validateSmallSyncWithRetries() throws Exception {
525 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
526 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
528 cerSynchronizer.setAaiAdapter(aaiAdapter);
529 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
531 String nodesQueryResponse = TestResourceLoader
532 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
534 OperationResult entitySelfLinks = new OperationResult();
536 entitySelfLinks.setResultCode(200);
537 entitySelfLinks.setResult(nodesQueryResponse);
539 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
540 .thenReturn(entitySelfLinks);
543 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
544 Mockito.anyString()))
546 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
549 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
550 Mockito.anyString()))
552 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
556 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
558 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
561 .when(aaiAdapter.queryActiveInventoryWithRetries(
562 Matchers.contains("service-subscription-2"), Mockito.anyString(),
563 Mockito.anyInt(),Mockito.anyString()))
564 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
565 "/sync/aai/service-subscription-service-subscription-2.json")));
568 .when(aaiAdapter.queryActiveInventoryWithRetries(
569 Matchers.contains("service-subscription-1"), Mockito.anyString(),
570 Mockito.anyInt(),Mockito.anyString()))
571 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
572 "/sync/aai/service-subscription-service-subscription-1.json")));
575 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
576 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
577 .thenReturn(new OperationResult(200, TestResourceLoader
578 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
581 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
582 Matchers.argThat(listContainsValue("service-instance-59"))))
583 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
586 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
587 Matchers.argThat(listContainsValue("service-instance-54"))))
589 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
592 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
593 Matchers.argThat(listContainsValue("service-instance-55"))))
595 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
598 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
599 Matchers.argThat(listContainsValue("service-instance-50"))))
601 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
604 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
605 Matchers.argThat(listContainsValue("service-instance-52"))))
607 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
610 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
611 Matchers.argThat(listContainsValue("service-instance-57"))))
613 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
616 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
617 Matchers.argThat(listContainsValue("service-instance-53"))))
619 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
622 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
623 Matchers.argThat(listContainsValue("service-instance-58"))))
625 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
628 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
629 Matchers.argThat(listContainsValue("service-instance-51"))))
631 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
634 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
635 Matchers.argThat(listContainsValue("service-instance-56"))))
637 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
643 .when(aaiAdapter.queryActiveInventoryWithRetries(
644 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
645 Mockito.anyInt(),Mockito.anyString()))
646 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
647 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
650 .when(aaiAdapter.queryActiveInventoryWithRetries(
651 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
652 Mockito.anyInt(),Mockito.anyString()))
653 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
654 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
657 .when(aaiAdapter.queryActiveInventoryWithRetries(
658 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
659 Mockito.anyInt(),Mockito.anyString()))
660 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
661 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
664 .when(aaiAdapter.queryActiveInventoryWithRetries(
665 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
666 Mockito.anyInt(),Mockito.anyString()))
667 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
668 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
671 .when(aaiAdapter.queryActiveInventoryWithRetries(
672 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
673 Mockito.anyInt(),Mockito.anyString()))
674 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
675 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
678 .when(aaiAdapter.queryActiveInventoryWithRetries(
679 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
680 Mockito.anyInt(),Mockito.anyString()))
681 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
682 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
685 .when(aaiAdapter.queryActiveInventoryWithRetries(
686 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
687 Mockito.anyInt(),Mockito.anyString()))
688 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
689 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
692 .when(aaiAdapter.queryActiveInventoryWithRetries(
693 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
694 Mockito.anyInt(),Mockito.anyString()))
695 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
696 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
699 .when(aaiAdapter.queryActiveInventoryWithRetries(
700 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
701 Mockito.anyInt(),Mockito.anyString()))
702 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
703 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
706 .when(aaiAdapter.queryActiveInventoryWithRetries(
707 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
708 Mockito.anyInt(),Mockito.anyString()))
709 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
710 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
720 .when(aaiAdapter.queryActiveInventoryWithRetries(
721 Matchers.contains("service-instance-59"), Mockito.anyString(),
723 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
724 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
727 .when(aaiAdapter.queryActiveInventoryWithRetries(
728 Matchers.contains("service-instance-54"), Mockito.anyString(),
730 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
731 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
734 .when(aaiAdapter.queryActiveInventoryWithRetries(
735 Matchers.contains("service-instance-55"), Mockito.anyString(),
737 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
738 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
741 .when(aaiAdapter.queryActiveInventoryWithRetries(
742 Matchers.contains("service-instance-50"), Mockito.anyString(),
744 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
745 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
748 .when(aaiAdapter.queryActiveInventoryWithRetries(
749 Matchers.contains("service-instance-52"), Mockito.anyString(),
751 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
752 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
755 .when(aaiAdapter.queryActiveInventoryWithRetries(
756 Matchers.contains("service-instance-57"), Mockito.anyString(),
758 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
759 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
762 .when(aaiAdapter.queryActiveInventoryWithRetries(
763 Matchers.contains("service-instance-53"), Mockito.anyString(),
765 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
766 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
769 .when(aaiAdapter.queryActiveInventoryWithRetries(
770 Matchers.contains("service-instance-58"), Mockito.anyString(),
772 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
773 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
776 .when(aaiAdapter.queryActiveInventoryWithRetries(
777 Matchers.contains("service-instance-51"), Mockito.anyString(),
779 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
780 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
783 .when(aaiAdapter.queryActiveInventoryWithRetries(
784 Matchers.contains("service-instance-56"), Mockito.anyString(),
786 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
787 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
795 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
796 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
797 "http://server.proxy:9200/myindex/mytype/doc2",
798 "http://server.proxy:9200/myindex/mytype/doc3");
801 * Our initial gets from elastic search should be record-not-found
803 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
804 .thenReturn(new OperationResult(404, null));
805 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
806 .thenReturn(new OperationResult(404, null));
807 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
808 .thenReturn(new OperationResult(404, null));
812 * Cause version conflict errors on every put to test retry flow
815 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
816 .thenReturn(new OperationResult(409, null));
818 OperationState syncState = cerSynchronizer.doSync();
819 assertEquals(OperationState.OK, syncState);
821 assertNotNull(cerSynchronizer.getStatReport(false));
822 assertNotNull(cerSynchronizer.getStatReport(true));
824 cerSynchronizer.clearCache();
825 cerSynchronizer.shutdown();
835 public void validateSmallSyncWithEntityMerges() throws Exception {
837 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
838 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
840 cerSynchronizer.setAaiAdapter(aaiAdapter);
841 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
843 String nodesQueryResponse = TestResourceLoader
844 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
846 OperationResult entitySelfLinks = new OperationResult();
848 entitySelfLinks.setResultCode(200);
849 entitySelfLinks.setResult(nodesQueryResponse);
851 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
852 .thenReturn(entitySelfLinks);
855 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
856 Mockito.anyString()))
858 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
861 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
862 Mockito.anyString()))
864 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
868 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
870 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
873 .when(aaiAdapter.queryActiveInventoryWithRetries(
874 Matchers.contains("service-subscription-2"), Mockito.anyString(),
875 Mockito.anyInt(),Mockito.anyString()))
876 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
877 "/sync/aai/service-subscription-service-subscription-2.json")));
880 .when(aaiAdapter.queryActiveInventoryWithRetries(
881 Matchers.contains("service-subscription-1"), Mockito.anyString(),
882 Mockito.anyInt(),Mockito.anyString()))
883 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
884 "/sync/aai/service-subscription-service-subscription-1.json")));
887 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
888 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
889 .thenReturn(new OperationResult(200, TestResourceLoader
890 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
893 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
894 Matchers.argThat(listContainsValue("service-instance-59"))))
895 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
898 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
899 Matchers.argThat(listContainsValue("service-instance-54"))))
901 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
904 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
905 Matchers.argThat(listContainsValue("service-instance-55"))))
907 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
910 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
911 Matchers.argThat(listContainsValue("service-instance-50"))))
913 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
916 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
917 Matchers.argThat(listContainsValue("service-instance-52"))))
919 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
922 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
923 Matchers.argThat(listContainsValue("service-instance-57"))))
925 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
928 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
929 Matchers.argThat(listContainsValue("service-instance-53"))))
931 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
934 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
935 Matchers.argThat(listContainsValue("service-instance-58"))))
937 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
940 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
941 Matchers.argThat(listContainsValue("service-instance-51"))))
943 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
946 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
947 Matchers.argThat(listContainsValue("service-instance-56"))))
949 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
955 .when(aaiAdapter.queryActiveInventoryWithRetries(
956 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
957 Mockito.anyInt(),Mockito.anyString()))
958 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
959 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
962 .when(aaiAdapter.queryActiveInventoryWithRetries(
963 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
964 Mockito.anyInt(),Mockito.anyString()))
965 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
966 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
969 .when(aaiAdapter.queryActiveInventoryWithRetries(
970 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
971 Mockito.anyInt(),Mockito.anyString()))
972 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
973 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
976 .when(aaiAdapter.queryActiveInventoryWithRetries(
977 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
978 Mockito.anyInt(),Mockito.anyString()))
979 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
980 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
983 .when(aaiAdapter.queryActiveInventoryWithRetries(
984 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
985 Mockito.anyInt(),Mockito.anyString()))
986 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
987 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
990 .when(aaiAdapter.queryActiveInventoryWithRetries(
991 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
992 Mockito.anyInt(),Mockito.anyString()))
993 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
994 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
997 .when(aaiAdapter.queryActiveInventoryWithRetries(
998 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
999 Mockito.anyInt(),Mockito.anyString()))
1000 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1001 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
1004 .when(aaiAdapter.queryActiveInventoryWithRetries(
1005 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
1006 Mockito.anyInt(),Mockito.anyString()))
1007 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1008 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
1011 .when(aaiAdapter.queryActiveInventoryWithRetries(
1012 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
1013 Mockito.anyInt(),Mockito.anyString()))
1014 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1015 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
1018 .when(aaiAdapter.queryActiveInventoryWithRetries(
1019 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
1020 Mockito.anyInt(),Mockito.anyString()))
1021 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1022 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
1025 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
1026 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
1027 "http://server.proxy:9200/myindex/mytype/doc2",
1028 "http://server.proxy:9200/myindex/mytype/doc3");
1031 * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update
1033 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200,
1034 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json")));
1036 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200,
1037 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json")));
1039 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200,
1040 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json")));
1042 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200,
1043 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json")));
1045 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200,
1046 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json")));
1048 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1049 .thenReturn(new OperationResult(200, null));
1053 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1054 .thenReturn(new OperationResult(200, null));
1056 OperationState syncState = cerSynchronizer.doSync();
1057 assertEquals(OperationState.OK, syncState);
1059 assertNotNull(cerSynchronizer.getStatReport(false));
1060 assertNotNull(cerSynchronizer.getStatReport(true));
1062 cerSynchronizer.clearCache();
1063 cerSynchronizer.shutdown();