1 package org.onap.aai.sparky.topology.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.GeoEntityLookup;
19 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
20 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
21 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
22 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
23 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
24 import org.onap.aai.sparky.dal.ElasticSearchAdapter;
25 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
26 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
27 import org.onap.aai.sparky.sync.enumeration.OperationState;
28 import org.onap.aai.sparky.util.TestResourceLoader;
30 import com.fasterxml.jackson.databind.ObjectMapper;
32 public class GeoSynchronizerTest {
34 private static ObjectMapper mapper = new ObjectMapper();
36 private GeoSynchronizer geoSynchronizer;
38 private ElasticSearchSchemaConfig esSchemaConfig;
39 private NetworkStatisticsConfig aaiStatConfig;
40 private NetworkStatisticsConfig esStatConfig;
41 private OxmEntityLookup oxmEntityLookup;
42 private GeoEntityLookup geoEntityLookup;
43 private ElasticSearchAdapter esAdapter;
44 private ActiveInventoryAdapter aaiAdapter;
49 public void init() throws Exception {
51 esSchemaConfig = new ElasticSearchSchemaConfig();
52 esSchemaConfig.setIndexDocType("default");
53 esSchemaConfig.setIndexMappingsFileName(null);
54 esSchemaConfig.setIndexName("aggregation-index-name");
55 esSchemaConfig.setIndexSettingsFileName(null);
58 aaiStatConfig = new NetworkStatisticsConfig();
60 aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
62 aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
63 aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
64 aaiStatConfig.setBytesHistogramNumBins(20);
65 aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
67 aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
68 aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
69 aaiStatConfig.setQueueLengthHistogramNumBins(20);
70 aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
72 aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
73 aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
74 aaiStatConfig.setTaskAgeHistogramNumBins(20);
75 aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
77 aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
78 aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
79 aaiStatConfig.setResponseTimeHistogramNumBins(20);
80 aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
82 aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
83 aaiStatConfig.setTpsHistogramMaxYAxis(100);
84 aaiStatConfig.setTpsHistogramNumBins(20);
85 aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
87 esStatConfig = new NetworkStatisticsConfig();
89 esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
91 esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
92 esStatConfig.setBytesHistogramMaxYAxis(1000000L);
93 esStatConfig.setBytesHistogramNumBins(20);
94 esStatConfig.setBytesHistogramNumDecimalPoints(2);
96 esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
97 esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
98 esStatConfig.setQueueLengthHistogramNumBins(20);
99 esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
101 esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
102 esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
103 esStatConfig.setTaskAgeHistogramNumBins(20);
104 esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
106 esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
107 esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
108 esStatConfig.setResponseTimeHistogramNumBins(20);
109 esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
111 esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
112 esStatConfig.setTpsHistogramMaxYAxis(100);
113 esStatConfig.setTpsHistogramNumBins(20);
114 esStatConfig.setTpsHistogramNumDecimalPoints(2);
116 oxmEntityLookup = new OxmEntityLookup();
118 esAdapter = Mockito.mock(ElasticSearchAdapter.class);
119 aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
122 Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
124 processors.add(oxmEntityLookup);
128 Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
129 new HashMap<String, OxmEntityDescriptor>();
131 OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
132 genericVnfDescriptor.setEntityName("generic-vnf");
133 List<String> pkeyNames = new ArrayList<String>();
134 pkeyNames.add("vnf-name");
136 genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
138 oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
141 oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
143 SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
144 genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
145 genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
150 * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
152 * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
154 * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
156 * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
159 geoEntityLookup = new GeoEntityLookup();
161 processors.add(geoEntityLookup);
163 // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
167 public void validateBasicConstruction() throws Exception {
169 geoSynchronizer = new GeoSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, esStatConfig,
170 geoEntityLookup, oxmEntityLookup);
172 geoSynchronizer.setAaiAdapter(aaiAdapter);
173 geoSynchronizer.setElasticSearchAdapter(esAdapter);
175 assertNotNull(geoSynchronizer.getAaiAdapter());
176 assertNotNull(geoSynchronizer.getElasticSearchAdapter());
181 public void validateSmallSync() throws Exception {
183 geoSynchronizer = new GeoSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, esStatConfig,
184 geoEntityLookup, oxmEntityLookup);
187 geoSynchronizer.setAaiAdapter(aaiAdapter);
188 geoSynchronizer.setElasticSearchAdapter(esAdapter);
190 String nodesQueryResponse = TestResourceLoader
191 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
193 OperationResult genericVnfSelfLinks = new OperationResult();
195 genericVnfSelfLinks.setResultCode(200);
196 genericVnfSelfLinks.setResult(nodesQueryResponse);
198 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
199 .thenReturn(genericVnfSelfLinks);
201 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
203 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
205 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
207 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
209 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
211 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
214 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
215 Mockito.anyString(), Mockito.anyInt()))
216 .thenReturn(new OperationResult(200, TestResourceLoader
217 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
220 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
221 Mockito.anyString(), Mockito.anyInt()))
222 .thenReturn(new OperationResult(200, TestResourceLoader
223 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
226 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
227 Mockito.anyString(), Mockito.anyInt()))
228 .thenReturn(new OperationResult(200, TestResourceLoader
229 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
231 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
232 .thenReturn("http://localhost:9200/myindex/mytype/doc1",
233 "http://server.proxy:9200/myindex/mytype/doc2",
234 "http://server.proxy:9200/myindex/mytype/doc3");
237 * Our initial gets from elastic search should be record-not-found
239 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
240 .thenReturn(new OperationResult(404, null));
241 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
242 .thenReturn(new OperationResult(404, null));
243 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
244 .thenReturn(new OperationResult(404, null));
247 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
248 .thenReturn(new OperationResult(200, null));
250 OperationState syncState = geoSynchronizer.doSync();
251 assertEquals(OperationState.OK, syncState);
253 assertNotNull(geoSynchronizer.getStatReport(false));
254 assertNotNull(geoSynchronizer.getStatReport(true));
256 geoSynchronizer.clearCache();
257 geoSynchronizer.shutdown();
263 public void validateSmallSyncWithRetries() throws Exception {
265 geoSynchronizer = new GeoSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, esStatConfig,
266 geoEntityLookup, oxmEntityLookup);
269 geoSynchronizer.setAaiAdapter(aaiAdapter);
270 geoSynchronizer.setElasticSearchAdapter(esAdapter);
272 String nodesQueryResponse = TestResourceLoader
273 .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
275 OperationResult genericVnfSelfLinks = new OperationResult();
277 genericVnfSelfLinks.setResultCode(200);
278 genericVnfSelfLinks.setResult(nodesQueryResponse);
280 Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
281 .thenReturn(genericVnfSelfLinks);
283 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
285 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
287 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
289 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
291 Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
293 "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
296 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
297 Mockito.anyString(), Mockito.anyInt()))
298 .thenReturn(new OperationResult(200, TestResourceLoader
299 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
302 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
303 Mockito.anyString(), Mockito.anyInt()))
304 .thenReturn(new OperationResult(200, TestResourceLoader
305 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
308 .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
309 Mockito.anyString(), Mockito.anyInt()))
310 .thenReturn(new OperationResult(200, TestResourceLoader
311 .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
313 Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
314 .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
315 "http://server.proxy:9200/myindex/mytype/doc2",
316 "http://server.proxy:9200/myindex/mytype/doc3");
319 * Our initial gets from elastic search should be record-not-found
321 Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
322 .thenReturn(new OperationResult(404, null));
323 Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
324 .thenReturn(new OperationResult(404, null));
325 Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
326 .thenReturn(new OperationResult(404, null));
330 * Elastic Search puts always fail with a version conflict = 409
333 Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
334 .thenReturn(new OperationResult(409, null));
336 OperationState syncState = geoSynchronizer.doSync();
337 assertEquals(OperationState.OK, syncState);
339 assertNotNull(geoSynchronizer.getStatReport(false));
340 assertNotNull(geoSynchronizer.getStatReport(true));
342 geoSynchronizer.clearCache();
343 geoSynchronizer.shutdown();