Cleanup sparky-be pom
[aai/sparky-be.git] / sparkybe-onap-service / src / test / java / org / onap / aai / sparky / autosuggestion / sync / AutosuggestionSynchronizerTest.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.List;
30 import java.util.Map;
31 import java.util.Set;
32
33 import javax.inject.Inject;
34
35 import org.junit.Before;
36 import org.junit.Test;
37 import org.junit.runner.RunWith;
38 import org.mockito.Matchers;
39 import org.mockito.Mockito;
40 import org.onap.aai.nodes.NodeIngestor;
41 import org.onap.aai.restclient.client.OperationResult;
42 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
43 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
44 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
45 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
46 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
47 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
48 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
49 import org.onap.aai.sparky.search.SearchServiceAdapter;
50 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
51 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
52 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
53 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
54 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
55 import org.onap.aai.sparky.sync.enumeration.OperationState;
56 import org.onap.aai.sparky.util.TestResourceLoader;
57 import org.springframework.test.context.ContextConfiguration;
58 import org.springframework.test.context.TestPropertySource;
59 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
60
61 import com.fasterxml.jackson.databind.ObjectMapper;
62
63 @RunWith(SpringJUnit4ClassRunner.class)
64 @TestPropertySource(properties = {
65 "schemaIngestPropLoc = src/test/resources/oxm-reader/schema-ingest-single-oxm.properties" })
66 @ContextConfiguration(locations = { "classpath:oxm-reader/oxm-reader-bean.xml" })
67
68
69 public class AutosuggestionSynchronizerTest {
70
71   
72   private static ObjectMapper mapper = new ObjectMapper();
73
74   private AutosuggestionSynchronizer suggestionSynchronizer;
75
76   private ElasticSearchSchemaConfig esSchemaConfig;
77   private NetworkStatisticsConfig aaiStatConfig;
78   private NetworkStatisticsConfig esStatConfig;
79
80  
81   private SearchServiceAdapter searchServiceAdapter;
82   private ActiveInventoryAdapter aaiAdapter;
83
84   @Inject
85   private FiltersConfig filtersConfig;
86   
87
88    private OxmModelLoader oxmModelLoader;
89   
90    @Inject 
91    private NodeIngestor nodeInjest;
92    
93   @Inject
94   private Set<OxmModelProcessor> processors;
95   
96   @Inject
97   private OxmEntityLookup oxmEntityLookup;
98   
99   
100
101
102
103   private SuggestionEntityLookup suggestionEntityLookup;
104   
105  
106   @Before
107   public void init() throws Exception {
108
109     esSchemaConfig = new ElasticSearchSchemaConfig();
110     esSchemaConfig.setIndexDocType("default");
111     esSchemaConfig.setIndexMappingsFileName(null);
112     esSchemaConfig.setIndexName("aggregation-index-name");
113     esSchemaConfig.setIndexSettingsFileName(null);
114
115
116     aaiStatConfig = new NetworkStatisticsConfig();
117
118     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
119
120     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
121     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
122     aaiStatConfig.setBytesHistogramNumBins(20);
123     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
124
125     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
126     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
127     aaiStatConfig.setQueueLengthHistogramNumBins(20);
128     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
129
130     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
131     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
132     aaiStatConfig.setTaskAgeHistogramNumBins(20);
133     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
134
135     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
136     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
137     aaiStatConfig.setResponseTimeHistogramNumBins(20);
138     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
139
140     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
141     aaiStatConfig.setTpsHistogramMaxYAxis(100);
142     aaiStatConfig.setTpsHistogramNumBins(20);
143     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
144
145     esStatConfig = new NetworkStatisticsConfig();
146
147     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
148
149     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
150     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
151     esStatConfig.setBytesHistogramNumBins(20);
152     esStatConfig.setBytesHistogramNumDecimalPoints(2);
153
154     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
155     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
156     esStatConfig.setQueueLengthHistogramNumBins(20);
157     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
158
159     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
160     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
161     esStatConfig.setTaskAgeHistogramNumBins(20);
162     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
163
164     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
165     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
166     esStatConfig.setResponseTimeHistogramNumBins(20);
167     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
168
169     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
170     esStatConfig.setTpsHistogramMaxYAxis(100);
171     esStatConfig.setTpsHistogramNumBins(20);
172     esStatConfig.setTpsHistogramNumDecimalPoints(2);
173
174     
175
176     searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
177     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
178
179
180
181     
182     FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
183         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
184         FiltersDetailsConfig.class);
185     FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
186         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
187         FiltersForViewsConfig.class);
188
189     filtersConfig.setFiltersConfig(filtersDetailsConfig);
190     filtersConfig.setViewsConfig(filtersForViewsConfig);
191     
192     suggestionEntityLookup = new SuggestionEntityLookup(filtersConfig);
193
194     processors.add(suggestionEntityLookup);
195     OxmModelLoader oxmModelLoader = new OxmModelLoader("v11", processors);
196     oxmModelLoader.setNodeIngestor(nodeInjest);
197     oxmModelLoader.loadModel();
198     
199     
200
201     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
202         new HashMap<String, OxmEntityDescriptor>();
203
204     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
205     genericVnfDescriptor.setEntityName("generic-vnf");
206     List<String> pkeyNames = new ArrayList<String>();
207     pkeyNames.add("vnf-name");
208
209     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
210
211     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
212
213
214    
215
216
217   
218     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
219     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
220     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
221
222
223
224     /*
225      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
226      * 
227      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
228      * 
229      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
230      * 
231      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
232      */
233
234   
235   }
236
237   @Test
238   public void validateBasicConstruction() throws Exception {
239
240     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
241         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
242
243     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
244     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
245
246     assertNotNull(suggestionSynchronizer.getAaiAdapter());
247     assertNotNull(suggestionSynchronizer.getSearchServiceAdapter());
248
249   }
250
251   @Test
252   public void validateSmallSync() throws Exception {
253
254     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
255         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
256
257
258     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
259     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
260
261     String nodesQueryResponse = TestResourceLoader
262         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
263
264     OperationResult genericVnfSelfLinks = new OperationResult();
265
266     genericVnfSelfLinks.setResultCode(200);
267     genericVnfSelfLinks.setResult(nodesQueryResponse);
268
269     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
270         .thenReturn(genericVnfSelfLinks);
271
272     Mockito
273         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
274             Mockito.anyString()))
275         .thenReturn(
276             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
277
278     Mockito
279         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
280             Mockito.anyString()))
281         .thenReturn(
282             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
283
284     Mockito
285         .when(
286             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
287         .thenReturn(
288             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
289
290     Mockito
291         .when(aaiAdapter.queryActiveInventoryWithRetries(
292             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
293             Mockito.anyInt(),Mockito.anyString()))
294         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
295             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
296
297     Mockito
298         .when(aaiAdapter.queryActiveInventoryWithRetries(
299             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
300             Mockito.anyInt(),Mockito.anyString()))
301         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
302             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
303
304     Mockito
305         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
306             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
307         .thenReturn(new OperationResult(200, TestResourceLoader
308             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
309
310     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
311         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
312             "http://server.proxy:9200/myindex/mytype/doc2",
313             "http://server.proxy:9200/myindex/mytype/doc3");
314
315     /*
316      * Our initial gets from elastic search should be record-not-found
317      */
318     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
319         .thenReturn(new OperationResult(404, null));
320     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
321         .thenReturn(new OperationResult(404, null));
322     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
323         .thenReturn(new OperationResult(404, null));
324
325
326     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
327         .thenReturn(new OperationResult(200, null));
328
329     OperationState syncState = suggestionSynchronizer.doSync();
330     assertEquals(OperationState.OK, syncState);
331
332     assertNotNull(suggestionSynchronizer.getStatReport(false));
333     assertNotNull(suggestionSynchronizer.getStatReport(true));
334
335     suggestionSynchronizer.clearCache();
336     suggestionSynchronizer.shutdown();
337
338
339   }
340
341   @Test
342   public void validateSmallSyncWithRetries() throws Exception {
343
344     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
345         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
346
347
348     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
349     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
350
351     String nodesQueryResponse = TestResourceLoader
352         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
353
354     OperationResult genericVnfSelfLinks = new OperationResult();
355
356     genericVnfSelfLinks.setResultCode(200);
357     genericVnfSelfLinks.setResult(nodesQueryResponse);
358
359     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
360         .thenReturn(genericVnfSelfLinks);
361
362     Mockito
363         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
364             Mockito.anyString()))
365         .thenReturn(
366             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
367
368     Mockito
369         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
370             Mockito.anyString()))
371         .thenReturn(
372             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
373
374     Mockito
375         .when(
376             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
377         .thenReturn(
378             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
379
380     Mockito
381         .when(aaiAdapter.queryActiveInventoryWithRetries(
382             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
383             Mockito.anyInt(),Mockito.anyString()))
384         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
385             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
386
387     Mockito
388         .when(aaiAdapter.queryActiveInventoryWithRetries(
389             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
390             Mockito.anyInt(),Mockito.anyString()))
391         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
392             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
393
394     Mockito
395         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
396             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
397         .thenReturn(new OperationResult(200, TestResourceLoader
398             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
399
400     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
401         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
402             "http://server.proxy:9200/myindex/mytype/doc2",
403             "http://server.proxy:9200/myindex/mytype/doc3");
404
405     /*
406      * Our initial gets from elastic search should be record-not-found
407      */
408     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
409         .thenReturn(new OperationResult(404, null));
410     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
411         .thenReturn(new OperationResult(404, null));
412     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
413         .thenReturn(new OperationResult(404, null));
414
415
416     /*
417      * Elastic Search puts always fail with a version conflict = 409
418      */
419
420     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
421         .thenReturn(new OperationResult(409, null));
422
423     OperationState syncState = suggestionSynchronizer.doSync();
424     assertEquals(OperationState.OK, syncState);
425
426     assertNotNull(suggestionSynchronizer.getStatReport(false));
427     assertNotNull(suggestionSynchronizer.getStatReport(true));
428
429     suggestionSynchronizer.clearCache();
430     suggestionSynchronizer.shutdown();
431
432
433   }
434 }