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