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