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