1 package org.onap.aai.sparky.autosuggestion.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.junit.Before;
14 import org.junit.Test;
15 import org.mockito.Matchers;
16 import org.mockito.Mockito;
17 import org.onap.aai.restclient.client.OperationResult;
18 import org.onap.aai.sparky.config.oxm.GeoEntityLookup;
19 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
20 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
21 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
22 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
23 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
24 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
25 import org.onap.aai.sparky.search.SearchServiceAdapter;
26 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
27 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
28 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
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.TestResourceLoader;
34 import com.fasterxml.jackson.databind.ObjectMapper;
36 public class VnfAliasSuggestionSynchronizerTest {
38 private static ObjectMapper mapper = new ObjectMapper();
40 private VnfAliasSuggestionSynchronizer vnfAliasSuggestionSynchronizer;
42 private ElasticSearchSchemaConfig esSchemaConfig;
43 private NetworkStatisticsConfig aaiStatConfig;
44 private NetworkStatisticsConfig esStatConfig;
45 private OxmEntityLookup oxmEntityLookup;
46 private GeoEntityLookup geoEntityLookup;
47 private SearchServiceAdapter searchServiceAdapter;
48 private ActiveInventoryAdapter aaiAdapter;
49 private FiltersConfig filtersConfig;
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);
131 filtersConfig = new FiltersConfig();
133 FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
134 TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
135 FiltersDetailsConfig.class);
136 FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
137 TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
138 FiltersForViewsConfig.class);
140 filtersConfig.setFiltersConfig(filtersDetailsConfig);
141 filtersConfig.setViewsConfig(filtersForViewsConfig);
143 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
144 new HashMap<String, OxmEntityDescriptor>();
146 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
147 genericVnfDescriptor.setEntityName("generic-vnf");
148 List<String> pkeyNames = new ArrayList<String>();
149 pkeyNames.add("vnf-name");
151 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
153 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
156 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
158 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
159 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
160 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
165 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
167 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
169 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
171 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
174 geoEntityLookup = new GeoEntityLookup();
176 processors.add(geoEntityLookup);
179 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
183 public void validateBasicConstruction() throws Exception {
185 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
186 aaiStatConfig, esStatConfig, filtersConfig);
188 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
189 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
191 assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
192 assertNotNull(vnfAliasSuggestionSynchronizer.getSearchServiceAdapter());
197 public void validateSmallSync() throws Exception {
199 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
200 aaiStatConfig, esStatConfig, filtersConfig);
203 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
204 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
206 String nodesQueryResponse = TestResourceLoader
207 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
209 OperationResult genericVnfSelfLinks = new OperationResult();
211 genericVnfSelfLinks.setResultCode(200);
212 genericVnfSelfLinks.setResult(nodesQueryResponse);
214 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
215 .thenReturn(genericVnfSelfLinks);
217 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
219 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
221 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
223 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
225 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
227 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
230 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
231 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
232 .thenReturn(new OperationResult(200, TestResourceLoader
233 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
236 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
237 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
238 .thenReturn(new OperationResult(200, TestResourceLoader
239 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
242 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
243 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
244 .thenReturn(new OperationResult(200, TestResourceLoader
245 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
247 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
248 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
249 "http://server.proxy:9200/myindex/mytype/doc2",
250 "http://server.proxy:9200/myindex/mytype/doc3");
253 * Our initial gets from elastic search should be record-not-found
255 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
256 .thenReturn(new OperationResult(404, null));
257 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
258 .thenReturn(new OperationResult(404, null));
259 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
260 .thenReturn(new OperationResult(404, null));
263 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
264 .thenReturn(new OperationResult(200, null));
266 OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
267 assertEquals(OperationState.OK, syncState);
269 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
270 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
272 vnfAliasSuggestionSynchronizer.clearCache();
273 vnfAliasSuggestionSynchronizer.shutdown();
279 public void validateSmallSyncWithRetries() throws Exception {
281 vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
282 aaiStatConfig, esStatConfig, filtersConfig);
285 vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
286 vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
288 String nodesQueryResponse = TestResourceLoader
289 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
291 OperationResult genericVnfSelfLinks = new OperationResult();
293 genericVnfSelfLinks.setResultCode(200);
294 genericVnfSelfLinks.setResult(nodesQueryResponse);
296 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
297 .thenReturn(genericVnfSelfLinks);
299 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
301 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
303 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
305 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
307 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
309 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
312 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
313 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
314 .thenReturn(new OperationResult(200, TestResourceLoader
315 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
318 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
319 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
320 .thenReturn(new OperationResult(200, TestResourceLoader
321 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
324 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
325 Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
326 .thenReturn(new OperationResult(200, TestResourceLoader
327 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
329 Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
330 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
331 "http://server.proxy:9200/myindex/mytype/doc2",
332 "http://server.proxy:9200/myindex/mytype/doc3");
335 * Our initial gets from elastic search should be record-not-found
337 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
338 .thenReturn(new OperationResult(404, null));
339 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
340 .thenReturn(new OperationResult(404, null));
341 Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
342 .thenReturn(new OperationResult(404, null));
346 * Elastic Search puts always fail with a version conflict = 409
349 Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
350 .thenReturn(new OperationResult(409, null));
352 OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
353 assertEquals(OperationState.OK, syncState);
355 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
356 assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
358 vnfAliasSuggestionSynchronizer.clearCache();
359 vnfAliasSuggestionSynchronizer.shutdown();