add test cases to increase coverage
[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.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
226         .thenReturn(
227             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
228
229     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
230         .thenReturn(
231             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
232
233     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
234         .thenReturn(
235             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
236
237     Mockito
238         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
239             Mockito.anyString(), Mockito.anyInt()))
240         .thenReturn(new OperationResult(200, TestResourceLoader
241             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
242
243     Mockito
244         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
245             Mockito.anyString(), Mockito.anyInt()))
246         .thenReturn(new OperationResult(200, TestResourceLoader
247             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
248
249     Mockito
250         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
251             Mockito.anyString(), Mockito.anyInt()))
252         .thenReturn(new OperationResult(200, TestResourceLoader
253             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
254
255     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
256         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
257             "http://localhost:9200/myindex/mytype/doc2",
258             "http://localhost:9200/myindex/mytype/doc3");
259
260     /*
261      * Our initial gets from elastic search should be record-not-found
262      */
263     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
264         .thenReturn(new OperationResult(404, null));
265     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
266         .thenReturn(new OperationResult(404, null));
267     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
268         .thenReturn(new OperationResult(404, null));
269
270
271     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
272         .thenReturn(new OperationResult(200, null));
273
274     OperationState syncState = suggestionSynchronizer.doSync();
275     assertEquals(OperationState.OK, syncState);
276
277     assertNotNull(suggestionSynchronizer.getStatReport(false));
278     assertNotNull(suggestionSynchronizer.getStatReport(true));
279
280     suggestionSynchronizer.clearCache();
281     suggestionSynchronizer.shutdown();
282
283
284   }
285
286   @Test
287   public void validateSmallSyncWithRetries() throws Exception {
288
289     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
290         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
291
292
293     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
294     suggestionSynchronizer.setElasticSearchAdapter(esAdapter);
295
296     String nodesQueryResponse = TestResourceLoader
297         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
298
299     OperationResult genericVnfSelfLinks = new OperationResult();
300
301     genericVnfSelfLinks.setResultCode(200);
302     genericVnfSelfLinks.setResult(nodesQueryResponse);
303
304     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
305         .thenReturn(genericVnfSelfLinks);
306
307     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
308         .thenReturn(
309             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
310
311     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
312         .thenReturn(
313             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
314
315     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
316         .thenReturn(
317             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
318
319     Mockito
320         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
321             Mockito.anyString(), Mockito.anyInt()))
322         .thenReturn(new OperationResult(200, TestResourceLoader
323             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
324
325     Mockito
326         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
327             Mockito.anyString(), Mockito.anyInt()))
328         .thenReturn(new OperationResult(200, TestResourceLoader
329             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
330
331     Mockito
332         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
333             Mockito.anyString(), Mockito.anyInt()))
334         .thenReturn(new OperationResult(200, TestResourceLoader
335             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
336
337     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
338         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
339             "http://localhost:9200/myindex/mytype/doc2",
340             "http://localhost:9200/myindex/mytype/doc3");
341
342     /*
343      * Our initial gets from elastic search should be record-not-found
344      */
345     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
346         .thenReturn(new OperationResult(404, null));
347     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
348         .thenReturn(new OperationResult(404, null));
349     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
350         .thenReturn(new OperationResult(404, null));
351
352
353     /*
354      * Elastic Search puts always fail with a version conflict = 409
355      */
356
357     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
358         .thenReturn(new OperationResult(409, null));
359
360     OperationState syncState = suggestionSynchronizer.doSync();
361     assertEquals(OperationState.OK, syncState);
362
363     assertNotNull(suggestionSynchronizer.getStatReport(false));
364     assertNotNull(suggestionSynchronizer.getStatReport(true));
365
366     suggestionSynchronizer.clearCache();
367     suggestionSynchronizer.shutdown();
368
369
370   }
371 }