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.viewandinspect.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.junit.Before;
35 import org.junit.Test;
36 import org.mockito.Matchers;
37 import org.mockito.Mockito;
38 import org.onap.aai.restclient.client.OperationResult;
39 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
40 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
41 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
42 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
43 import org.onap.aai.sparky.config.oxm.SearchableEntityLookup;
44 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
45 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
46 import org.onap.aai.sparky.search.SearchServiceAdapter;
47 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
48 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
49 import org.onap.aai.sparky.sync.enumeration.OperationState;
50 import org.onap.aai.sparky.util.TestResourceLoader;
51 import org.onap.aai.sparky.viewinspect.sync.ViewInspectEntitySynchronizer;
53 public class ViewInspectEntitySynchronizerTest {
55 private ViewInspectEntitySynchronizer viewInspectSynchronizer;
57 private ElasticSearchSchemaConfig esSchemaConfig;
58 private NetworkStatisticsConfig aaiStatConfig;
59 private NetworkStatisticsConfig esStatConfig;
60 private OxmEntityLookup oxmEntityLookup;
61 private SearchableEntityLookup searchableEntityLookup;
62 private SearchServiceAdapter searchServiceAdapter;
63 private ActiveInventoryAdapter aaiAdapter;
68 public void init() throws Exception {
70 esSchemaConfig = new ElasticSearchSchemaConfig();
71 esSchemaConfig.setIndexDocType("default");
72 esSchemaConfig.setIndexMappingsFileName(null);
73 esSchemaConfig.setIndexName("aggregation-index-name");
74 esSchemaConfig.setIndexSettingsFileName(null);
77 aaiStatConfig = new NetworkStatisticsConfig();
79 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
81 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
82 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
83 aaiStatConfig.setBytesHistogramNumBins(20);
84 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
86 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
87 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
88 aaiStatConfig.setQueueLengthHistogramNumBins(20);
89 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
91 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
92 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
93 aaiStatConfig.setTaskAgeHistogramNumBins(20);
94 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
96 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
97 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
98 aaiStatConfig.setResponseTimeHistogramNumBins(20);
99 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
101 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
102 aaiStatConfig.setTpsHistogramMaxYAxis(100);
103 aaiStatConfig.setTpsHistogramNumBins(20);
104 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
106 esStatConfig = new NetworkStatisticsConfig();
108 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
110 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
111 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
112 esStatConfig.setBytesHistogramNumBins(20);
113 esStatConfig.setBytesHistogramNumDecimalPoints(2);
115 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
116 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
117 esStatConfig.setQueueLengthHistogramNumBins(20);
118 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
120 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
121 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
122 esStatConfig.setTaskAgeHistogramNumBins(20);
123 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
125 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
126 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
127 esStatConfig.setResponseTimeHistogramNumBins(20);
128 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
130 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
131 esStatConfig.setTpsHistogramMaxYAxis(100);
132 esStatConfig.setTpsHistogramNumBins(20);
133 esStatConfig.setTpsHistogramNumDecimalPoints(2);
135 oxmEntityLookup = new OxmEntityLookup();
137 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
138 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
141 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
143 processors.add(oxmEntityLookup);
147 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
148 new HashMap<String, OxmEntityDescriptor>();
150 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
151 genericVnfDescriptor.setEntityName("generic-vnf");
152 List<String> pkeyNames = new ArrayList<String>();
153 pkeyNames.add("vnf-name");
155 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
157 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
160 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
162 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
163 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
164 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
169 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
171 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
173 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
175 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
178 searchableEntityLookup = new SearchableEntityLookup();
180 processors.add(searchableEntityLookup);
183 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
187 public void validateBasicConstruction() throws Exception {
189 viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
190 aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
192 viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
193 viewInspectSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
195 assertNotNull(viewInspectSynchronizer.getAaiAdapter());
196 assertNotNull(viewInspectSynchronizer.getSearchServiceAdapter());
201 public void validateSmallSync() throws Exception {
203 viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
204 aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
207 viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
208 viewInspectSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
210 String nodesQueryResponse = TestResourceLoader
211 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
213 OperationResult genericVnfSelfLinks = new OperationResult();
215 genericVnfSelfLinks.setResultCode(200);
216 genericVnfSelfLinks.setResult(nodesQueryResponse);
218 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
219 .thenReturn(genericVnfSelfLinks);
221 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
223 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
225 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
227 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
229 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
231 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
234 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
235 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
236 .thenReturn(new OperationResult(200, TestResourceLoader
237 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
240 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
241 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
242 .thenReturn(new OperationResult(200, TestResourceLoader
243 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
246 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
247 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
248 .thenReturn(new OperationResult(200, TestResourceLoader
249 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
251 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
252 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
253 "http://server.proxy:9200/myindex/mytype/doc2",
254 "http://server.proxy:9200/myindex/mytype/doc3");
257 * Our initial gets from elastic search should be record-not-found
259 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
260 .thenReturn(new OperationResult(404, null));
261 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
262 .thenReturn(new OperationResult(404, null));
263 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
264 .thenReturn(new OperationResult(404, null));
267 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
268 .thenReturn(new OperationResult(200, null));
270 OperationState syncState = viewInspectSynchronizer.doSync();
271 assertEquals(OperationState.OK, syncState);
273 assertNotNull(viewInspectSynchronizer.getStatReport(false));
274 assertNotNull(viewInspectSynchronizer.getStatReport(true));
276 viewInspectSynchronizer.clearCache();
277 viewInspectSynchronizer.shutdown();
283 public void validateSmallSyncWithRetries() throws Exception {
285 viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
286 aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
289 viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
290 viewInspectSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
292 String nodesQueryResponse = TestResourceLoader
293 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
295 OperationResult genericVnfSelfLinks = new OperationResult();
297 genericVnfSelfLinks.setResultCode(200);
298 genericVnfSelfLinks.setResult(nodesQueryResponse);
300 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
301 .thenReturn(genericVnfSelfLinks);
303 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
305 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
307 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
309 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
311 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
313 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
316 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
317 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
318 .thenReturn(new OperationResult(200, TestResourceLoader
319 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
322 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
323 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
324 .thenReturn(new OperationResult(200, TestResourceLoader
325 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
328 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
329 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
330 .thenReturn(new OperationResult(200, TestResourceLoader
331 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
333 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
334 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
335 "http://localhost:9200/myindex/mytype/doc2",
336 "http://localhost:9200/myindex/mytype/doc3");
339 * Our initial gets from elastic search should be record-not-found
341 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
342 .thenReturn(new OperationResult(404, null));
343 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
344 .thenReturn(new OperationResult(404, null));
345 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
346 .thenReturn(new OperationResult(404, null));
350 * Elastic Search puts always fail with a version conflict = 409
353 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
354 .thenReturn(new OperationResult(409, null));
356 OperationState syncState = viewInspectSynchronizer.doSync();
357 assertEquals(OperationState.OK, syncState);
359 assertNotNull(viewInspectSynchronizer.getStatReport(false));
360 assertNotNull(viewInspectSynchronizer.getStatReport(true));
362 viewInspectSynchronizer.clearCache();
363 viewInspectSynchronizer.shutdown();