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.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;
37 import com.fasterxml.jackson.databind.ObjectMapper;
38 import javax.inject.Inject;
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 {
47 private static ObjectMapper mapper = new ObjectMapper();
49 private HistoricalEntitySummarizer historicalSummarizer;
51 private ElasticSearchSchemaConfig esSchemaConfig;
52 private NetworkStatisticsConfig aaiStatConfig;
53 private NetworkStatisticsConfig esStatConfig;
55 private SearchableEntityLookup searchableEntityLookup;
56 private ElasticSearchAdapter esAdapter;
57 private ActiveInventoryAdapter aaiAdapter;
62 private NodeIngestor nodeInjest;
66 private OxmEntityLookup oxmEntityLookup;
71 public void init() throws Exception {
73 esSchemaConfig = new ElasticSearchSchemaConfig();
74 esSchemaConfig.setIndexDocType("default");
75 esSchemaConfig.setIndexMappingsFileName(null);
76 esSchemaConfig.setIndexName("aggregation-index-name");
77 esSchemaConfig.setIndexSettingsFileName(null);
80 aaiStatConfig = new NetworkStatisticsConfig();
82 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
84 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
85 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
86 aaiStatConfig.setBytesHistogramNumBins(20);
87 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
89 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
90 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
91 aaiStatConfig.setQueueLengthHistogramNumBins(20);
92 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
94 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
95 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
96 aaiStatConfig.setTaskAgeHistogramNumBins(20);
97 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
99 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
100 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
101 aaiStatConfig.setResponseTimeHistogramNumBins(20);
102 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
104 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
105 aaiStatConfig.setTpsHistogramMaxYAxis(100);
106 aaiStatConfig.setTpsHistogramNumBins(20);
107 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
109 esStatConfig = new NetworkStatisticsConfig();
111 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
113 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
114 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
115 esStatConfig.setBytesHistogramNumBins(20);
116 esStatConfig.setBytesHistogramNumDecimalPoints(2);
118 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
119 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
120 esStatConfig.setQueueLengthHistogramNumBins(20);
121 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
123 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
124 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
125 esStatConfig.setTaskAgeHistogramNumBins(20);
126 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
128 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
129 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
130 esStatConfig.setResponseTimeHistogramNumBins(20);
131 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
133 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
134 esStatConfig.setTpsHistogramMaxYAxis(100);
135 esStatConfig.setTpsHistogramNumBins(20);
136 esStatConfig.setTpsHistogramNumDecimalPoints(2);
138 oxmEntityLookup = new OxmEntityLookup();
140 esAdapter = Mockito.mock(ElasticSearchAdapter.class);
141 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
144 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
146 processors.add(oxmEntityLookup);
150 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
151 new HashMap<String, OxmEntityDescriptor>();
153 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
154 genericVnfDescriptor.setEntityName("generic-vnf");
155 List<String> pkeyNames = new ArrayList<String>();
156 pkeyNames.add("vnf-name");
158 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
160 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
163 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
165 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
166 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
167 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
172 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
174 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
176 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
178 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
181 searchableEntityLookup = new SearchableEntityLookup();
183 processors.add(searchableEntityLookup);
184 Version v = Version.V11;
185 OxmModelLoader oxmModelLoader = new OxmModelLoader(v, processors,nodeInjest);
186 oxmModelLoader.loadModel();
192 public void validateBasicConstruction() throws Exception {
194 historicalSummarizer = new HistoricalEntitySummarizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
195 esStatConfig, searchableEntityLookup);
197 historicalSummarizer.setAaiAdapter(aaiAdapter);
198 historicalSummarizer.setElasticSearchAdapter(esAdapter);
200 assertNotNull(historicalSummarizer.getAaiAdapter());
201 assertNotNull(historicalSummarizer.getElasticSearchAdapter());
206 public void validateSmallSync() throws Exception {
208 historicalSummarizer = new HistoricalEntitySummarizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
209 esStatConfig, searchableEntityLookup);
212 historicalSummarizer.setAaiAdapter(aaiAdapter);
213 historicalSummarizer.setElasticSearchAdapter(esAdapter);
215 String nodesQueryResponse = TestResourceLoader
216 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
218 OperationResult genericVnfSelfLinks = new OperationResult();
220 genericVnfSelfLinks.setResultCode(200);
221 genericVnfSelfLinks.setResult(nodesQueryResponse);
223 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
224 .thenReturn(genericVnfSelfLinks);
226 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
228 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
230 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
232 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
234 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
236 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
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")));
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")));
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")));
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");
262 * Our initial gets from elastic search should be record-not-found
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));
272 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
273 .thenReturn(new OperationResult(200, null));
275 OperationState syncState = historicalSummarizer.doSync();
276 assertEquals(OperationState.OK, syncState);
278 assertNotNull(historicalSummarizer.getStatReport(false));
279 assertNotNull(historicalSummarizer.getStatReport(true));
281 historicalSummarizer.clearCache();
282 historicalSummarizer.shutdown();
288 public void validateSmallSyncWithRetries() throws Exception {
290 historicalSummarizer = new HistoricalEntitySummarizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
291 esStatConfig, searchableEntityLookup);
294 historicalSummarizer.setAaiAdapter(aaiAdapter);
295 historicalSummarizer.setElasticSearchAdapter(esAdapter);
297 String nodesQueryResponse = TestResourceLoader
298 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
300 OperationResult genericVnfSelfLinks = new OperationResult();
302 genericVnfSelfLinks.setResultCode(200);
303 genericVnfSelfLinks.setResult(nodesQueryResponse);
305 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
306 .thenReturn(genericVnfSelfLinks);
308 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
310 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
312 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
314 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
316 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
318 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
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")));
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")));
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")));
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");
344 * Our initial gets from elastic search should be record-not-found
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));
355 * Elastic Search puts always fail with a version conflict = 409
358 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
359 .thenReturn(new OperationResult(409, null));
361 OperationState syncState = historicalSummarizer.doSync();
362 assertEquals(OperationState.OK, syncState);
364 assertNotNull(historicalSummarizer.getStatReport(false));
365 assertNotNull(historicalSummarizer.getStatReport(true));
367 historicalSummarizer.clearCache();
368 historicalSummarizer.shutdown();