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.OxmModelProcessor;
43 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
44 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
45 import org.onap.aai.sparky.search.SearchServiceAdapter;
46 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
47 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
48 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
49 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
50 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
51 import org.onap.aai.sparky.sync.enumeration.OperationState;
52 import org.onap.aai.sparky.util.TestResourceLoader;
54 import com.fasterxml.jackson.databind.ObjectMapper;
56 public class VnfAliasSuggestionSynchronizerTest {
58 private static ObjectMapper mapper = new ObjectMapper();
60 private VnfAliasSuggestionSynchronizer vnfAliasSuggestionSynchronizer;
62 private ElasticSearchSchemaConfig esSchemaConfig;
63 private NetworkStatisticsConfig aaiStatConfig;
64 private NetworkStatisticsConfig esStatConfig;
65 private OxmEntityLookup oxmEntityLookup;
66 private GeoEntityLookup geoEntityLookup;
67 private SearchServiceAdapter searchServiceAdapter;
68 private ActiveInventoryAdapter aaiAdapter;
69 private FiltersConfig filtersConfig;
74 public void init() throws Exception {
76 esSchemaConfig = new ElasticSearchSchemaConfig();
77 esSchemaConfig.setIndexDocType("default");
78 esSchemaConfig.setIndexMappingsFileName(null);
79 esSchemaConfig.setIndexName("aggregation-index-name");
80 esSchemaConfig.setIndexSettingsFileName(null);
83 aaiStatConfig = new NetworkStatisticsConfig();
85 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
87 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
88 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
89 aaiStatConfig.setBytesHistogramNumBins(20);
90 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
92 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
93 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
94 aaiStatConfig.setQueueLengthHistogramNumBins(20);
95 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
97 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
98 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
99 aaiStatConfig.setTaskAgeHistogramNumBins(20);
100 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
102 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
103 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
104 aaiStatConfig.setResponseTimeHistogramNumBins(20);
105 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
107 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
108 aaiStatConfig.setTpsHistogramMaxYAxis(100);
109 aaiStatConfig.setTpsHistogramNumBins(20);
110 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
112 esStatConfig = new NetworkStatisticsConfig();
114 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
116 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
117 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
118 esStatConfig.setBytesHistogramNumBins(20);
119 esStatConfig.setBytesHistogramNumDecimalPoints(2);
121 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
122 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
123 esStatConfig.setQueueLengthHistogramNumBins(20);
124 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
126 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
127 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
128 esStatConfig.setTaskAgeHistogramNumBins(20);
129 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
131 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
132 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
133 esStatConfig.setResponseTimeHistogramNumBins(20);
134 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
136 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
137 esStatConfig.setTpsHistogramMaxYAxis(100);
138 esStatConfig.setTpsHistogramNumBins(20);
139 esStatConfig.setTpsHistogramNumDecimalPoints(2);
141 oxmEntityLookup = new OxmEntityLookup();
143 searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
144 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
147 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
149 processors.add(oxmEntityLookup);
151 filtersConfig = new FiltersConfig();
153 FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
154 TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
155 FiltersDetailsConfig.class);
156 FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
157 TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
158 FiltersForViewsConfig.class);
160 filtersConfig.setFiltersConfig(filtersDetailsConfig);
161 filtersConfig.setViewsConfig(filtersForViewsConfig);
163 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
164 new HashMap<String, OxmEntityDescriptor>();
166 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
167 genericVnfDescriptor.setEntityName("generic-vnf");
168 List<String> pkeyNames = new ArrayList<String>();
169 pkeyNames.add("vnf-name");
171 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
173 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
176 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
178 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
179 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
180 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
185 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
187 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
189 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
191 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
194 geoEntityLookup = new GeoEntityLookup();
196 processors.add(geoEntityLookup);
199 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
203 public void validateBasicConstruction() throws Exception {
205 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
206 aaiStatConfig, esStatConfig, filtersConfig);
208 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
209 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
211 assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
212 assertNotNull(vnfAliasSuggestionSynchronizer.getSearchServiceAdapter());
217 public void validateSmallSync() throws Exception {
219 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
220 aaiStatConfig, esStatConfig, filtersConfig);
223 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
224 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
226 String nodesQueryResponse = TestResourceLoader
227 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
229 OperationResult genericVnfSelfLinks = new OperationResult();
231 genericVnfSelfLinks.setResultCode(200);
232 genericVnfSelfLinks.setResult(nodesQueryResponse);
234 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
235 .thenReturn(genericVnfSelfLinks);
237 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
239 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
241 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
243 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
245 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
247 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
250 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
251 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
252 .thenReturn(new OperationResult(200, TestResourceLoader
253 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
256 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
257 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
258 .thenReturn(new OperationResult(200, TestResourceLoader
259 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
262 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
263 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
264 .thenReturn(new OperationResult(200, TestResourceLoader
265 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
267 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
268 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
269 "http://server.proxy:9200/myindex/mytype/doc2",
270 "http://server.proxy:9200/myindex/mytype/doc3");
273 * Our initial gets from elastic search should be record-not-found
275 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
276 .thenReturn(new OperationResult(404, null));
277 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
278 .thenReturn(new OperationResult(404, null));
279 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
280 .thenReturn(new OperationResult(404, null));
283 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
284 .thenReturn(new OperationResult(200, null));
286 OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
287 assertEquals(OperationState.OK, syncState);
289 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
290 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
292 vnfAliasSuggestionSynchronizer.clearCache();
293 vnfAliasSuggestionSynchronizer.shutdown();
299 public void validateSmallSyncWithRetries() throws Exception {
301 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
302 aaiStatConfig, esStatConfig, filtersConfig);
305 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
306 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
308 String nodesQueryResponse = TestResourceLoader
309 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
311 OperationResult genericVnfSelfLinks = new OperationResult();
313 genericVnfSelfLinks.setResultCode(200);
314 genericVnfSelfLinks.setResult(nodesQueryResponse);
316 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
317 .thenReturn(genericVnfSelfLinks);
319 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
321 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
323 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
325 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
327 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
329 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
332 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
333 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
334 .thenReturn(new OperationResult(200, TestResourceLoader
335 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
338 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
339 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
340 .thenReturn(new OperationResult(200, TestResourceLoader
341 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
344 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
345 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
346 .thenReturn(new OperationResult(200, TestResourceLoader
347 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
349 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
350 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
351 "http://server.proxy:9200/myindex/mytype/doc2",
352 "http://server.proxy:9200/myindex/mytype/doc3");
355 * Our initial gets from elastic search should be record-not-found
357 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
358 .thenReturn(new OperationResult(404, null));
359 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
360 .thenReturn(new OperationResult(404, null));
361 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
362 .thenReturn(new OperationResult(404, null));
366 * Elastic Search puts always fail with a version conflict = 409
369 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
370 .thenReturn(new OperationResult(409, null));
372 OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
373 assertEquals(OperationState.OK, syncState);
375 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
376 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
378 vnfAliasSuggestionSynchronizer.clearCache();
379 vnfAliasSuggestionSynchronizer.shutdown();