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