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