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.autosuggestion.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.GeoEntityLookup;
40 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
41 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
42 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
43 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
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.search.filters.config.FiltersConfig;
48 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
49 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
50 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
51 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
52 import org.onap.aai.sparky.sync.enumeration.OperationState;
53 import org.onap.aai.sparky.util.TestResourceLoader;
55 import com.fasterxml.jackson.databind.ObjectMapper;
57 public class VnfAliasSuggestionSynchronizerTest {
59 private static ObjectMapper mapper = new ObjectMapper();
61 private VnfAliasSuggestionSynchronizer vnfAliasSuggestionSynchronizer;
63 private ElasticSearchSchemaConfig esSchemaConfig;
64 private NetworkStatisticsConfig aaiStatConfig;
65 private NetworkStatisticsConfig esStatConfig;
66 private OxmEntityLookup oxmEntityLookup;
67 private GeoEntityLookup geoEntityLookup;
68 private SearchServiceAdapter searchServiceAdapter;
69 private ActiveInventoryAdapter aaiAdapter;
70 private FiltersConfig filtersConfig;
75 public void init() throws Exception {
77 esSchemaConfig = new ElasticSearchSchemaConfig();
78 esSchemaConfig.setIndexDocType("default");
79 esSchemaConfig.setIndexMappingsFileName(null);
80 esSchemaConfig.setIndexName("aggregation-index-name");
81 esSchemaConfig.setIndexSettingsFileName(null);
84 aaiStatConfig = new NetworkStatisticsConfig();
86 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
88 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
89 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
90 aaiStatConfig.setBytesHistogramNumBins(20);
91 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
93 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
94 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
95 aaiStatConfig.setQueueLengthHistogramNumBins(20);
96 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
98 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
99 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
100 aaiStatConfig.setTaskAgeHistogramNumBins(20);
101 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
103 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
104 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
105 aaiStatConfig.setResponseTimeHistogramNumBins(20);
106 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
108 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
109 aaiStatConfig.setTpsHistogramMaxYAxis(100);
110 aaiStatConfig.setTpsHistogramNumBins(20);
111 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
113 esStatConfig = new NetworkStatisticsConfig();
115 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
117 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
118 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
119 esStatConfig.setBytesHistogramNumBins(20);
120 esStatConfig.setBytesHistogramNumDecimalPoints(2);
122 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
123 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
124 esStatConfig.setQueueLengthHistogramNumBins(20);
125 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
127 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
128 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
129 esStatConfig.setTaskAgeHistogramNumBins(20);
130 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
132 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
133 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
134 esStatConfig.setResponseTimeHistogramNumBins(20);
135 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
137 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
138 esStatConfig.setTpsHistogramMaxYAxis(100);
139 esStatConfig.setTpsHistogramNumBins(20);
140 esStatConfig.setTpsHistogramNumDecimalPoints(2);
142 oxmEntityLookup = new OxmEntityLookup();
144 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
145 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
148 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
150 processors.add(oxmEntityLookup);
152 filtersConfig = new FiltersConfig();
154 FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
155 TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
156 FiltersDetailsConfig.class);
157 FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
158 TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
159 FiltersForViewsConfig.class);
161 filtersConfig.setFiltersConfig(filtersDetailsConfig);
162 filtersConfig.setViewsConfig(filtersForViewsConfig);
164 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
165 new HashMap<String, OxmEntityDescriptor>();
167 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
168 genericVnfDescriptor.setEntityName("generic-vnf");
169 List<String> pkeyNames = new ArrayList<String>();
170 pkeyNames.add("vnf-name");
172 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
174 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
177 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
179 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
180 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
181 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
186 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
188 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
190 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
192 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
195 geoEntityLookup = new GeoEntityLookup();
197 processors.add(geoEntityLookup);
200 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
204 public void validateBasicConstruction() throws Exception {
206 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
207 aaiStatConfig, esStatConfig, filtersConfig);
209 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
210 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
212 assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
213 assertNotNull(vnfAliasSuggestionSynchronizer.getSearchServiceAdapter());
218 public void validateSmallSync() throws Exception {
220 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
221 aaiStatConfig, esStatConfig, filtersConfig);
224 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
225 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
227 String nodesQueryResponse = TestResourceLoader
228 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
230 OperationResult genericVnfSelfLinks = new OperationResult();
232 genericVnfSelfLinks.setResultCode(200);
233 genericVnfSelfLinks.setResult(nodesQueryResponse);
235 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
236 .thenReturn(genericVnfSelfLinks);
238 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
240 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
242 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
244 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
246 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
248 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
251 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
252 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
253 .thenReturn(new OperationResult(200, TestResourceLoader
254 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
257 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
258 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
259 .thenReturn(new OperationResult(200, TestResourceLoader
260 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
263 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
264 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
265 .thenReturn(new OperationResult(200, TestResourceLoader
266 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
268 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
269 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
270 "http://server.proxy:9200/myindex/mytype/doc2",
271 "http://server.proxy:9200/myindex/mytype/doc3");
274 * Our initial gets from elastic search should be record-not-found
276 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
277 .thenReturn(new OperationResult(404, null));
278 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
279 .thenReturn(new OperationResult(404, null));
280 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
281 .thenReturn(new OperationResult(404, null));
284 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
285 .thenReturn(new OperationResult(200, null));
287 OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
288 assertEquals(OperationState.OK, syncState);
290 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
291 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
293 vnfAliasSuggestionSynchronizer.clearCache();
294 vnfAliasSuggestionSynchronizer.shutdown();
300 public void validateSmallSyncWithRetries() throws Exception {
302 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
303 aaiStatConfig, esStatConfig, filtersConfig);
306 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
307 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
309 String nodesQueryResponse = TestResourceLoader
310 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
312 OperationResult genericVnfSelfLinks = new OperationResult();
314 genericVnfSelfLinks.setResultCode(200);
315 genericVnfSelfLinks.setResult(nodesQueryResponse);
317 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
318 .thenReturn(genericVnfSelfLinks);
320 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
322 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
324 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
326 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
328 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
330 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
333 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
334 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
335 .thenReturn(new OperationResult(200, TestResourceLoader
336 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
339 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
340 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
341 .thenReturn(new OperationResult(200, TestResourceLoader
342 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
345 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
346 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
347 .thenReturn(new OperationResult(200, TestResourceLoader
348 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
350 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
351 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
352 "http://server.proxy:9200/myindex/mytype/doc2",
353 "http://server.proxy:9200/myindex/mytype/doc3");
356 * Our initial gets from elastic search should be record-not-found
358 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
359 .thenReturn(new OperationResult(404, null));
360 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
361 .thenReturn(new OperationResult(404, null));
362 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
363 .thenReturn(new OperationResult(404, null));
367 * Elastic Search puts always fail with a version conflict = 409
370 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
371 .thenReturn(new OperationResult(409, null));
373 OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
374 assertEquals(OperationState.OK, syncState);
376 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
377 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
379 vnfAliasSuggestionSynchronizer.clearCache();
380 vnfAliasSuggestionSynchronizer.shutdown();