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.OxmModelProcessor;
23 import org.onap.aai.sparky.config.oxm.SearchableEntityLookup;
24 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
25 import org.onap.aai.sparky.search.SearchServiceAdapter;
26 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
27 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
28 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
29 import org.onap.aai.sparky.sync.enumeration.OperationState;
30 import org.onap.aai.sparky.util.StringCollectionContainsMatcher;
31 import org.onap.aai.sparky.util.TestResourceLoader;
33 import com.fasterxml.jackson.databind.ObjectMapper;
35 public class CrossEntityReferenceSynchronizerTest {
37 private static ObjectMapper mapper = new ObjectMapper();
39 private CrossEntityReferenceSynchronizer cerSynchronizer;
41 private ElasticSearchSchemaConfig esSchemaConfig;
42 private NetworkStatisticsConfig aaiStatConfig;
43 private NetworkStatisticsConfig esStatConfig;
44 private OxmEntityLookup oxmEntityLookup;
45 private SearchableEntityLookup searchableEntityLookup;
46 private SearchServiceAdapter searchServiceAdapter;
47 private ActiveInventoryAdapter aaiAdapter;
48 private CrossEntityReferenceLookup cerLookup;
49 private RestEndpointConfig aaiRestEndPointConfig;
52 public void init() throws Exception {
54 esSchemaConfig = new ElasticSearchSchemaConfig();
55 esSchemaConfig.setIndexDocType("default");
56 esSchemaConfig.setIndexMappingsFileName(null);
57 esSchemaConfig.setIndexName("aggregation-index-name");
58 esSchemaConfig.setIndexSettingsFileName(null);
61 aaiStatConfig = new NetworkStatisticsConfig();
63 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
65 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
66 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
67 aaiStatConfig.setBytesHistogramNumBins(20);
68 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
70 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
71 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
72 aaiStatConfig.setQueueLengthHistogramNumBins(20);
73 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
75 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
76 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
77 aaiStatConfig.setTaskAgeHistogramNumBins(20);
78 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
80 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
81 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
82 aaiStatConfig.setResponseTimeHistogramNumBins(20);
83 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
85 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
86 aaiStatConfig.setTpsHistogramMaxYAxis(100);
87 aaiStatConfig.setTpsHistogramNumBins(20);
88 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
90 esStatConfig = new NetworkStatisticsConfig();
92 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
94 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
95 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
96 esStatConfig.setBytesHistogramNumBins(20);
97 esStatConfig.setBytesHistogramNumDecimalPoints(2);
99 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
100 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
101 esStatConfig.setQueueLengthHistogramNumBins(20);
102 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
104 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
105 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
106 esStatConfig.setTaskAgeHistogramNumBins(20);
107 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
109 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
110 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
111 esStatConfig.setResponseTimeHistogramNumBins(20);
112 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
114 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
115 esStatConfig.setTpsHistogramMaxYAxis(100);
116 esStatConfig.setTpsHistogramNumBins(20);
117 esStatConfig.setTpsHistogramNumDecimalPoints(2);
119 oxmEntityLookup = new OxmEntityLookup();
121 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
122 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
125 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
127 processors.add(oxmEntityLookup);
130 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
131 new HashMap<String, OxmEntityDescriptor>();
133 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
134 genericVnfDescriptor.setEntityName("generic-vnf");
135 List<String> pkeyNames = new ArrayList<String>();
136 pkeyNames.add("vnf-name");
138 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
140 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
143 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
145 cerLookup = new CrossEntityReferenceLookup();
146 processors.add(cerLookup);
148 searchableEntityLookup = new SearchableEntityLookup();
149 processors.add(searchableEntityLookup);
153 aaiRestEndPointConfig = new RestEndpointConfig();
154 aaiRestEndPointConfig.setNumRequestRetries(5);
156 Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig);
161 public void validateBasicConstruction() throws Exception {
163 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
164 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
166 cerSynchronizer.setAaiAdapter(aaiAdapter);
167 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
169 assertNotNull(cerSynchronizer.getAaiAdapter());
170 assertNotNull(cerSynchronizer.getSearchServiceAdapter());
174 private Matcher<List<String>> listContainsValue(String expectedValue) {
175 return new StringCollectionContainsMatcher(expectedValue);
179 public void validateSmallSync() throws Exception {
181 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
182 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
184 cerSynchronizer.setAaiAdapter(aaiAdapter);
185 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
187 String nodesQueryResponse = TestResourceLoader
188 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
190 OperationResult entitySelfLinks = new OperationResult();
192 entitySelfLinks.setResultCode(200);
193 entitySelfLinks.setResult(nodesQueryResponse);
195 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
196 .thenReturn(entitySelfLinks);
199 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
200 Mockito.anyString()))
202 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
205 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
206 Mockito.anyString()))
208 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
212 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
214 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
217 .when(aaiAdapter.queryActiveInventoryWithRetries(
218 Matchers.contains("service-subscription-2"), Mockito.anyString(),
220 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
221 "/sync/aai/service-subscription-service-subscription-2.json")));
224 .when(aaiAdapter.queryActiveInventoryWithRetries(
225 Matchers.contains("service-subscription-1"), Mockito.anyString(),
227 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
228 "/sync/aai/service-subscription-service-subscription-1.json")));
231 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
232 Mockito.anyString(), Mockito.anyInt()))
233 .thenReturn(new OperationResult(200, TestResourceLoader
234 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
237 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
238 Matchers.argThat(listContainsValue("service-instance-59"))))
239 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
242 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
243 Matchers.argThat(listContainsValue("service-instance-54"))))
245 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
248 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
249 Matchers.argThat(listContainsValue("service-instance-55"))))
251 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
254 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
255 Matchers.argThat(listContainsValue("service-instance-50"))))
257 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
260 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
261 Matchers.argThat(listContainsValue("service-instance-52"))))
263 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
266 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
267 Matchers.argThat(listContainsValue("service-instance-57"))))
269 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
272 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
273 Matchers.argThat(listContainsValue("service-instance-53"))))
275 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
278 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
279 Matchers.argThat(listContainsValue("service-instance-58"))))
281 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
284 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
285 Matchers.argThat(listContainsValue("service-instance-51"))))
287 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
290 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
291 Matchers.argThat(listContainsValue("service-instance-56"))))
293 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
299 .when(aaiAdapter.queryActiveInventoryWithRetries(
300 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
302 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
303 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
306 .when(aaiAdapter.queryActiveInventoryWithRetries(
307 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
309 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
310 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
313 .when(aaiAdapter.queryActiveInventoryWithRetries(
314 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
316 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
317 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
320 .when(aaiAdapter.queryActiveInventoryWithRetries(
321 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
323 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
324 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
327 .when(aaiAdapter.queryActiveInventoryWithRetries(
328 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
330 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
331 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
334 .when(aaiAdapter.queryActiveInventoryWithRetries(
335 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
337 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
338 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
341 .when(aaiAdapter.queryActiveInventoryWithRetries(
342 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
344 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
345 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
348 .when(aaiAdapter.queryActiveInventoryWithRetries(
349 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
351 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
352 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
355 .when(aaiAdapter.queryActiveInventoryWithRetries(
356 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
358 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
359 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
362 .when(aaiAdapter.queryActiveInventoryWithRetries(
363 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
365 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
366 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
376 .when(aaiAdapter.queryActiveInventoryWithRetries(
377 Matchers.contains("service-instance-59"), Mockito.anyString(),
379 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
380 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
383 .when(aaiAdapter.queryActiveInventoryWithRetries(
384 Matchers.contains("service-instance-54"), Mockito.anyString(),
386 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
387 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
390 .when(aaiAdapter.queryActiveInventoryWithRetries(
391 Matchers.contains("service-instance-55"), Mockito.anyString(),
393 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
394 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
397 .when(aaiAdapter.queryActiveInventoryWithRetries(
398 Matchers.contains("service-instance-50"), Mockito.anyString(),
400 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
401 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
404 .when(aaiAdapter.queryActiveInventoryWithRetries(
405 Matchers.contains("service-instance-52"), Mockito.anyString(),
407 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
408 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
411 .when(aaiAdapter.queryActiveInventoryWithRetries(
412 Matchers.contains("service-instance-57"), Mockito.anyString(),
414 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
415 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
418 .when(aaiAdapter.queryActiveInventoryWithRetries(
419 Matchers.contains("service-instance-53"), Mockito.anyString(),
421 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
422 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
425 .when(aaiAdapter.queryActiveInventoryWithRetries(
426 Matchers.contains("service-instance-58"), Mockito.anyString(),
428 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
429 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
432 .when(aaiAdapter.queryActiveInventoryWithRetries(
433 Matchers.contains("service-instance-51"), Mockito.anyString(),
435 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
436 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
439 .when(aaiAdapter.queryActiveInventoryWithRetries(
440 Matchers.contains("service-instance-56"), Mockito.anyString(),
442 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
443 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
451 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
452 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
453 "http://server.proxy:9200/myindex/mytype/doc2",
454 "http://server.proxy:9200/myindex/mytype/doc3");
457 * Our initial gets from elastic search should be record-not-found
459 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
460 .thenReturn(new OperationResult(404, null));
461 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
462 .thenReturn(new OperationResult(404, null));
463 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
464 .thenReturn(new OperationResult(404, null));
467 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
468 .thenReturn(new OperationResult(200, null));
470 OperationState syncState = cerSynchronizer.doSync();
471 assertEquals(OperationState.OK, syncState);
473 assertNotNull(cerSynchronizer.getStatReport(false));
474 assertNotNull(cerSynchronizer.getStatReport(true));
476 cerSynchronizer.clearCache();
477 cerSynchronizer.shutdown();
483 public void validateSmallSyncWithRetries() throws Exception {
485 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
486 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
488 cerSynchronizer.setAaiAdapter(aaiAdapter);
489 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
491 String nodesQueryResponse = TestResourceLoader
492 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
494 OperationResult entitySelfLinks = new OperationResult();
496 entitySelfLinks.setResultCode(200);
497 entitySelfLinks.setResult(nodesQueryResponse);
499 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
500 .thenReturn(entitySelfLinks);
503 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
504 Mockito.anyString()))
506 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
509 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
510 Mockito.anyString()))
512 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
516 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
518 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
521 .when(aaiAdapter.queryActiveInventoryWithRetries(
522 Matchers.contains("service-subscription-2"), Mockito.anyString(),
524 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
525 "/sync/aai/service-subscription-service-subscription-2.json")));
528 .when(aaiAdapter.queryActiveInventoryWithRetries(
529 Matchers.contains("service-subscription-1"), Mockito.anyString(),
531 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
532 "/sync/aai/service-subscription-service-subscription-1.json")));
535 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
536 Mockito.anyString(), Mockito.anyInt()))
537 .thenReturn(new OperationResult(200, TestResourceLoader
538 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
541 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
542 Matchers.argThat(listContainsValue("service-instance-59"))))
543 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
546 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
547 Matchers.argThat(listContainsValue("service-instance-54"))))
549 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
552 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
553 Matchers.argThat(listContainsValue("service-instance-55"))))
555 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
558 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
559 Matchers.argThat(listContainsValue("service-instance-50"))))
561 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
564 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
565 Matchers.argThat(listContainsValue("service-instance-52"))))
567 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
570 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
571 Matchers.argThat(listContainsValue("service-instance-57"))))
573 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
576 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
577 Matchers.argThat(listContainsValue("service-instance-53"))))
579 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
582 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
583 Matchers.argThat(listContainsValue("service-instance-58"))))
585 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
588 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
589 Matchers.argThat(listContainsValue("service-instance-51"))))
591 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
594 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
595 Matchers.argThat(listContainsValue("service-instance-56"))))
597 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
603 .when(aaiAdapter.queryActiveInventoryWithRetries(
604 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
606 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
607 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
610 .when(aaiAdapter.queryActiveInventoryWithRetries(
611 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
613 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
614 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
617 .when(aaiAdapter.queryActiveInventoryWithRetries(
618 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
620 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
621 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
624 .when(aaiAdapter.queryActiveInventoryWithRetries(
625 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
627 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
628 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
631 .when(aaiAdapter.queryActiveInventoryWithRetries(
632 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
634 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
635 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
638 .when(aaiAdapter.queryActiveInventoryWithRetries(
639 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
641 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
642 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
645 .when(aaiAdapter.queryActiveInventoryWithRetries(
646 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
648 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
649 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
652 .when(aaiAdapter.queryActiveInventoryWithRetries(
653 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
655 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
656 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
659 .when(aaiAdapter.queryActiveInventoryWithRetries(
660 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
662 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
663 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
666 .when(aaiAdapter.queryActiveInventoryWithRetries(
667 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
669 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
670 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
680 .when(aaiAdapter.queryActiveInventoryWithRetries(
681 Matchers.contains("service-instance-59"), Mockito.anyString(),
683 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
684 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
687 .when(aaiAdapter.queryActiveInventoryWithRetries(
688 Matchers.contains("service-instance-54"), Mockito.anyString(),
690 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
691 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
694 .when(aaiAdapter.queryActiveInventoryWithRetries(
695 Matchers.contains("service-instance-55"), Mockito.anyString(),
697 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
698 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
701 .when(aaiAdapter.queryActiveInventoryWithRetries(
702 Matchers.contains("service-instance-50"), Mockito.anyString(),
704 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
705 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
708 .when(aaiAdapter.queryActiveInventoryWithRetries(
709 Matchers.contains("service-instance-52"), Mockito.anyString(),
711 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
712 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
715 .when(aaiAdapter.queryActiveInventoryWithRetries(
716 Matchers.contains("service-instance-57"), Mockito.anyString(),
718 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
719 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
722 .when(aaiAdapter.queryActiveInventoryWithRetries(
723 Matchers.contains("service-instance-53"), Mockito.anyString(),
725 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
726 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
729 .when(aaiAdapter.queryActiveInventoryWithRetries(
730 Matchers.contains("service-instance-58"), Mockito.anyString(),
732 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
733 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
736 .when(aaiAdapter.queryActiveInventoryWithRetries(
737 Matchers.contains("service-instance-51"), Mockito.anyString(),
739 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
740 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
743 .when(aaiAdapter.queryActiveInventoryWithRetries(
744 Matchers.contains("service-instance-56"), Mockito.anyString(),
746 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
747 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
755 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
756 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
757 "http://server.proxy:9200/myindex/mytype/doc2",
758 "http://server.proxy:9200/myindex/mytype/doc3");
761 * Our initial gets from elastic search should be record-not-found
763 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
764 .thenReturn(new OperationResult(404, null));
765 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
766 .thenReturn(new OperationResult(404, null));
767 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
768 .thenReturn(new OperationResult(404, null));
772 * Cause version conflict errors on every put to test retry flow
775 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
776 .thenReturn(new OperationResult(409, null));
778 OperationState syncState = cerSynchronizer.doSync();
779 assertEquals(OperationState.OK, syncState);
781 assertNotNull(cerSynchronizer.getStatReport(false));
782 assertNotNull(cerSynchronizer.getStatReport(true));
784 cerSynchronizer.clearCache();
785 cerSynchronizer.shutdown();
795 public void validateSmallSyncWithEntityMerges() throws Exception {
797 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
798 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
800 cerSynchronizer.setAaiAdapter(aaiAdapter);
801 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
803 String nodesQueryResponse = TestResourceLoader
804 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
806 OperationResult entitySelfLinks = new OperationResult();
808 entitySelfLinks.setResultCode(200);
809 entitySelfLinks.setResult(nodesQueryResponse);
811 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
812 .thenReturn(entitySelfLinks);
815 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
816 Mockito.anyString()))
818 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
821 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
822 Mockito.anyString()))
824 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
828 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
830 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
833 .when(aaiAdapter.queryActiveInventoryWithRetries(
834 Matchers.contains("service-subscription-2"), Mockito.anyString(),
836 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
837 "/sync/aai/service-subscription-service-subscription-2.json")));
840 .when(aaiAdapter.queryActiveInventoryWithRetries(
841 Matchers.contains("service-subscription-1"), Mockito.anyString(),
843 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
844 "/sync/aai/service-subscription-service-subscription-1.json")));
847 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
848 Mockito.anyString(), Mockito.anyInt()))
849 .thenReturn(new OperationResult(200, TestResourceLoader
850 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
853 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
854 Matchers.argThat(listContainsValue("service-instance-59"))))
855 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
858 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
859 Matchers.argThat(listContainsValue("service-instance-54"))))
861 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
864 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
865 Matchers.argThat(listContainsValue("service-instance-55"))))
867 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
870 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
871 Matchers.argThat(listContainsValue("service-instance-50"))))
873 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
876 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
877 Matchers.argThat(listContainsValue("service-instance-52"))))
879 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
882 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
883 Matchers.argThat(listContainsValue("service-instance-57"))))
885 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
888 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
889 Matchers.argThat(listContainsValue("service-instance-53"))))
891 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
894 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
895 Matchers.argThat(listContainsValue("service-instance-58"))))
897 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
900 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
901 Matchers.argThat(listContainsValue("service-instance-51"))))
903 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
906 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
907 Matchers.argThat(listContainsValue("service-instance-56"))))
909 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
915 .when(aaiAdapter.queryActiveInventoryWithRetries(
916 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
918 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
919 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
922 .when(aaiAdapter.queryActiveInventoryWithRetries(
923 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
925 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
926 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
929 .when(aaiAdapter.queryActiveInventoryWithRetries(
930 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
932 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
933 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
936 .when(aaiAdapter.queryActiveInventoryWithRetries(
937 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
939 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
940 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
943 .when(aaiAdapter.queryActiveInventoryWithRetries(
944 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
946 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
947 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
950 .when(aaiAdapter.queryActiveInventoryWithRetries(
951 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
953 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
954 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
957 .when(aaiAdapter.queryActiveInventoryWithRetries(
958 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
960 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
961 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
964 .when(aaiAdapter.queryActiveInventoryWithRetries(
965 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
967 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
968 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
971 .when(aaiAdapter.queryActiveInventoryWithRetries(
972 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
974 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
975 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
978 .when(aaiAdapter.queryActiveInventoryWithRetries(
979 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
981 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
982 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
985 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
986 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
987 "http://server.proxy:9200/myindex/mytype/doc2",
988 "http://server.proxy:9200/myindex/mytype/doc3");
991 * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update
993 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200,
994 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json")));
996 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200,
997 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json")));
999 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200,
1000 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json")));
1002 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200,
1003 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json")));
1005 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200,
1006 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json")));
1008 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1009 .thenReturn(new OperationResult(200, null));
1013 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1014 .thenReturn(new OperationResult(200, null));
1016 OperationState syncState = cerSynchronizer.doSync();
1017 assertEquals(OperationState.OK, syncState);
1019 assertNotNull(cerSynchronizer.getStatReport(false));
1020 assertNotNull(cerSynchronizer.getStatReport(true));
1022 cerSynchronizer.clearCache();
1023 cerSynchronizer.shutdown();