2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved.
6 * Copyright © 2017-2018 Amdocs
7 * ================================================================================
8 * Licensed under the Apache License, Version 2.0 (the "License");
9 * you may not use this file except in compliance with the License.
10 * You may obtain a copy of the License at
12 * http://www.apache.org/licenses/LICENSE-2.0
14 * Unless required by applicable law or agreed to in writing, software
15 * distributed under the License is distributed on an "AS IS" BASIS,
16 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17 * See the License for the specific language governing permissions and
18 * limitations under the License.
19 * ============LICENSE_END=========================================================
22 package org.onap.aai.sparky.crossentityreference.sync;
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
34 import org.hamcrest.Matcher;
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.mockito.ArgumentMatcher;
38 import org.mockito.Matchers;
39 import org.mockito.Mockito;
40 import org.onap.aai.restclient.client.OperationResult;
41 import org.onap.aai.sparky.config.oxm.CrossEntityReferenceLookup;
42 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
43 import org.onap.aai.sparky.config.oxm.CrossEntityReferenceDescriptor;
44 import org.onap.aai.sparky.config.oxm.CrossEntityReference;
45 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
46 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
47 import org.onap.aai.sparky.config.oxm.SearchableEntityLookup;
48 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
49 import org.onap.aai.sparky.search.SearchServiceAdapter;
50 import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig;
51 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
52 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
53 import org.onap.aai.sparky.sync.enumeration.OperationState;
54 import org.onap.aai.sparky.util.StringCollectionContainsMatcher;
55 import org.onap.aai.sparky.util.TestResourceLoader;
57 import com.fasterxml.jackson.databind.ObjectMapper;
59 public class CrossEntityReferenceSynchronizerTest {
61 private static ObjectMapper mapper = new ObjectMapper();
63 private CrossEntityReferenceSynchronizer cerSynchronizer;
65 private ElasticSearchSchemaConfig esSchemaConfig;
66 private NetworkStatisticsConfig aaiStatConfig;
67 private NetworkStatisticsConfig esStatConfig;
68 private OxmEntityLookup oxmEntityLookup;
69 private SearchableEntityLookup searchableEntityLookup;
70 private SearchServiceAdapter searchServiceAdapter;
71 private ActiveInventoryAdapter aaiAdapter;
72 private CrossEntityReferenceLookup cerLookup;
73 private RestEndpointConfig aaiRestEndPointConfig;
76 public void init() throws Exception {
78 esSchemaConfig = new ElasticSearchSchemaConfig();
79 esSchemaConfig.setIndexDocType("default");
80 esSchemaConfig.setIndexMappingsFileName(null);
81 esSchemaConfig.setIndexName("aggregation-index-name");
82 esSchemaConfig.setIndexSettingsFileName(null);
85 aaiStatConfig = new NetworkStatisticsConfig();
87 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
89 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
90 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
91 aaiStatConfig.setBytesHistogramNumBins(20);
92 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
94 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
95 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
96 aaiStatConfig.setQueueLengthHistogramNumBins(20);
97 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
99 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
100 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
101 aaiStatConfig.setTaskAgeHistogramNumBins(20);
102 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
104 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
105 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
106 aaiStatConfig.setResponseTimeHistogramNumBins(20);
107 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
109 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
110 aaiStatConfig.setTpsHistogramMaxYAxis(100);
111 aaiStatConfig.setTpsHistogramNumBins(20);
112 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
114 esStatConfig = new NetworkStatisticsConfig();
116 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
118 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
119 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
120 esStatConfig.setBytesHistogramNumBins(20);
121 esStatConfig.setBytesHistogramNumDecimalPoints(2);
123 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
124 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
125 esStatConfig.setQueueLengthHistogramNumBins(20);
126 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
128 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
129 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
130 esStatConfig.setTaskAgeHistogramNumBins(20);
131 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
133 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
134 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
135 esStatConfig.setResponseTimeHistogramNumBins(20);
136 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
138 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
139 esStatConfig.setTpsHistogramMaxYAxis(100);
140 esStatConfig.setTpsHistogramNumBins(20);
141 esStatConfig.setTpsHistogramNumDecimalPoints(2);
143 oxmEntityLookup = new OxmEntityLookup();
145 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
146 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
149 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
151 processors.add(oxmEntityLookup);
154 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
155 new HashMap<String, OxmEntityDescriptor>();
157 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
158 genericVnfDescriptor.setEntityName("generic-vnf");
159 List<String> pkeyNames = new ArrayList<String>();
160 pkeyNames.add("vnf-name");
162 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
164 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
167 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
169 cerLookup = new CrossEntityReferenceLookup();
170 processors.add(cerLookup);
172 Map<String, CrossEntityReferenceDescriptor> crossReferenceEntityDescriptors =
173 new HashMap<String, CrossEntityReferenceDescriptor>();
175 CrossEntityReferenceDescriptor crossReferenceEntiDescriptor = new CrossEntityReferenceDescriptor();
176 CrossEntityReference crossEntityReference = new CrossEntityReference();
177 crossEntityReference.setTargetEntityType("service-instance");
178 List<String> refEntities = new ArrayList<String>();
179 refEntities.add("service-type");
180 crossEntityReference.setReferenceAttributes(refEntities);
182 List<String> crossEntityPkeyNames = new ArrayList<String>();
183 crossEntityPkeyNames.add("service-type");
184 crossReferenceEntiDescriptor.setPrimaryKeyAttributeNames(crossEntityPkeyNames);
186 crossReferenceEntiDescriptor.setCrossEntityReference(crossEntityReference);
187 crossReferenceEntiDescriptor.setEntityName("service-subscription");
188 crossReferenceEntityDescriptors.put("service-subscription", crossReferenceEntiDescriptor);
189 cerLookup.setCrossReferenceEntityDescriptors(crossReferenceEntityDescriptors);
191 searchableEntityLookup = new SearchableEntityLookup();
192 processors.add(searchableEntityLookup);
194 aaiRestEndPointConfig = new RestEndpointConfig();
195 aaiRestEndPointConfig.setNumRequestRetries(5);
197 Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig);
202 public void validateBasicConstruction() throws Exception {
204 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
205 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
207 cerSynchronizer.setAaiAdapter(aaiAdapter);
208 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
210 assertNotNull(cerSynchronizer.getAaiAdapter());
211 assertNotNull(cerSynchronizer.getSearchServiceAdapter());
215 private ArgumentMatcher<List<String>> listContainsValue(String expectedValue) {
216 return new StringCollectionContainsMatcher(expectedValue);
220 public void validateSmallSync() throws Exception {
222 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
223 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
225 cerSynchronizer.setAaiAdapter(aaiAdapter);
226 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
228 String nodesQueryResponse = TestResourceLoader
229 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
231 OperationResult entitySelfLinks = new OperationResult();
233 entitySelfLinks.setResultCode(200);
234 entitySelfLinks.setResult(nodesQueryResponse);
236 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
237 .thenReturn(entitySelfLinks);
240 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
241 Mockito.anyString()))
243 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
246 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
247 Mockito.anyString()))
249 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
253 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
255 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
258 .when(aaiAdapter.queryActiveInventoryWithRetries(
259 Matchers.contains("service-subscription-2"), Mockito.anyString(),
260 Mockito.anyInt(),Mockito.anyString()))
261 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
262 "/sync/aai/service-subscription-service-subscription-2.json")));
265 .when(aaiAdapter.queryActiveInventoryWithRetries(
266 Matchers.contains("service-subscription-1"), Mockito.anyString(),
267 Mockito.anyInt(),Mockito.anyString()))
268 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
269 "/sync/aai/service-subscription-service-subscription-1.json")));
272 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
273 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
274 .thenReturn(new OperationResult(200, TestResourceLoader
275 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
278 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
279 Matchers.argThat(listContainsValue("service-instance-59"))))
280 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
283 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
284 Matchers.argThat(listContainsValue("service-instance-54"))))
286 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
289 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
290 Matchers.argThat(listContainsValue("service-instance-55"))))
292 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
295 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
296 Matchers.argThat(listContainsValue("service-instance-50"))))
298 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
301 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
302 Matchers.argThat(listContainsValue("service-instance-52"))))
304 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
307 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
308 Matchers.argThat(listContainsValue("service-instance-57"))))
310 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
313 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
314 Matchers.argThat(listContainsValue("service-instance-53"))))
316 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
319 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
320 Matchers.argThat(listContainsValue("service-instance-58"))))
322 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
325 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
326 Matchers.argThat(listContainsValue("service-instance-51"))))
328 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
331 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
332 Matchers.argThat(listContainsValue("service-instance-56"))))
334 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
340 .when(aaiAdapter.queryActiveInventoryWithRetries(
341 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
342 Mockito.anyInt(),Mockito.anyString()))
343 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
344 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
347 .when(aaiAdapter.queryActiveInventoryWithRetries(
348 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
349 Mockito.anyInt(),Mockito.anyString()))
350 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
351 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
354 .when(aaiAdapter.queryActiveInventoryWithRetries(
355 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
356 Mockito.anyInt(),Mockito.anyString()))
357 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
358 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
361 .when(aaiAdapter.queryActiveInventoryWithRetries(
362 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
363 Mockito.anyInt(),Mockito.anyString()))
364 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
365 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
368 .when(aaiAdapter.queryActiveInventoryWithRetries(
369 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
370 Mockito.anyInt(),Mockito.anyString()))
371 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
372 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
375 .when(aaiAdapter.queryActiveInventoryWithRetries(
376 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
377 Mockito.anyInt(),Mockito.anyString()))
378 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
379 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
382 .when(aaiAdapter.queryActiveInventoryWithRetries(
383 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
384 Mockito.anyInt(),Mockito.anyString()))
385 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
386 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
389 .when(aaiAdapter.queryActiveInventoryWithRetries(
390 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
391 Mockito.anyInt(),Mockito.anyString()))
392 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
393 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
396 .when(aaiAdapter.queryActiveInventoryWithRetries(
397 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
398 Mockito.anyInt(),Mockito.anyString()))
399 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
400 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
403 .when(aaiAdapter.queryActiveInventoryWithRetries(
404 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
405 Mockito.anyInt(),Mockito.anyString()))
406 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
407 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
417 .when(aaiAdapter.queryActiveInventoryWithRetries(
418 Matchers.contains("service-instance-59"), Mockito.anyString(),
420 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
421 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
424 .when(aaiAdapter.queryActiveInventoryWithRetries(
425 Matchers.contains("service-instance-54"), Mockito.anyString(),
427 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
428 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
431 .when(aaiAdapter.queryActiveInventoryWithRetries(
432 Matchers.contains("service-instance-55"), Mockito.anyString(),
434 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
435 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
438 .when(aaiAdapter.queryActiveInventoryWithRetries(
439 Matchers.contains("service-instance-50"), Mockito.anyString(),
441 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
442 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
445 .when(aaiAdapter.queryActiveInventoryWithRetries(
446 Matchers.contains("service-instance-52"), Mockito.anyString(),
448 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
449 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
452 .when(aaiAdapter.queryActiveInventoryWithRetries(
453 Matchers.contains("service-instance-57"), Mockito.anyString(),
455 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
456 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
459 .when(aaiAdapter.queryActiveInventoryWithRetries(
460 Matchers.contains("service-instance-53"), Mockito.anyString(),
462 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
463 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
466 .when(aaiAdapter.queryActiveInventoryWithRetries(
467 Matchers.contains("service-instance-58"), Mockito.anyString(),
469 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
470 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
473 .when(aaiAdapter.queryActiveInventoryWithRetries(
474 Matchers.contains("service-instance-51"), Mockito.anyString(),
476 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
477 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
480 .when(aaiAdapter.queryActiveInventoryWithRetries(
481 Matchers.contains("service-instance-56"), Mockito.anyString(),
483 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
484 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
492 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
493 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
494 "http://server.proxy:9200/myindex/mytype/doc2",
495 "http://server.proxy:9200/myindex/mytype/doc3");
498 * Our initial gets from elastic search should be record-not-found
500 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
501 .thenReturn(new OperationResult(404, null));
502 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
503 .thenReturn(new OperationResult(404, null));
504 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
505 .thenReturn(new OperationResult(404, null));
508 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
509 .thenReturn(new OperationResult(200, null));
511 OperationState syncState = cerSynchronizer.doSync();
512 assertEquals(OperationState.OK, syncState);
514 assertNotNull(cerSynchronizer.getStatReport(false));
515 assertNotNull(cerSynchronizer.getStatReport(true));
517 cerSynchronizer.clearCache();
518 cerSynchronizer.shutdown();
524 public void validateSmallSyncWithRetries() throws Exception {
526 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
527 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
529 cerSynchronizer.setAaiAdapter(aaiAdapter);
530 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
532 String nodesQueryResponse = TestResourceLoader
533 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
535 OperationResult entitySelfLinks = new OperationResult();
537 entitySelfLinks.setResultCode(200);
538 entitySelfLinks.setResult(nodesQueryResponse);
540 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
541 .thenReturn(entitySelfLinks);
544 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
545 Mockito.anyString()))
547 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
550 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
551 Mockito.anyString()))
553 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
557 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
559 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
562 .when(aaiAdapter.queryActiveInventoryWithRetries(
563 Matchers.contains("service-subscription-2"), Mockito.anyString(),
564 Mockito.anyInt(),Mockito.anyString()))
565 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
566 "/sync/aai/service-subscription-service-subscription-2.json")));
569 .when(aaiAdapter.queryActiveInventoryWithRetries(
570 Matchers.contains("service-subscription-1"), Mockito.anyString(),
571 Mockito.anyInt(),Mockito.anyString()))
572 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
573 "/sync/aai/service-subscription-service-subscription-1.json")));
576 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
577 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
578 .thenReturn(new OperationResult(200, TestResourceLoader
579 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
582 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
583 Matchers.argThat(listContainsValue("service-instance-59"))))
584 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
587 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
588 Matchers.argThat(listContainsValue("service-instance-54"))))
590 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
593 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
594 Matchers.argThat(listContainsValue("service-instance-55"))))
596 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
599 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
600 Matchers.argThat(listContainsValue("service-instance-50"))))
602 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
605 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
606 Matchers.argThat(listContainsValue("service-instance-52"))))
608 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
611 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
612 Matchers.argThat(listContainsValue("service-instance-57"))))
614 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
617 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
618 Matchers.argThat(listContainsValue("service-instance-53"))))
620 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
623 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
624 Matchers.argThat(listContainsValue("service-instance-58"))))
626 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
629 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
630 Matchers.argThat(listContainsValue("service-instance-51"))))
632 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
635 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
636 Matchers.argThat(listContainsValue("service-instance-56"))))
638 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
644 .when(aaiAdapter.queryActiveInventoryWithRetries(
645 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
646 Mockito.anyInt(),Mockito.anyString()))
647 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
648 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
651 .when(aaiAdapter.queryActiveInventoryWithRetries(
652 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
653 Mockito.anyInt(),Mockito.anyString()))
654 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
655 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
658 .when(aaiAdapter.queryActiveInventoryWithRetries(
659 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
660 Mockito.anyInt(),Mockito.anyString()))
661 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
662 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
665 .when(aaiAdapter.queryActiveInventoryWithRetries(
666 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
667 Mockito.anyInt(),Mockito.anyString()))
668 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
669 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
672 .when(aaiAdapter.queryActiveInventoryWithRetries(
673 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
674 Mockito.anyInt(),Mockito.anyString()))
675 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
676 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
679 .when(aaiAdapter.queryActiveInventoryWithRetries(
680 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
681 Mockito.anyInt(),Mockito.anyString()))
682 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
683 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
686 .when(aaiAdapter.queryActiveInventoryWithRetries(
687 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
688 Mockito.anyInt(),Mockito.anyString()))
689 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
690 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
693 .when(aaiAdapter.queryActiveInventoryWithRetries(
694 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
695 Mockito.anyInt(),Mockito.anyString()))
696 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
697 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
700 .when(aaiAdapter.queryActiveInventoryWithRetries(
701 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
702 Mockito.anyInt(),Mockito.anyString()))
703 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
704 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
707 .when(aaiAdapter.queryActiveInventoryWithRetries(
708 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
709 Mockito.anyInt(),Mockito.anyString()))
710 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
711 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
721 .when(aaiAdapter.queryActiveInventoryWithRetries(
722 Matchers.contains("service-instance-59"), Mockito.anyString(),
724 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
725 "/sync/aai/aai-resources/service-instance/service-instance-59.json")));
728 .when(aaiAdapter.queryActiveInventoryWithRetries(
729 Matchers.contains("service-instance-54"), Mockito.anyString(),
731 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
732 "/sync/aai/aai-resources/service-instance/service-instance-54.json")));
735 .when(aaiAdapter.queryActiveInventoryWithRetries(
736 Matchers.contains("service-instance-55"), Mockito.anyString(),
738 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
739 "/sync/aai/aai-resources/service-instance/service-instance-55.json")));
742 .when(aaiAdapter.queryActiveInventoryWithRetries(
743 Matchers.contains("service-instance-50"), Mockito.anyString(),
745 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
746 "/sync/aai/aai-resources/service-instance/service-instance-50.json")));
749 .when(aaiAdapter.queryActiveInventoryWithRetries(
750 Matchers.contains("service-instance-52"), Mockito.anyString(),
752 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
753 "/sync/aai/aai-resources/service-instance/service-instance-52.json")));
756 .when(aaiAdapter.queryActiveInventoryWithRetries(
757 Matchers.contains("service-instance-57"), Mockito.anyString(),
759 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
760 "/sync/aai/aai-resources/service-instance/service-instance-57.json")));
763 .when(aaiAdapter.queryActiveInventoryWithRetries(
764 Matchers.contains("service-instance-53"), Mockito.anyString(),
766 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
767 "/sync/aai/aai-resources/service-instance/service-instance-53.json")));
770 .when(aaiAdapter.queryActiveInventoryWithRetries(
771 Matchers.contains("service-instance-58"), Mockito.anyString(),
773 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
774 "/sync/aai/aai-resources/service-instance/service-instance-58.json")));
777 .when(aaiAdapter.queryActiveInventoryWithRetries(
778 Matchers.contains("service-instance-51"), Mockito.anyString(),
780 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
781 "/sync/aai/aai-resources/service-instance/service-instance-51.json")));
784 .when(aaiAdapter.queryActiveInventoryWithRetries(
785 Matchers.contains("service-instance-56"), Mockito.anyString(),
787 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
788 "/sync/aai/aai-resources/service-instance/service-instance-56.json")));
796 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
797 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
798 "http://server.proxy:9200/myindex/mytype/doc2",
799 "http://server.proxy:9200/myindex/mytype/doc3");
802 * Our initial gets from elastic search should be record-not-found
804 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
805 .thenReturn(new OperationResult(404, null));
806 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
807 .thenReturn(new OperationResult(404, null));
808 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
809 .thenReturn(new OperationResult(404, null));
813 * Cause version conflict errors on every put to test retry flow
816 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
817 .thenReturn(new OperationResult(409, null));
819 OperationState syncState = cerSynchronizer.doSync();
820 assertEquals(OperationState.OK, syncState);
822 assertNotNull(cerSynchronizer.getStatReport(false));
823 assertNotNull(cerSynchronizer.getStatReport(true));
825 cerSynchronizer.clearCache();
826 cerSynchronizer.shutdown();
836 public void validateSmallSyncWithEntityMerges() throws Exception {
838 cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
839 esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup);
841 cerSynchronizer.setAaiAdapter(aaiAdapter);
842 cerSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
844 String nodesQueryResponse = TestResourceLoader
845 .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json");
847 OperationResult entitySelfLinks = new OperationResult();
849 entitySelfLinks.setResultCode(200);
850 entitySelfLinks.setResult(nodesQueryResponse);
852 Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription"))
853 .thenReturn(entitySelfLinks);
856 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"),
857 Mockito.anyString()))
859 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1");
862 .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"),
863 Mockito.anyString()))
865 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2");
869 aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString()))
871 "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3");
874 .when(aaiAdapter.queryActiveInventoryWithRetries(
875 Matchers.contains("service-subscription-2"), Mockito.anyString(),
876 Mockito.anyInt(),Mockito.anyString()))
877 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
878 "/sync/aai/service-subscription-service-subscription-2.json")));
881 .when(aaiAdapter.queryActiveInventoryWithRetries(
882 Matchers.contains("service-subscription-1"), Mockito.anyString(),
883 Mockito.anyInt(),Mockito.anyString()))
884 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
885 "/sync/aai/service-subscription-service-subscription-1.json")));
888 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"),
889 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
890 .thenReturn(new OperationResult(200, TestResourceLoader
891 .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json")));
894 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
895 Matchers.argThat(listContainsValue("service-instance-59"))))
896 .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59");
899 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
900 Matchers.argThat(listContainsValue("service-instance-54"))))
902 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54");
905 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
906 Matchers.argThat(listContainsValue("service-instance-55"))))
908 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55");
911 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
912 Matchers.argThat(listContainsValue("service-instance-50"))))
914 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50");
917 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
918 Matchers.argThat(listContainsValue("service-instance-52"))))
920 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52");
923 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
924 Matchers.argThat(listContainsValue("service-instance-57"))))
926 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57");
929 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
930 Matchers.argThat(listContainsValue("service-instance-53"))))
932 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53");
935 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
936 Matchers.argThat(listContainsValue("service-instance-58"))))
938 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58");
941 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
942 Matchers.argThat(listContainsValue("service-instance-51"))))
944 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51");
947 .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"),
948 Matchers.argThat(listContainsValue("service-instance-56"))))
950 "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56");
956 .when(aaiAdapter.queryActiveInventoryWithRetries(
957 Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(),
958 Mockito.anyInt(),Mockito.anyString()))
959 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
960 "/sync/aai/aai-traversal/generic-query/service-instance-59.json")));
963 .when(aaiAdapter.queryActiveInventoryWithRetries(
964 Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(),
965 Mockito.anyInt(),Mockito.anyString()))
966 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
967 "/sync/aai/aai-traversal/generic-query/service-instance-54.json")));
970 .when(aaiAdapter.queryActiveInventoryWithRetries(
971 Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(),
972 Mockito.anyInt(),Mockito.anyString()))
973 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
974 "/sync/aai/aai-traversal/generic-query/service-instance-55.json")));
977 .when(aaiAdapter.queryActiveInventoryWithRetries(
978 Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(),
979 Mockito.anyInt(),Mockito.anyString()))
980 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
981 "/sync/aai/aai-traversal/generic-query/service-instance-50.json")));
984 .when(aaiAdapter.queryActiveInventoryWithRetries(
985 Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(),
986 Mockito.anyInt(),Mockito.anyString()))
987 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
988 "/sync/aai/aai-traversal/generic-query/service-instance-52.json")));
991 .when(aaiAdapter.queryActiveInventoryWithRetries(
992 Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(),
993 Mockito.anyInt(),Mockito.anyString()))
994 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
995 "/sync/aai/aai-traversal/generic-query/service-instance-57.json")));
998 .when(aaiAdapter.queryActiveInventoryWithRetries(
999 Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(),
1000 Mockito.anyInt(),Mockito.anyString()))
1001 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1002 "/sync/aai/aai-traversal/generic-query/service-instance-53.json")));
1005 .when(aaiAdapter.queryActiveInventoryWithRetries(
1006 Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(),
1007 Mockito.anyInt(),Mockito.anyString()))
1008 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1009 "/sync/aai/aai-traversal/generic-query/service-instance-58.json")));
1012 .when(aaiAdapter.queryActiveInventoryWithRetries(
1013 Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(),
1014 Mockito.anyInt(),Mockito.anyString()))
1015 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1016 "/sync/aai/aai-traversal/generic-query/service-instance-51.json")));
1019 .when(aaiAdapter.queryActiveInventoryWithRetries(
1020 Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(),
1021 Mockito.anyInt(),Mockito.anyString()))
1022 .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
1023 "/sync/aai/aai-traversal/generic-query/service-instance-56.json")));
1026 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
1027 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
1028 "http://server.proxy:9200/myindex/mytype/doc2",
1029 "http://server.proxy:9200/myindex/mytype/doc3");
1032 * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update
1034 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200,
1035 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json")));
1037 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200,
1038 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json")));
1040 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200,
1041 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json")));
1043 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200,
1044 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json")));
1046 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200,
1047 TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json")));
1049 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1050 .thenReturn(new OperationResult(200, null));
1054 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
1055 .thenReturn(new OperationResult(200, null));
1057 OperationState syncState = cerSynchronizer.doSync();
1058 assertEquals(OperationState.OK, syncState);
1060 assertNotNull(cerSynchronizer.getStatReport(false));
1061 assertNotNull(cerSynchronizer.getStatReport(true));
1063 cerSynchronizer.clearCache();
1064 cerSynchronizer.shutdown();