Merge "Fix sync update flow"
[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);
175     oxmModelLoader.setNodeIngestor(nodeInjest);
176     oxmModelLoader.loadModel();
177     
178     
179
180     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
181         new HashMap<String, OxmEntityDescriptor>();
182
183     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
184     genericVnfDescriptor.setEntityName("generic-vnf");
185     List<String> pkeyNames = new ArrayList<String>();
186     pkeyNames.add("vnf-name");
187
188     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
189
190     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
191
192
193    
194
195
196   
197     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
198     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
199     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
200
201
202
203     /*
204      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
205      * 
206      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
207      * 
208      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
209      * 
210      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
211      */
212
213   
214   }
215
216   @Test
217   public void validateBasicConstruction() throws Exception {
218
219     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
220         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
221
222     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
223     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
224
225     assertNotNull(suggestionSynchronizer.getAaiAdapter());
226     assertNotNull(suggestionSynchronizer.getSearchServiceAdapter());
227
228   }
229
230   @Test
231   public void validateSmallSync() throws Exception {
232
233     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
234         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
235
236
237     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
238     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
239
240     String nodesQueryResponse = TestResourceLoader
241         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
242
243     OperationResult genericVnfSelfLinks = new OperationResult();
244
245     genericVnfSelfLinks.setResultCode(200);
246     genericVnfSelfLinks.setResult(nodesQueryResponse);
247
248     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
249         .thenReturn(genericVnfSelfLinks);
250
251     Mockito
252         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
253             Mockito.anyString()))
254         .thenReturn(
255             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
256
257     Mockito
258         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
259             Mockito.anyString()))
260         .thenReturn(
261             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
262
263     Mockito
264         .when(
265             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
266         .thenReturn(
267             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
268
269     Mockito
270         .when(aaiAdapter.queryActiveInventoryWithRetries(
271             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
272             Mockito.anyInt(),Mockito.anyString()))
273         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
274             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
275
276     Mockito
277         .when(aaiAdapter.queryActiveInventoryWithRetries(
278             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
279             Mockito.anyInt(),Mockito.anyString()))
280         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
281             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
282
283     Mockito
284         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
285             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
286         .thenReturn(new OperationResult(200, TestResourceLoader
287             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
288
289     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
290         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
291             "http://server.proxy:9200/myindex/mytype/doc2",
292             "http://server.proxy:9200/myindex/mytype/doc3");
293
294     /*
295      * Our initial gets from elastic search should be record-not-found
296      */
297     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
298         .thenReturn(new OperationResult(404, null));
299     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
300         .thenReturn(new OperationResult(404, null));
301     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
302         .thenReturn(new OperationResult(404, null));
303
304
305     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
306         .thenReturn(new OperationResult(200, null));
307
308     OperationState syncState = suggestionSynchronizer.doSync();
309     assertEquals(OperationState.OK, syncState);
310
311     assertNotNull(suggestionSynchronizer.getStatReport(false));
312     assertNotNull(suggestionSynchronizer.getStatReport(true));
313
314     suggestionSynchronizer.clearCache();
315     suggestionSynchronizer.shutdown();
316
317
318   }
319
320   @Test
321   public void validateSmallSyncWithRetries() throws Exception {
322
323     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
324         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
325
326
327     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
328     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
329
330     String nodesQueryResponse = TestResourceLoader
331         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
332
333     OperationResult genericVnfSelfLinks = new OperationResult();
334
335     genericVnfSelfLinks.setResultCode(200);
336     genericVnfSelfLinks.setResult(nodesQueryResponse);
337
338     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
339         .thenReturn(genericVnfSelfLinks);
340
341     Mockito
342         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
343             Mockito.anyString()))
344         .thenReturn(
345             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
346
347     Mockito
348         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
349             Mockito.anyString()))
350         .thenReturn(
351             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
352
353     Mockito
354         .when(
355             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
356         .thenReturn(
357             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
358
359     Mockito
360         .when(aaiAdapter.queryActiveInventoryWithRetries(
361             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
362             Mockito.anyInt(),Mockito.anyString()))
363         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
364             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
365
366     Mockito
367         .when(aaiAdapter.queryActiveInventoryWithRetries(
368             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
369             Mockito.anyInt(),Mockito.anyString()))
370         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
371             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
372
373     Mockito
374         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
375             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
376         .thenReturn(new OperationResult(200, TestResourceLoader
377             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
378
379     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
380         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
381             "http://server.proxy:9200/myindex/mytype/doc2",
382             "http://server.proxy:9200/myindex/mytype/doc3");
383
384     /*
385      * Our initial gets from elastic search should be record-not-found
386      */
387     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
388         .thenReturn(new OperationResult(404, null));
389     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
390         .thenReturn(new OperationResult(404, null));
391     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
392         .thenReturn(new OperationResult(404, null));
393
394
395     /*
396      * Elastic Search puts always fail with a version conflict = 409
397      */
398
399     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
400         .thenReturn(new OperationResult(409, null));
401
402     OperationState syncState = suggestionSynchronizer.doSync();
403     assertEquals(OperationState.OK, syncState);
404
405     assertNotNull(suggestionSynchronizer.getStatReport(false));
406     assertNotNull(suggestionSynchronizer.getStatReport(true));
407
408     suggestionSynchronizer.clearCache();
409     suggestionSynchronizer.shutdown();
410
411
412   }
413 }