Adjust sparky parent pom
[aai/sparky-be.git] / sparkybe-onap-service / src / test / java / org / onap / aai / sparky / autosuggestion / sync / VnfAliasSuggestionSynchronizerTest.java
1 /**
2  * ============LICENSE_START=======================================================
3  * org.onap.aai
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
11  *
12  *       http://www.apache.org/licenses/LICENSE-2.0
13  *
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=========================================================
20  */
21
22 package org.onap.aai.sparky.autosuggestion.sync;
23
24 import static org.junit.Assert.assertEquals;
25 import static org.junit.Assert.assertNotNull;
26
27 import java.util.ArrayList;
28 import java.util.HashMap;
29 import java.util.HashSet;
30 import java.util.List;
31 import java.util.Map;
32 import java.util.Set;
33
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;
54
55 import com.fasterxml.jackson.databind.ObjectMapper;
56
57 public class VnfAliasSuggestionSynchronizerTest {
58
59   private static ObjectMapper mapper = new ObjectMapper();
60
61   private VnfAliasSuggestionSynchronizer vnfAliasSuggestionSynchronizer;
62
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;
71
72
73
74   @Before
75   public void init() throws Exception {
76
77     esSchemaConfig = new ElasticSearchSchemaConfig();
78     esSchemaConfig.setIndexDocType("default");
79     esSchemaConfig.setIndexMappingsFileName(null);
80     esSchemaConfig.setIndexName("aggregation-index-name");
81     esSchemaConfig.setIndexSettingsFileName(null);
82
83
84     aaiStatConfig = new NetworkStatisticsConfig();
85
86     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
87
88     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
89     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
90     aaiStatConfig.setBytesHistogramNumBins(20);
91     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
92
93     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
94     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
95     aaiStatConfig.setQueueLengthHistogramNumBins(20);
96     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
97
98     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
99     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
100     aaiStatConfig.setTaskAgeHistogramNumBins(20);
101     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
102
103     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
104     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
105     aaiStatConfig.setResponseTimeHistogramNumBins(20);
106     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
107
108     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
109     aaiStatConfig.setTpsHistogramMaxYAxis(100);
110     aaiStatConfig.setTpsHistogramNumBins(20);
111     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
112
113     esStatConfig = new NetworkStatisticsConfig();
114
115     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
116
117     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
118     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
119     esStatConfig.setBytesHistogramNumBins(20);
120     esStatConfig.setBytesHistogramNumDecimalPoints(2);
121
122     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
123     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
124     esStatConfig.setQueueLengthHistogramNumBins(20);
125     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
126
127     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
128     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
129     esStatConfig.setTaskAgeHistogramNumBins(20);
130     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
131
132     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
133     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
134     esStatConfig.setResponseTimeHistogramNumBins(20);
135     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
136
137     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
138     esStatConfig.setTpsHistogramMaxYAxis(100);
139     esStatConfig.setTpsHistogramNumBins(20);
140     esStatConfig.setTpsHistogramNumDecimalPoints(2);
141
142     oxmEntityLookup = new OxmEntityLookup();
143
144     searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
145     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
146
147
148     Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
149
150     processors.add(oxmEntityLookup);
151
152     filtersConfig = new FiltersConfig();
153
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);
160
161     filtersConfig.setFiltersConfig(filtersDetailsConfig);
162     filtersConfig.setViewsConfig(filtersForViewsConfig);
163
164     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
165         new HashMap<String, OxmEntityDescriptor>();
166
167     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
168     genericVnfDescriptor.setEntityName("generic-vnf");
169     List<String> pkeyNames = new ArrayList<String>();
170     pkeyNames.add("vnf-name");
171
172     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
173
174     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
175
176
177     oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
178
179     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
180     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
181     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
182
183
184
185     /*
186      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
187      *
188      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
189      *
190      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
191      *
192      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
193      */
194
195     geoEntityLookup = new GeoEntityLookup();
196
197     processors.add(geoEntityLookup);
198
199   
200     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
201   }
202
203   @Test
204   public void validateBasicConstruction() throws Exception {
205
206     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
207         aaiStatConfig, esStatConfig, filtersConfig);
208
209     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
210     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
211
212     assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
213     assertNotNull(vnfAliasSuggestionSynchronizer.getSearchServiceAdapter());
214
215   }
216
217   @Test
218   public void validateSmallSync() throws Exception {
219
220     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
221         aaiStatConfig, esStatConfig, filtersConfig);
222
223
224     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
225     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
226
227     String nodesQueryResponse = TestResourceLoader
228         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
229
230     OperationResult genericVnfSelfLinks = new OperationResult();
231
232     genericVnfSelfLinks.setResultCode(200);
233     genericVnfSelfLinks.setResult(nodesQueryResponse);
234
235     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
236         .thenReturn(genericVnfSelfLinks);
237
238     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
239         .thenReturn(
240             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
241
242     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
243         .thenReturn(
244             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
245
246     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
247         .thenReturn(
248             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
249
250     Mockito
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")));
255
256     Mockito
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")));
261
262     Mockito
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")));
267
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");
272
273     /*
274      * Our initial gets from elastic search should be record-not-found
275      */
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));
282
283
284     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
285         .thenReturn(new OperationResult(200, null));
286
287     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
288     assertEquals(OperationState.OK, syncState);
289
290     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
291     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
292
293     vnfAliasSuggestionSynchronizer.clearCache();
294     vnfAliasSuggestionSynchronizer.shutdown();
295
296
297   }
298
299   @Test
300   public void validateSmallSyncWithRetries() throws Exception {
301
302     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
303         aaiStatConfig, esStatConfig, filtersConfig);
304
305
306     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
307     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
308
309     String nodesQueryResponse = TestResourceLoader
310         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
311
312     OperationResult genericVnfSelfLinks = new OperationResult();
313
314     genericVnfSelfLinks.setResultCode(200);
315     genericVnfSelfLinks.setResult(nodesQueryResponse);
316
317     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
318         .thenReturn(genericVnfSelfLinks);
319
320     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
321         .thenReturn(
322             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
323
324     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
325         .thenReturn(
326             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
327
328     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
329         .thenReturn(
330             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
331
332     Mockito
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")));
337
338     Mockito
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")));
343
344     Mockito
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")));
349
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");
354
355     /*
356      * Our initial gets from elastic search should be record-not-found
357      */
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));
364
365
366     /*
367      * Elastic Search puts always fail with a version conflict = 409
368      */
369
370     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
371         .thenReturn(new OperationResult(409, null));
372
373     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
374     assertEquals(OperationState.OK, syncState);
375
376     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
377     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
378
379     vnfAliasSuggestionSynchronizer.clearCache();
380     vnfAliasSuggestionSynchronizer.shutdown();
381
382
383   }
384 }