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.CrossEntityReferenceDescriptor;
22 import org.onap.aai.sparky.config.oxm.CrossEntityReference;
23 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
24 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
25 import org.onap.aai.sparky.config.oxm.SearchableEntityLookup;
26 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
27 import org.onap.aai.sparky.search.SearchServiceAdapter;
28 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
29 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
30 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
31 import org.onap.aai.sparky.sync.enumeration.OperationState;
32 import org.onap.aai.sparky.util.StringCollectionContainsMatcher;
33 import org.onap.aai.sparky.util.TestResourceLoader;
35 import com.fasterxml.jackson.databind.ObjectMapper;
37 public class CrossEntityReferenceSynchronizerTest {
39 private static ObjectMapper mapper = new ObjectMapper();
41 private CrossEntityReferenceSynchronizer cerSynchronizer;
43 private ElasticSearchSchemaConfig esSchemaConfig;
44 private NetworkStatisticsConfig aaiStatConfig;
45 private NetworkStatisticsConfig esStatConfig;
46 private OxmEntityLookup oxmEntityLookup;
47 private SearchableEntityLookup searchableEntityLookup;
48 private SearchServiceAdapter searchServiceAdapter;
49 private ActiveInventoryAdapter aaiAdapter;
50 private CrossEntityReferenceLookup cerLookup;
51 private RestEndpointConfig aaiRestEndPointConfig;
54 public void init() throws Exception {
56 esSchemaConfig = new ElasticSearchSchemaConfig();
57 esSchemaConfig.setIndexDocType("default");
58 esSchemaConfig.setIndexMappingsFileName(null);
59 esSchemaConfig.setIndexName("aggregation-index-name");
60 esSchemaConfig.setIndexSettingsFileName(null);
63 aaiStatConfig = new NetworkStatisticsConfig();
65 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
67 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
68 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
69 aaiStatConfig.setBytesHistogramNumBins(20);
70 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
72 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
73 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
74 aaiStatConfig.setQueueLengthHistogramNumBins(20);
75 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
77 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
78 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
79 aaiStatConfig.setTaskAgeHistogramNumBins(20);
80 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
82 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
83 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
84 aaiStatConfig.setResponseTimeHistogramNumBins(20);
85 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
87 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
88 aaiStatConfig.setTpsHistogramMaxYAxis(100);
89 aaiStatConfig.setTpsHistogramNumBins(20);
90 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
92 esStatConfig = new NetworkStatisticsConfig();
94 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
96 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
97 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
98 esStatConfig.setBytesHistogramNumBins(20);
99 esStatConfig.setBytesHistogramNumDecimalPoints(2);
101 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
102 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
103 esStatConfig.setQueueLengthHistogramNumBins(20);
104 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
106 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
107 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
108 esStatConfig.setTaskAgeHistogramNumBins(20);
109 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
111 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
112 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
113 esStatConfig.setResponseTimeHistogramNumBins(20);
114 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
116 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
117 esStatConfig.setTpsHistogramMaxYAxis(100);
118 esStatConfig.setTpsHistogramNumBins(20);
119 esStatConfig.setTpsHistogramNumDecimalPoints(2);
121 oxmEntityLookup = new OxmEntityLookup();
123 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
124 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
127 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
129 processors.add(oxmEntityLookup);
132 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
133 new HashMap<String, OxmEntityDescriptor>();
135 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
136 genericVnfDescriptor.setEntityName("generic-vnf");
137 List<String> pkeyNames = new ArrayList<String>();
138 pkeyNames.add("vnf-name");
140 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
142 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
145 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
147 cerLookup = new CrossEntityReferenceLookup();
148 processors.add(cerLookup);
150 Map<String, CrossEntityReferenceDescriptor> crossReferenceEntityDescriptors =
151 new HashMap<String, CrossEntityReferenceDescriptor>();
153 CrossEntityReferenceDescriptor crossReferenceEntiDescriptor = new CrossEntityReferenceDescriptor();
154 CrossEntityReference crossEntityReference = new CrossEntityReference();
155 crossEntityReference.setTargetEntityType("service-instance");
156 List<String> refEntities = new ArrayList<String>();
157 refEntities.add("service-type");
158 crossEntityReference.setReferenceAttributes(refEntities);
160 List<String> crossEntityPkeyNames = new ArrayList<String>();
161 crossEntityPkeyNames.add("service-type");
162 crossReferenceEntiDescriptor.setPrimaryKeyAttributeNames(crossEntityPkeyNames);
164 crossReferenceEntiDescriptor.setCrossEntityReference(crossEntityReference);
165 crossReferenceEntiDescriptor.setEntityName("service-subscription");
166 crossReferenceEntityDescriptors.put("service-subscription", crossReferenceEntiDescriptor);
167 cerLookup.setCrossReferenceEntityDescriptors(crossReferenceEntityDescriptors);
169 searchableEntityLookup = new SearchableEntityLookup();
170 processors.add(searchableEntityLookup);
172 aaiRestEndPointConfig = new RestEndpointConfig();
173 aaiRestEndPointConfig.setNumRequestRetries(5);
175 Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig);
180 public void validateBasicConstruction() throws Exception {
182 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
183 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
185 cerSynchronizer.setAaiAdapter(aaiAdapter);
186 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
188 assertNotNull(cerSynchronizer.getAaiAdapter());
189 assertNotNull(cerSynchronizer.getSearchServiceAdapter());
193 private Matcher<List<String>> listContainsValue(String expectedValue) {
194 return new StringCollectionContainsMatcher(expectedValue);
198 public void validateSmallSync() throws Exception {
200 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
201 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
203 cerSynchronizer.setAaiAdapter(aaiAdapter);
204 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
206 String nodesQueryResponse = TestResourceLoader
207 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
209 OperationResult entitySelfLinks = new OperationResult();
211 entitySelfLinks.setResultCode(200);
212 entitySelfLinks.setResult(nodesQueryResponse);
214 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
215 .thenReturn(entitySelfLinks);
218 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
219 Mockito.anyString()))
221 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
224 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
225 Mockito.anyString()))
227 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
231 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
233 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
236 .when(aaiAdapter.queryActiveInventoryWithRetries(
237 Matchers.contains("service-subscription-2"), Mockito.anyString(),
238 Mockito.anyInt(),Mockito.anyString()))
239 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
240 "/sync/aai/service-subscription-service-subscription-2.json")));
243 .when(aaiAdapter.queryActiveInventoryWithRetries(
244 Matchers.contains("service-subscription-1"), Mockito.anyString(),
245 Mockito.anyInt(),Mockito.anyString()))
246 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
247 "/sync/aai/service-subscription-service-subscription-1.json")));
250 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
251 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
252 .thenReturn(new OperationResult(200, TestResourceLoader
253 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
256 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
257 Matchers.argThat(listContainsValue("service-instance-59"))))
258 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
261 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
262 Matchers.argThat(listContainsValue("service-instance-54"))))
264 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
267 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
268 Matchers.argThat(listContainsValue("service-instance-55"))))
270 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
273 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
274 Matchers.argThat(listContainsValue("service-instance-50"))))
276 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
279 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
280 Matchers.argThat(listContainsValue("service-instance-52"))))
282 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
285 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
286 Matchers.argThat(listContainsValue("service-instance-57"))))
288 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
291 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
292 Matchers.argThat(listContainsValue("service-instance-53"))))
294 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
297 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
298 Matchers.argThat(listContainsValue("service-instance-58"))))
300 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
303 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
304 Matchers.argThat(listContainsValue("service-instance-51"))))
306 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
309 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
310 Matchers.argThat(listContainsValue("service-instance-56"))))
312 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
318 .when(aaiAdapter.queryActiveInventoryWithRetries(
319 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
320 Mockito.anyInt(),Mockito.anyString()))
321 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
322 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
325 .when(aaiAdapter.queryActiveInventoryWithRetries(
326 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
327 Mockito.anyInt(),Mockito.anyString()))
328 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
329 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
332 .when(aaiAdapter.queryActiveInventoryWithRetries(
333 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
334 Mockito.anyInt(),Mockito.anyString()))
335 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
336 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
339 .when(aaiAdapter.queryActiveInventoryWithRetries(
340 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
341 Mockito.anyInt(),Mockito.anyString()))
342 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
343 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
346 .when(aaiAdapter.queryActiveInventoryWithRetries(
347 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
348 Mockito.anyInt(),Mockito.anyString()))
349 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
350 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
353 .when(aaiAdapter.queryActiveInventoryWithRetries(
354 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
355 Mockito.anyInt(),Mockito.anyString()))
356 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
357 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
360 .when(aaiAdapter.queryActiveInventoryWithRetries(
361 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
362 Mockito.anyInt(),Mockito.anyString()))
363 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
364 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
367 .when(aaiAdapter.queryActiveInventoryWithRetries(
368 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
369 Mockito.anyInt(),Mockito.anyString()))
370 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
371 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
374 .when(aaiAdapter.queryActiveInventoryWithRetries(
375 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
376 Mockito.anyInt(),Mockito.anyString()))
377 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
378 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
381 .when(aaiAdapter.queryActiveInventoryWithRetries(
382 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
383 Mockito.anyInt(),Mockito.anyString()))
384 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
385 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
395 .when(aaiAdapter.queryActiveInventoryWithRetries(
396 Matchers.contains("service-instance-59"), Mockito.anyString(),
398 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
399 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
402 .when(aaiAdapter.queryActiveInventoryWithRetries(
403 Matchers.contains("service-instance-54"), Mockito.anyString(),
405 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
406 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
409 .when(aaiAdapter.queryActiveInventoryWithRetries(
410 Matchers.contains("service-instance-55"), Mockito.anyString(),
412 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
413 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
416 .when(aaiAdapter.queryActiveInventoryWithRetries(
417 Matchers.contains("service-instance-50"), Mockito.anyString(),
419 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
420 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
423 .when(aaiAdapter.queryActiveInventoryWithRetries(
424 Matchers.contains("service-instance-52"), Mockito.anyString(),
426 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
427 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
430 .when(aaiAdapter.queryActiveInventoryWithRetries(
431 Matchers.contains("service-instance-57"), Mockito.anyString(),
433 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
434 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
437 .when(aaiAdapter.queryActiveInventoryWithRetries(
438 Matchers.contains("service-instance-53"), Mockito.anyString(),
440 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
441 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
444 .when(aaiAdapter.queryActiveInventoryWithRetries(
445 Matchers.contains("service-instance-58"), Mockito.anyString(),
447 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
448 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
451 .when(aaiAdapter.queryActiveInventoryWithRetries(
452 Matchers.contains("service-instance-51"), Mockito.anyString(),
454 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
455 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
458 .when(aaiAdapter.queryActiveInventoryWithRetries(
459 Matchers.contains("service-instance-56"), Mockito.anyString(),
461 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
462 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
470 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
471 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
472 "http://server.proxy:9200/myindex/mytype/doc2",
473 "http://server.proxy:9200/myindex/mytype/doc3");
476 * Our initial gets from elastic search should be record-not-found
478 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
479 .thenReturn(new OperationResult(404, null));
480 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
481 .thenReturn(new OperationResult(404, null));
482 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
483 .thenReturn(new OperationResult(404, null));
486 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
487 .thenReturn(new OperationResult(200, null));
489 OperationState syncState = cerSynchronizer.doSync();
490 assertEquals(OperationState.OK, syncState);
492 assertNotNull(cerSynchronizer.getStatReport(false));
493 assertNotNull(cerSynchronizer.getStatReport(true));
495 cerSynchronizer.clearCache();
496 cerSynchronizer.shutdown();
502 public void validateSmallSyncWithRetries() throws Exception {
504 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
505 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
507 cerSynchronizer.setAaiAdapter(aaiAdapter);
508 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
510 String nodesQueryResponse = TestResourceLoader
511 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
513 OperationResult entitySelfLinks = new OperationResult();
515 entitySelfLinks.setResultCode(200);
516 entitySelfLinks.setResult(nodesQueryResponse);
518 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
519 .thenReturn(entitySelfLinks);
522 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
523 Mockito.anyString()))
525 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
528 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
529 Mockito.anyString()))
531 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
535 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
537 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
540 .when(aaiAdapter.queryActiveInventoryWithRetries(
541 Matchers.contains("service-subscription-2"), Mockito.anyString(),
542 Mockito.anyInt(),Mockito.anyString()))
543 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
544 "/sync/aai/service-subscription-service-subscription-2.json")));
547 .when(aaiAdapter.queryActiveInventoryWithRetries(
548 Matchers.contains("service-subscription-1"), Mockito.anyString(),
549 Mockito.anyInt(),Mockito.anyString()))
550 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
551 "/sync/aai/service-subscription-service-subscription-1.json")));
554 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
555 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
556 .thenReturn(new OperationResult(200, TestResourceLoader
557 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
560 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
561 Matchers.argThat(listContainsValue("service-instance-59"))))
562 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
565 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
566 Matchers.argThat(listContainsValue("service-instance-54"))))
568 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
571 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
572 Matchers.argThat(listContainsValue("service-instance-55"))))
574 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
577 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
578 Matchers.argThat(listContainsValue("service-instance-50"))))
580 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
583 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
584 Matchers.argThat(listContainsValue("service-instance-52"))))
586 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
589 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
590 Matchers.argThat(listContainsValue("service-instance-57"))))
592 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
595 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
596 Matchers.argThat(listContainsValue("service-instance-53"))))
598 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
601 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
602 Matchers.argThat(listContainsValue("service-instance-58"))))
604 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
607 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
608 Matchers.argThat(listContainsValue("service-instance-51"))))
610 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
613 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
614 Matchers.argThat(listContainsValue("service-instance-56"))))
616 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
622 .when(aaiAdapter.queryActiveInventoryWithRetries(
623 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
624 Mockito.anyInt(),Mockito.anyString()))
625 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
626 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
629 .when(aaiAdapter.queryActiveInventoryWithRetries(
630 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
631 Mockito.anyInt(),Mockito.anyString()))
632 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
633 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
636 .when(aaiAdapter.queryActiveInventoryWithRetries(
637 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
638 Mockito.anyInt(),Mockito.anyString()))
639 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
640 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
643 .when(aaiAdapter.queryActiveInventoryWithRetries(
644 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
645 Mockito.anyInt(),Mockito.anyString()))
646 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
647 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
650 .when(aaiAdapter.queryActiveInventoryWithRetries(
651 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
652 Mockito.anyInt(),Mockito.anyString()))
653 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
654 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
657 .when(aaiAdapter.queryActiveInventoryWithRetries(
658 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
659 Mockito.anyInt(),Mockito.anyString()))
660 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
661 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
664 .when(aaiAdapter.queryActiveInventoryWithRetries(
665 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
666 Mockito.anyInt(),Mockito.anyString()))
667 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
668 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
671 .when(aaiAdapter.queryActiveInventoryWithRetries(
672 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
673 Mockito.anyInt(),Mockito.anyString()))
674 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
675 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
678 .when(aaiAdapter.queryActiveInventoryWithRetries(
679 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
680 Mockito.anyInt(),Mockito.anyString()))
681 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
682 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
685 .when(aaiAdapter.queryActiveInventoryWithRetries(
686 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
687 Mockito.anyInt(),Mockito.anyString()))
688 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
689 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
699 .when(aaiAdapter.queryActiveInventoryWithRetries(
700 Matchers.contains("service-instance-59"), Mockito.anyString(),
702 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
703 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
706 .when(aaiAdapter.queryActiveInventoryWithRetries(
707 Matchers.contains("service-instance-54"), Mockito.anyString(),
709 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
710 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
713 .when(aaiAdapter.queryActiveInventoryWithRetries(
714 Matchers.contains("service-instance-55"), Mockito.anyString(),
716 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
717 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
720 .when(aaiAdapter.queryActiveInventoryWithRetries(
721 Matchers.contains("service-instance-50"), Mockito.anyString(),
723 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
724 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
727 .when(aaiAdapter.queryActiveInventoryWithRetries(
728 Matchers.contains("service-instance-52"), Mockito.anyString(),
730 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
731 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
734 .when(aaiAdapter.queryActiveInventoryWithRetries(
735 Matchers.contains("service-instance-57"), Mockito.anyString(),
737 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
738 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
741 .when(aaiAdapter.queryActiveInventoryWithRetries(
742 Matchers.contains("service-instance-53"), Mockito.anyString(),
744 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
745 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
748 .when(aaiAdapter.queryActiveInventoryWithRetries(
749 Matchers.contains("service-instance-58"), Mockito.anyString(),
751 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
752 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
755 .when(aaiAdapter.queryActiveInventoryWithRetries(
756 Matchers.contains("service-instance-51"), Mockito.anyString(),
758 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
759 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
762 .when(aaiAdapter.queryActiveInventoryWithRetries(
763 Matchers.contains("service-instance-56"), Mockito.anyString(),
765 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
766 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
774 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
775 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
776 "http://server.proxy:9200/myindex/mytype/doc2",
777 "http://server.proxy:9200/myindex/mytype/doc3");
780 * Our initial gets from elastic search should be record-not-found
782 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
783 .thenReturn(new OperationResult(404, null));
784 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
785 .thenReturn(new OperationResult(404, null));
786 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
787 .thenReturn(new OperationResult(404, null));
791 * Cause version conflict errors on every put to test retry flow
794 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
795 .thenReturn(new OperationResult(409, null));
797 OperationState syncState = cerSynchronizer.doSync();
798 assertEquals(OperationState.OK, syncState);
800 assertNotNull(cerSynchronizer.getStatReport(false));
801 assertNotNull(cerSynchronizer.getStatReport(true));
803 cerSynchronizer.clearCache();
804 cerSynchronizer.shutdown();
814 public void validateSmallSyncWithEntityMerges() throws Exception {
816 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
817 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
819 cerSynchronizer.setAaiAdapter(aaiAdapter);
820 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
822 String nodesQueryResponse = TestResourceLoader
823 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
825 OperationResult entitySelfLinks = new OperationResult();
827 entitySelfLinks.setResultCode(200);
828 entitySelfLinks.setResult(nodesQueryResponse);
830 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
831 .thenReturn(entitySelfLinks);
834 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
835 Mockito.anyString()))
837 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
840 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
841 Mockito.anyString()))
843 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
847 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
849 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
852 .when(aaiAdapter.queryActiveInventoryWithRetries(
853 Matchers.contains("service-subscription-2"), Mockito.anyString(),
854 Mockito.anyInt(),Mockito.anyString()))
855 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
856 "/sync/aai/service-subscription-service-subscription-2.json")));
859 .when(aaiAdapter.queryActiveInventoryWithRetries(
860 Matchers.contains("service-subscription-1"), Mockito.anyString(),
861 Mockito.anyInt(),Mockito.anyString()))
862 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
863 "/sync/aai/service-subscription-service-subscription-1.json")));
866 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
867 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
868 .thenReturn(new OperationResult(200, TestResourceLoader
869 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
872 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
873 Matchers.argThat(listContainsValue("service-instance-59"))))
874 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
877 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
878 Matchers.argThat(listContainsValue("service-instance-54"))))
880 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
883 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
884 Matchers.argThat(listContainsValue("service-instance-55"))))
886 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
889 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
890 Matchers.argThat(listContainsValue("service-instance-50"))))
892 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
895 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
896 Matchers.argThat(listContainsValue("service-instance-52"))))
898 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
901 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
902 Matchers.argThat(listContainsValue("service-instance-57"))))
904 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
907 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
908 Matchers.argThat(listContainsValue("service-instance-53"))))
910 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
913 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
914 Matchers.argThat(listContainsValue("service-instance-58"))))
916 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
919 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
920 Matchers.argThat(listContainsValue("service-instance-51"))))
922 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
925 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
926 Matchers.argThat(listContainsValue("service-instance-56"))))
928 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
934 .when(aaiAdapter.queryActiveInventoryWithRetries(
935 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
936 Mockito.anyInt(),Mockito.anyString()))
937 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
938 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
941 .when(aaiAdapter.queryActiveInventoryWithRetries(
942 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
943 Mockito.anyInt(),Mockito.anyString()))
944 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
945 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
948 .when(aaiAdapter.queryActiveInventoryWithRetries(
949 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
950 Mockito.anyInt(),Mockito.anyString()))
951 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
952 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
955 .when(aaiAdapter.queryActiveInventoryWithRetries(
956 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
957 Mockito.anyInt(),Mockito.anyString()))
958 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
959 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
962 .when(aaiAdapter.queryActiveInventoryWithRetries(
963 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
964 Mockito.anyInt(),Mockito.anyString()))
965 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
966 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
969 .when(aaiAdapter.queryActiveInventoryWithRetries(
970 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
971 Mockito.anyInt(),Mockito.anyString()))
972 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
973 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
976 .when(aaiAdapter.queryActiveInventoryWithRetries(
977 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
978 Mockito.anyInt(),Mockito.anyString()))
979 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
980 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
983 .when(aaiAdapter.queryActiveInventoryWithRetries(
984 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
985 Mockito.anyInt(),Mockito.anyString()))
986 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
987 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
990 .when(aaiAdapter.queryActiveInventoryWithRetries(
991 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
992 Mockito.anyInt(),Mockito.anyString()))
993 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
994 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
997 .when(aaiAdapter.queryActiveInventoryWithRetries(
998 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
999 Mockito.anyInt(),Mockito.anyString()))
1000 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1001 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
1004 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
1005 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
1006 "http://server.proxy:9200/myindex/mytype/doc2",
1007 "http://server.proxy:9200/myindex/mytype/doc3");
1010 * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update
1012 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200,
1013 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json")));
1015 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200,
1016 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json")));
1018 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200,
1019 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json")));
1021 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200,
1022 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json")));
1024 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200,
1025 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json")));
1027 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1028 .thenReturn(new OperationResult(200, null));
1032 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1033 .thenReturn(new OperationResult(200, null));
1035 OperationState syncState = cerSynchronizer.doSync();
1036 assertEquals(OperationState.OK, syncState);
1038 assertNotNull(cerSynchronizer.getStatReport(false));
1039 assertNotNull(cerSynchronizer.getStatReport(true));
1041 cerSynchronizer.clearCache();
1042 cerSynchronizer.shutdown();