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