1 package org.onap.aai.sparky.aggregation.sync;
3 import static org.junit.Assert.assertEquals;
4 import static org.junit.Assert.assertNotNull;
6 import java.util.ArrayList;
7 import java.util.HashMap;
8 import java.util.HashSet;
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;
31 import com.fasterxml.jackson.databind.ObjectMapper;
33 public class HistoricalEntitySummarizerTest {
35 private static ObjectMapper mapper = new ObjectMapper();
37 private HistoricalEntitySummarizer historicalSummarizer;
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;
50 public void init() throws Exception {
52 esSchemaConfig = new ElasticSearchSchemaConfig();
53 esSchemaConfig.setIndexDocType("default");
54 esSchemaConfig.setIndexMappingsFileName(null);
55 esSchemaConfig.setIndexName("aggregation-index-name");
56 esSchemaConfig.setIndexSettingsFileName(null);
59 aaiStatConfig = new NetworkStatisticsConfig();
61 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
63 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
64 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
65 aaiStatConfig.setBytesHistogramNumBins(20);
66 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
68 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
69 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
70 aaiStatConfig.setQueueLengthHistogramNumBins(20);
71 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
73 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
74 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
75 aaiStatConfig.setTaskAgeHistogramNumBins(20);
76 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
78 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
79 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
80 aaiStatConfig.setResponseTimeHistogramNumBins(20);
81 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
83 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
84 aaiStatConfig.setTpsHistogramMaxYAxis(100);
85 aaiStatConfig.setTpsHistogramNumBins(20);
86 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
88 esStatConfig = new NetworkStatisticsConfig();
90 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
92 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
93 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
94 esStatConfig.setBytesHistogramNumBins(20);
95 esStatConfig.setBytesHistogramNumDecimalPoints(2);
97 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
98 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
99 esStatConfig.setQueueLengthHistogramNumBins(20);
100 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
102 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
103 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
104 esStatConfig.setTaskAgeHistogramNumBins(20);
105 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
107 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
108 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
109 esStatConfig.setResponseTimeHistogramNumBins(20);
110 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
112 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
113 esStatConfig.setTpsHistogramMaxYAxis(100);
114 esStatConfig.setTpsHistogramNumBins(20);
115 esStatConfig.setTpsHistogramNumDecimalPoints(2);
117 oxmEntityLookup = new OxmEntityLookup();
119 esAdapter = Mockito.mock(ElasticSearchAdapter.class);
120 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
123 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
125 processors.add(oxmEntityLookup);
129 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
130 new HashMap<String, OxmEntityDescriptor>();
132 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
133 genericVnfDescriptor.setEntityName("generic-vnf");
134 List<String> pkeyNames = new ArrayList<String>();
135 pkeyNames.add("vnf-name");
137 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
139 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
142 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
144 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
145 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
146 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
151 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
153 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
155 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
157 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
160 searchableEntityLookup = new SearchableEntityLookup();
162 processors.add(searchableEntityLookup);
164 OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors);
165 oxmModelLoader.loadLatestOxmModel();
167 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
171 public void validateBasicConstruction() throws Exception {
173 historicalSummarizer = new HistoricalEntitySummarizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
174 esStatConfig, searchableEntityLookup);
176 historicalSummarizer.setAaiAdapter(aaiAdapter);
177 historicalSummarizer.setElasticSearchAdapter(esAdapter);
179 assertNotNull(historicalSummarizer.getAaiAdapter());
180 assertNotNull(historicalSummarizer.getElasticSearchAdapter());
185 public void validateSmallSync() throws Exception {
187 historicalSummarizer = new HistoricalEntitySummarizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
188 esStatConfig, searchableEntityLookup);
191 historicalSummarizer.setAaiAdapter(aaiAdapter);
192 historicalSummarizer.setElasticSearchAdapter(esAdapter);
194 String nodesQueryResponse = TestResourceLoader
195 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
197 OperationResult genericVnfSelfLinks = new OperationResult();
199 genericVnfSelfLinks.setResultCode(200);
200 genericVnfSelfLinks.setResult(nodesQueryResponse);
202 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
203 .thenReturn(genericVnfSelfLinks);
205 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
207 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
209 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
211 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
213 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
215 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
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")));
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")));
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")));
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");
241 * Our initial gets from elastic search should be record-not-found
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));
251 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
252 .thenReturn(new OperationResult(200, null));
254 OperationState syncState = historicalSummarizer.doSync();
255 assertEquals(OperationState.OK, syncState);
257 assertNotNull(historicalSummarizer.getStatReport(false));
258 assertNotNull(historicalSummarizer.getStatReport(true));
260 historicalSummarizer.clearCache();
261 historicalSummarizer.shutdown();
267 public void validateSmallSyncWithRetries() throws Exception {
269 historicalSummarizer = new HistoricalEntitySummarizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
270 esStatConfig, searchableEntityLookup);
273 historicalSummarizer.setAaiAdapter(aaiAdapter);
274 historicalSummarizer.setElasticSearchAdapter(esAdapter);
276 String nodesQueryResponse = TestResourceLoader
277 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
279 OperationResult genericVnfSelfLinks = new OperationResult();
281 genericVnfSelfLinks.setResultCode(200);
282 genericVnfSelfLinks.setResult(nodesQueryResponse);
284 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
285 .thenReturn(genericVnfSelfLinks);
287 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
289 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
291 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
293 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
295 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
297 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
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")));
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")));
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")));
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");
323 * Our initial gets from elastic search should be record-not-found
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));
334 * Elastic Search puts always fail with a version conflict = 409
337 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
338 .thenReturn(new OperationResult(409, null));
340 OperationState syncState = historicalSummarizer.doSync();
341 assertEquals(OperationState.OK, syncState);
343 assertNotNull(historicalSummarizer.getStatReport(false));
344 assertNotNull(historicalSummarizer.getStatReport(true));
346 historicalSummarizer.clearCache();
347 historicalSummarizer.shutdown();