1 package org.onap.aai.sparky.viewandinspect.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;
30 import org.onap.aai.sparky.viewinspect.sync.ViewInspectEntitySynchronizer;
32 public class ViewInspectEntitySynchronizerTest {
34 private ViewInspectEntitySynchronizer viewInspectSynchronizer;
36 private ElasticSearchSchemaConfig esSchemaConfig;
37 private NetworkStatisticsConfig aaiStatConfig;
38 private NetworkStatisticsConfig esStatConfig;
39 private OxmEntityLookup oxmEntityLookup;
40 private SearchableEntityLookup searchableEntityLookup;
41 private ElasticSearchAdapter esAdapter;
42 private ActiveInventoryAdapter aaiAdapter;
47 public void init() throws Exception {
49 esSchemaConfig = new ElasticSearchSchemaConfig();
50 esSchemaConfig.setIndexDocType("default");
51 esSchemaConfig.setIndexMappingsFileName(null);
52 esSchemaConfig.setIndexName("aggregation-index-name");
53 esSchemaConfig.setIndexSettingsFileName(null);
56 aaiStatConfig = new NetworkStatisticsConfig();
58 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
60 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
61 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
62 aaiStatConfig.setBytesHistogramNumBins(20);
63 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
65 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
66 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
67 aaiStatConfig.setQueueLengthHistogramNumBins(20);
68 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
70 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
71 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
72 aaiStatConfig.setTaskAgeHistogramNumBins(20);
73 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
75 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
76 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
77 aaiStatConfig.setResponseTimeHistogramNumBins(20);
78 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
80 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
81 aaiStatConfig.setTpsHistogramMaxYAxis(100);
82 aaiStatConfig.setTpsHistogramNumBins(20);
83 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
85 esStatConfig = new NetworkStatisticsConfig();
87 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
89 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
90 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
91 esStatConfig.setBytesHistogramNumBins(20);
92 esStatConfig.setBytesHistogramNumDecimalPoints(2);
94 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
95 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
96 esStatConfig.setQueueLengthHistogramNumBins(20);
97 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
99 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
100 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
101 esStatConfig.setTaskAgeHistogramNumBins(20);
102 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
104 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
105 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
106 esStatConfig.setResponseTimeHistogramNumBins(20);
107 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
109 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
110 esStatConfig.setTpsHistogramMaxYAxis(100);
111 esStatConfig.setTpsHistogramNumBins(20);
112 esStatConfig.setTpsHistogramNumDecimalPoints(2);
114 oxmEntityLookup = new OxmEntityLookup();
116 esAdapter = Mockito.mock(ElasticSearchAdapter.class);
117 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
120 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
122 processors.add(oxmEntityLookup);
126 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
127 new HashMap<String, OxmEntityDescriptor>();
129 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
130 genericVnfDescriptor.setEntityName("generic-vnf");
131 List<String> pkeyNames = new ArrayList<String>();
132 pkeyNames.add("vnf-name");
134 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
136 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
139 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
141 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
142 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
143 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
148 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
150 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
152 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
154 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
157 searchableEntityLookup = new SearchableEntityLookup();
159 processors.add(searchableEntityLookup);
161 OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors);
162 oxmModelLoader.loadLatestOxmModel();
164 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
168 public void validateBasicConstruction() throws Exception {
170 viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
171 aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
173 viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
174 viewInspectSynchronizer.setElasticSearchAdapter(esAdapter);
176 assertNotNull(viewInspectSynchronizer.getAaiAdapter());
177 assertNotNull(viewInspectSynchronizer.getElasticSearchAdapter());
182 public void validateSmallSync() throws Exception {
184 viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
185 aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
188 viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
189 viewInspectSynchronizer.setElasticSearchAdapter(esAdapter);
191 String nodesQueryResponse = TestResourceLoader
192 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
194 OperationResult genericVnfSelfLinks = new OperationResult();
196 genericVnfSelfLinks.setResultCode(200);
197 genericVnfSelfLinks.setResult(nodesQueryResponse);
199 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
200 .thenReturn(genericVnfSelfLinks);
202 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
204 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
206 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
208 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
210 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
212 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
215 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
216 Mockito.anyString(), Mockito.anyInt()))
217 .thenReturn(new OperationResult(200, TestResourceLoader
218 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
221 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
222 Mockito.anyString(), Mockito.anyInt()))
223 .thenReturn(new OperationResult(200, TestResourceLoader
224 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
227 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
228 Mockito.anyString(), Mockito.anyInt()))
229 .thenReturn(new OperationResult(200, TestResourceLoader
230 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
232 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
233 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
234 "http://localhost:9200/myindex/mytype/doc2",
235 "http://localhost:9200/myindex/mytype/doc3");
238 * Our initial gets from elastic search should be record-not-found
240 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
241 .thenReturn(new OperationResult(404, null));
242 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
243 .thenReturn(new OperationResult(404, null));
244 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
245 .thenReturn(new OperationResult(404, null));
248 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
249 .thenReturn(new OperationResult(200, null));
251 OperationState syncState = viewInspectSynchronizer.doSync();
252 assertEquals(OperationState.OK, syncState);
254 assertNotNull(viewInspectSynchronizer.getStatReport(false));
255 assertNotNull(viewInspectSynchronizer.getStatReport(true));
257 viewInspectSynchronizer.clearCache();
258 viewInspectSynchronizer.shutdown();
264 public void validateSmallSyncWithRetries() throws Exception {
266 viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
267 aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
270 viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
271 viewInspectSynchronizer.setElasticSearchAdapter(esAdapter);
273 String nodesQueryResponse = TestResourceLoader
274 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
276 OperationResult genericVnfSelfLinks = new OperationResult();
278 genericVnfSelfLinks.setResultCode(200);
279 genericVnfSelfLinks.setResult(nodesQueryResponse);
281 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
282 .thenReturn(genericVnfSelfLinks);
284 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
286 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
288 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
290 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
292 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
294 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
297 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
298 Mockito.anyString(), Mockito.anyInt()))
299 .thenReturn(new OperationResult(200, TestResourceLoader
300 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
303 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
304 Mockito.anyString(), Mockito.anyInt()))
305 .thenReturn(new OperationResult(200, TestResourceLoader
306 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
309 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
310 Mockito.anyString(), Mockito.anyInt()))
311 .thenReturn(new OperationResult(200, TestResourceLoader
312 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
314 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
315 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
316 "http://localhost:9200/myindex/mytype/doc2",
317 "http://localhost:9200/myindex/mytype/doc3");
320 * Our initial gets from elastic search should be record-not-found
322 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
323 .thenReturn(new OperationResult(404, null));
324 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
325 .thenReturn(new OperationResult(404, null));
326 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
327 .thenReturn(new OperationResult(404, null));
331 * Elastic Search puts always fail with a version conflict = 409
334 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
335 .thenReturn(new OperationResult(409, null));
337 OperationState syncState = viewInspectSynchronizer.doSync();
338 assertEquals(OperationState.OK, syncState);
340 assertNotNull(viewInspectSynchronizer.getStatReport(false));
341 assertNotNull(viewInspectSynchronizer.getStatReport(true));
343 viewInspectSynchronizer.clearCache();
344 viewInspectSynchronizer.shutdown();