1 package org.onap.aai.sparky.crossentityreference.sync;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.HashSet;
13 import org.hamcrest.Matcher;
14 import org.junit.Before;
15 import org.junit.Test;
16 import org.mockito.Matchers;
17 import org.mockito.Mockito;
18 import org.onap.aai.restclient.client.OperationResult;
19 import org.onap.aai.sparky.config.oxm.CrossEntityReferenceLookup;
20 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
21 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
22 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
23 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
24 import org.onap.aai.sparky.config.oxm.SearchableEntityLookup;
25 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
26 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
27 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
28 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
29 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
30 import org.onap.aai.sparky.sync.enumeration.OperationState;
31 import org.onap.aai.sparky.util.StringCollectionContainsMatcher;
32 import org.onap.aai.sparky.util.TestResourceLoader;
34 import com.fasterxml.jackson.databind.ObjectMapper;
36 public class CrossEntityReferenceSynchronizerTest {
38 private static ObjectMapper mapper = new ObjectMapper();
40 private CrossEntityReferenceSynchronizer cerSynchronizer;
42 private ElasticSearchSchemaConfig esSchemaConfig;
43 private NetworkStatisticsConfig aaiStatConfig;
44 private NetworkStatisticsConfig esStatConfig;
45 private OxmEntityLookup oxmEntityLookup;
46 private SearchableEntityLookup searchableEntityLookup;
47 private ElasticSearchAdapter esAdapter;
48 private ActiveInventoryAdapter aaiAdapter;
49 private CrossEntityReferenceLookup cerLookup;
50 private RestEndpointConfig aaiRestEndPointConfig;
53 public void init() throws Exception {
55 esSchemaConfig = new ElasticSearchSchemaConfig();
56 esSchemaConfig.setIndexDocType("default");
57 esSchemaConfig.setIndexMappingsFileName(null);
58 esSchemaConfig.setIndexName("aggregation-index-name");
59 esSchemaConfig.setIndexSettingsFileName(null);
62 aaiStatConfig = new NetworkStatisticsConfig();
64 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
66 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
67 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
68 aaiStatConfig.setBytesHistogramNumBins(20);
69 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
71 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
72 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
73 aaiStatConfig.setQueueLengthHistogramNumBins(20);
74 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
76 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
77 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
78 aaiStatConfig.setTaskAgeHistogramNumBins(20);
79 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
81 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
82 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
83 aaiStatConfig.setResponseTimeHistogramNumBins(20);
84 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
86 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
87 aaiStatConfig.setTpsHistogramMaxYAxis(100);
88 aaiStatConfig.setTpsHistogramNumBins(20);
89 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
91 esStatConfig = new NetworkStatisticsConfig();
93 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
95 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
96 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
97 esStatConfig.setBytesHistogramNumBins(20);
98 esStatConfig.setBytesHistogramNumDecimalPoints(2);
100 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
101 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
102 esStatConfig.setQueueLengthHistogramNumBins(20);
103 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
105 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
106 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
107 esStatConfig.setTaskAgeHistogramNumBins(20);
108 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
110 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
111 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
112 esStatConfig.setResponseTimeHistogramNumBins(20);
113 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
115 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
116 esStatConfig.setTpsHistogramMaxYAxis(100);
117 esStatConfig.setTpsHistogramNumBins(20);
118 esStatConfig.setTpsHistogramNumDecimalPoints(2);
120 oxmEntityLookup = new OxmEntityLookup();
122 esAdapter = Mockito.mock(ElasticSearchAdapter.class);
123 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
126 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
128 processors.add(oxmEntityLookup);
131 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
132 new HashMap<String, OxmEntityDescriptor>();
134 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
135 genericVnfDescriptor.setEntityName("generic-vnf");
136 List<String> pkeyNames = new ArrayList<String>();
137 pkeyNames.add("vnf-name");
139 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
141 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
144 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
146 cerLookup = new CrossEntityReferenceLookup();
147 processors.add(cerLookup);
149 searchableEntityLookup = new SearchableEntityLookup();
150 processors.add(searchableEntityLookup);
152 OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors);
153 oxmModelLoader.loadLatestOxmModel();
155 aaiRestEndPointConfig = new RestEndpointConfig();
156 aaiRestEndPointConfig.setNumRequestRetries(5);
158 Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig);
163 public void validateBasicConstruction() throws Exception {
165 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
166 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
168 cerSynchronizer.setAaiAdapter(aaiAdapter);
169 cerSynchronizer.setElasticSearchAdapter(esAdapter);
171 assertNotNull(cerSynchronizer.getAaiAdapter());
172 assertNotNull(cerSynchronizer.getElasticSearchAdapter());
176 private Matcher<List<String>> listContainsValue(String expectedValue) {
177 return new StringCollectionContainsMatcher(expectedValue);
181 public void validateSmallSync() throws Exception {
183 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
184 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
186 cerSynchronizer.setAaiAdapter(aaiAdapter);
187 cerSynchronizer.setElasticSearchAdapter(esAdapter);
189 String nodesQueryResponse = TestResourceLoader
190 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
192 OperationResult entitySelfLinks = new OperationResult();
194 entitySelfLinks.setResultCode(200);
195 entitySelfLinks.setResult(nodesQueryResponse);
197 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
198 .thenReturn(entitySelfLinks);
201 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
202 Mockito.anyString()))
204 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
207 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
208 Mockito.anyString()))
210 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
214 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
216 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
219 .when(aaiAdapter.queryActiveInventoryWithRetries(
220 Matchers.contains("service-subscription-2"), Mockito.anyString(),
222 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
223 "/sync/aai/service-subscription-service-subscription-2.json")));
226 .when(aaiAdapter.queryActiveInventoryWithRetries(
227 Matchers.contains("service-subscription-1"), Mockito.anyString(),
229 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
230 "/sync/aai/service-subscription-service-subscription-1.json")));
233 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
234 Mockito.anyString(), Mockito.anyInt()))
235 .thenReturn(new OperationResult(200, TestResourceLoader
236 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
239 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
240 Matchers.argThat(listContainsValue("service-instance-59"))))
241 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
244 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
245 Matchers.argThat(listContainsValue("service-instance-54"))))
247 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
250 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
251 Matchers.argThat(listContainsValue("service-instance-55"))))
253 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
256 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
257 Matchers.argThat(listContainsValue("service-instance-50"))))
259 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
262 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
263 Matchers.argThat(listContainsValue("service-instance-52"))))
265 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
268 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
269 Matchers.argThat(listContainsValue("service-instance-57"))))
271 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
274 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
275 Matchers.argThat(listContainsValue("service-instance-53"))))
277 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
280 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
281 Matchers.argThat(listContainsValue("service-instance-58"))))
283 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
286 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
287 Matchers.argThat(listContainsValue("service-instance-51"))))
289 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
292 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
293 Matchers.argThat(listContainsValue("service-instance-56"))))
295 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
301 .when(aaiAdapter.queryActiveInventoryWithRetries(
302 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
304 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
305 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
308 .when(aaiAdapter.queryActiveInventoryWithRetries(
309 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
311 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
312 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
315 .when(aaiAdapter.queryActiveInventoryWithRetries(
316 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
318 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
319 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
322 .when(aaiAdapter.queryActiveInventoryWithRetries(
323 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
325 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
326 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
329 .when(aaiAdapter.queryActiveInventoryWithRetries(
330 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
332 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
333 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
336 .when(aaiAdapter.queryActiveInventoryWithRetries(
337 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
339 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
340 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
343 .when(aaiAdapter.queryActiveInventoryWithRetries(
344 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
346 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
347 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
350 .when(aaiAdapter.queryActiveInventoryWithRetries(
351 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
353 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
354 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
357 .when(aaiAdapter.queryActiveInventoryWithRetries(
358 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
360 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
361 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
364 .when(aaiAdapter.queryActiveInventoryWithRetries(
365 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
367 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
368 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
378 .when(aaiAdapter.queryActiveInventoryWithRetries(
379 Matchers.contains("service-instance-59"), Mockito.anyString(),
381 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
382 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
385 .when(aaiAdapter.queryActiveInventoryWithRetries(
386 Matchers.contains("service-instance-54"), Mockito.anyString(),
388 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
389 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
392 .when(aaiAdapter.queryActiveInventoryWithRetries(
393 Matchers.contains("service-instance-55"), Mockito.anyString(),
395 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
396 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
399 .when(aaiAdapter.queryActiveInventoryWithRetries(
400 Matchers.contains("service-instance-50"), Mockito.anyString(),
402 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
403 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
406 .when(aaiAdapter.queryActiveInventoryWithRetries(
407 Matchers.contains("service-instance-52"), Mockito.anyString(),
409 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
410 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
413 .when(aaiAdapter.queryActiveInventoryWithRetries(
414 Matchers.contains("service-instance-57"), Mockito.anyString(),
416 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
417 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
420 .when(aaiAdapter.queryActiveInventoryWithRetries(
421 Matchers.contains("service-instance-53"), Mockito.anyString(),
423 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
424 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
427 .when(aaiAdapter.queryActiveInventoryWithRetries(
428 Matchers.contains("service-instance-58"), Mockito.anyString(),
430 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
431 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
434 .when(aaiAdapter.queryActiveInventoryWithRetries(
435 Matchers.contains("service-instance-51"), Mockito.anyString(),
437 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
438 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
441 .when(aaiAdapter.queryActiveInventoryWithRetries(
442 Matchers.contains("service-instance-56"), Mockito.anyString(),
444 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
445 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
453 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
454 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
455 "http://localhost:9200/myindex/mytype/doc2",
456 "http://localhost:9200/myindex/mytype/doc3");
459 * Our initial gets from elastic search should be record-not-found
461 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
462 .thenReturn(new OperationResult(404, null));
463 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
464 .thenReturn(new OperationResult(404, null));
465 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
466 .thenReturn(new OperationResult(404, null));
469 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
470 .thenReturn(new OperationResult(200, null));
472 OperationState syncState = cerSynchronizer.doSync();
473 assertEquals(OperationState.OK, syncState);
475 assertNotNull(cerSynchronizer.getStatReport(false));
476 assertNotNull(cerSynchronizer.getStatReport(true));
478 cerSynchronizer.clearCache();
479 cerSynchronizer.shutdown();
485 public void validateSmallSyncWithRetries() throws Exception {
487 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
488 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
490 cerSynchronizer.setAaiAdapter(aaiAdapter);
491 cerSynchronizer.setElasticSearchAdapter(esAdapter);
493 String nodesQueryResponse = TestResourceLoader
494 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
496 OperationResult entitySelfLinks = new OperationResult();
498 entitySelfLinks.setResultCode(200);
499 entitySelfLinks.setResult(nodesQueryResponse);
501 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
502 .thenReturn(entitySelfLinks);
505 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
506 Mockito.anyString()))
508 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
511 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
512 Mockito.anyString()))
514 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
518 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
520 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
523 .when(aaiAdapter.queryActiveInventoryWithRetries(
524 Matchers.contains("service-subscription-2"), Mockito.anyString(),
526 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
527 "/sync/aai/service-subscription-service-subscription-2.json")));
530 .when(aaiAdapter.queryActiveInventoryWithRetries(
531 Matchers.contains("service-subscription-1"), Mockito.anyString(),
533 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
534 "/sync/aai/service-subscription-service-subscription-1.json")));
537 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
538 Mockito.anyString(), Mockito.anyInt()))
539 .thenReturn(new OperationResult(200, TestResourceLoader
540 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
543 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
544 Matchers.argThat(listContainsValue("service-instance-59"))))
545 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
548 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
549 Matchers.argThat(listContainsValue("service-instance-54"))))
551 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
554 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
555 Matchers.argThat(listContainsValue("service-instance-55"))))
557 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
560 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
561 Matchers.argThat(listContainsValue("service-instance-50"))))
563 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
566 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
567 Matchers.argThat(listContainsValue("service-instance-52"))))
569 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
572 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
573 Matchers.argThat(listContainsValue("service-instance-57"))))
575 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
578 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
579 Matchers.argThat(listContainsValue("service-instance-53"))))
581 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
584 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
585 Matchers.argThat(listContainsValue("service-instance-58"))))
587 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
590 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
591 Matchers.argThat(listContainsValue("service-instance-51"))))
593 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
596 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
597 Matchers.argThat(listContainsValue("service-instance-56"))))
599 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
605 .when(aaiAdapter.queryActiveInventoryWithRetries(
606 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
608 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
609 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
612 .when(aaiAdapter.queryActiveInventoryWithRetries(
613 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
615 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
616 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
619 .when(aaiAdapter.queryActiveInventoryWithRetries(
620 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
622 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
623 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
626 .when(aaiAdapter.queryActiveInventoryWithRetries(
627 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
629 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
630 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
633 .when(aaiAdapter.queryActiveInventoryWithRetries(
634 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
636 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
637 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
640 .when(aaiAdapter.queryActiveInventoryWithRetries(
641 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
643 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
644 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
647 .when(aaiAdapter.queryActiveInventoryWithRetries(
648 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
650 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
651 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
654 .when(aaiAdapter.queryActiveInventoryWithRetries(
655 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
657 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
658 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
661 .when(aaiAdapter.queryActiveInventoryWithRetries(
662 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
664 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
665 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
668 .when(aaiAdapter.queryActiveInventoryWithRetries(
669 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
671 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
672 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
682 .when(aaiAdapter.queryActiveInventoryWithRetries(
683 Matchers.contains("service-instance-59"), Mockito.anyString(),
685 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
686 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
689 .when(aaiAdapter.queryActiveInventoryWithRetries(
690 Matchers.contains("service-instance-54"), Mockito.anyString(),
692 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
693 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
696 .when(aaiAdapter.queryActiveInventoryWithRetries(
697 Matchers.contains("service-instance-55"), Mockito.anyString(),
699 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
700 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
703 .when(aaiAdapter.queryActiveInventoryWithRetries(
704 Matchers.contains("service-instance-50"), Mockito.anyString(),
706 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
707 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
710 .when(aaiAdapter.queryActiveInventoryWithRetries(
711 Matchers.contains("service-instance-52"), Mockito.anyString(),
713 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
714 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
717 .when(aaiAdapter.queryActiveInventoryWithRetries(
718 Matchers.contains("service-instance-57"), Mockito.anyString(),
720 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
721 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
724 .when(aaiAdapter.queryActiveInventoryWithRetries(
725 Matchers.contains("service-instance-53"), Mockito.anyString(),
727 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
728 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
731 .when(aaiAdapter.queryActiveInventoryWithRetries(
732 Matchers.contains("service-instance-58"), Mockito.anyString(),
734 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
735 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
738 .when(aaiAdapter.queryActiveInventoryWithRetries(
739 Matchers.contains("service-instance-51"), Mockito.anyString(),
741 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
742 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
745 .when(aaiAdapter.queryActiveInventoryWithRetries(
746 Matchers.contains("service-instance-56"), Mockito.anyString(),
748 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
749 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
757 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
758 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
759 "http://localhost:9200/myindex/mytype/doc2",
760 "http://localhost:9200/myindex/mytype/doc3");
763 * Our initial gets from elastic search should be record-not-found
765 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
766 .thenReturn(new OperationResult(404, null));
767 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
768 .thenReturn(new OperationResult(404, null));
769 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
770 .thenReturn(new OperationResult(404, null));
774 * Cause version conflict errors on every put to test retry flow
777 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
778 .thenReturn(new OperationResult(409, null));
780 OperationState syncState = cerSynchronizer.doSync();
781 assertEquals(OperationState.OK, syncState);
783 assertNotNull(cerSynchronizer.getStatReport(false));
784 assertNotNull(cerSynchronizer.getStatReport(true));
786 cerSynchronizer.clearCache();
787 cerSynchronizer.shutdown();
797 public void validateSmallSyncWithEntityMerges() throws Exception {
799 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
800 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
802 cerSynchronizer.setAaiAdapter(aaiAdapter);
803 cerSynchronizer.setElasticSearchAdapter(esAdapter);
805 String nodesQueryResponse = TestResourceLoader
806 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
808 OperationResult entitySelfLinks = new OperationResult();
810 entitySelfLinks.setResultCode(200);
811 entitySelfLinks.setResult(nodesQueryResponse);
813 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
814 .thenReturn(entitySelfLinks);
817 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
818 Mockito.anyString()))
820 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
823 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
824 Mockito.anyString()))
826 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
830 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
832 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
835 .when(aaiAdapter.queryActiveInventoryWithRetries(
836 Matchers.contains("service-subscription-2"), Mockito.anyString(),
838 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
839 "/sync/aai/service-subscription-service-subscription-2.json")));
842 .when(aaiAdapter.queryActiveInventoryWithRetries(
843 Matchers.contains("service-subscription-1"), Mockito.anyString(),
845 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
846 "/sync/aai/service-subscription-service-subscription-1.json")));
849 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
850 Mockito.anyString(), Mockito.anyInt()))
851 .thenReturn(new OperationResult(200, TestResourceLoader
852 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
855 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
856 Matchers.argThat(listContainsValue("service-instance-59"))))
857 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
860 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
861 Matchers.argThat(listContainsValue("service-instance-54"))))
863 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
866 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
867 Matchers.argThat(listContainsValue("service-instance-55"))))
869 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
872 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
873 Matchers.argThat(listContainsValue("service-instance-50"))))
875 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
878 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
879 Matchers.argThat(listContainsValue("service-instance-52"))))
881 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
884 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
885 Matchers.argThat(listContainsValue("service-instance-57"))))
887 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
890 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
891 Matchers.argThat(listContainsValue("service-instance-53"))))
893 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
896 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
897 Matchers.argThat(listContainsValue("service-instance-58"))))
899 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
902 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
903 Matchers.argThat(listContainsValue("service-instance-51"))))
905 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
908 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
909 Matchers.argThat(listContainsValue("service-instance-56"))))
911 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
917 .when(aaiAdapter.queryActiveInventoryWithRetries(
918 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
920 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
921 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
924 .when(aaiAdapter.queryActiveInventoryWithRetries(
925 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
927 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
928 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
931 .when(aaiAdapter.queryActiveInventoryWithRetries(
932 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
934 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
935 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
938 .when(aaiAdapter.queryActiveInventoryWithRetries(
939 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
941 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
942 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
945 .when(aaiAdapter.queryActiveInventoryWithRetries(
946 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
948 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
949 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
952 .when(aaiAdapter.queryActiveInventoryWithRetries(
953 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
955 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
956 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
959 .when(aaiAdapter.queryActiveInventoryWithRetries(
960 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
962 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
963 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
966 .when(aaiAdapter.queryActiveInventoryWithRetries(
967 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
969 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
970 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
973 .when(aaiAdapter.queryActiveInventoryWithRetries(
974 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
976 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
977 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
980 .when(aaiAdapter.queryActiveInventoryWithRetries(
981 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
983 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
984 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
987 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
988 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
989 "http://localhost:9200/myindex/mytype/doc2",
990 "http://localhost:9200/myindex/mytype/doc3");
993 * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update
995 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200,
996 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json")));
998 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200,
999 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json")));
1001 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200,
1002 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json")));
1004 Mockito.when(esAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200,
1005 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json")));
1007 Mockito.when(esAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200,
1008 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json")));
1010 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1011 .thenReturn(new OperationResult(200, null));
1015 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1016 .thenReturn(new OperationResult(200, null));
1018 OperationState syncState = cerSynchronizer.doSync();
1019 assertEquals(OperationState.OK, syncState);
1021 assertNotNull(cerSynchronizer.getStatReport(false));
1022 assertNotNull(cerSynchronizer.getStatReport(true));
1024 cerSynchronizer.clearCache();
1025 cerSynchronizer.shutdown();