Merge "Remove duplicated code"
[aai/sparky-be.git] / sparkybe-onap-service / src / test / java / org / onap / aai / sparky / topology / sync / GeoSynchronizerTest.java
1 package org.onap.aai.sparky.topology.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.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;
29
30 import com.fasterxml.jackson.databind.ObjectMapper;
31
32 public class GeoSynchronizerTest {
33
34   private static ObjectMapper mapper = new ObjectMapper();
35
36   private GeoSynchronizer geoSynchronizer;
37
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;
45
46
47
48   @Before
49   public void init() throws Exception {
50
51     esSchemaConfig = new ElasticSearchSchemaConfig();
52     esSchemaConfig.setIndexDocType("default");
53     esSchemaConfig.setIndexMappingsFileName(null);
54     esSchemaConfig.setIndexName("aggregation-index-name");
55     esSchemaConfig.setIndexSettingsFileName(null);
56
57
58     aaiStatConfig = new NetworkStatisticsConfig();
59
60     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
61
62     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
63     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
64     aaiStatConfig.setBytesHistogramNumBins(20);
65     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
66
67     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
68     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
69     aaiStatConfig.setQueueLengthHistogramNumBins(20);
70     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
71
72     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
73     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
74     aaiStatConfig.setTaskAgeHistogramNumBins(20);
75     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
76
77     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
78     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
79     aaiStatConfig.setResponseTimeHistogramNumBins(20);
80     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
81
82     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
83     aaiStatConfig.setTpsHistogramMaxYAxis(100);
84     aaiStatConfig.setTpsHistogramNumBins(20);
85     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
86
87     esStatConfig = new NetworkStatisticsConfig();
88
89     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
90
91     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
92     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
93     esStatConfig.setBytesHistogramNumBins(20);
94     esStatConfig.setBytesHistogramNumDecimalPoints(2);
95
96     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
97     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
98     esStatConfig.setQueueLengthHistogramNumBins(20);
99     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
100
101     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
102     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
103     esStatConfig.setTaskAgeHistogramNumBins(20);
104     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
105
106     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
107     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
108     esStatConfig.setResponseTimeHistogramNumBins(20);
109     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
110
111     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
112     esStatConfig.setTpsHistogramMaxYAxis(100);
113     esStatConfig.setTpsHistogramNumBins(20);
114     esStatConfig.setTpsHistogramNumDecimalPoints(2);
115
116     oxmEntityLookup = new OxmEntityLookup();
117
118     esAdapter = Mockito.mock(ElasticSearchAdapter.class);
119     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
120
121
122     Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
123
124     processors.add(oxmEntityLookup);
125
126
127
128     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
129         new HashMap<String, OxmEntityDescriptor>();
130
131     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
132     genericVnfDescriptor.setEntityName("generic-vnf");
133     List<String> pkeyNames = new ArrayList<String>();
134     pkeyNames.add("vnf-name");
135
136     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
137
138     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
139
140
141     oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
142
143     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
144     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
145     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
146
147
148
149     /*
150      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
151      *
152      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
153      *
154      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
155      *
156      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
157      */
158
159     geoEntityLookup = new GeoEntityLookup();
160
161     processors.add(geoEntityLookup);
162  
163     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
164   }
165
166   @Test
167   public void validateBasicConstruction() throws Exception {
168
169     geoSynchronizer = new GeoSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, esStatConfig,
170         geoEntityLookup, oxmEntityLookup);
171
172     geoSynchronizer.setAaiAdapter(aaiAdapter);
173     geoSynchronizer.setElasticSearchAdapter(esAdapter);
174
175     assertNotNull(geoSynchronizer.getAaiAdapter());
176     assertNotNull(geoSynchronizer.getElasticSearchAdapter());
177
178   }
179
180   @Test
181   public void validateSmallSync() throws Exception {
182
183     geoSynchronizer = new GeoSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, esStatConfig,
184         geoEntityLookup, oxmEntityLookup);
185
186
187     geoSynchronizer.setAaiAdapter(aaiAdapter);
188     geoSynchronizer.setElasticSearchAdapter(esAdapter);
189
190     String nodesQueryResponse = TestResourceLoader
191         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
192
193     OperationResult genericVnfSelfLinks = new OperationResult();
194
195     genericVnfSelfLinks.setResultCode(200);
196     genericVnfSelfLinks.setResult(nodesQueryResponse);
197
198     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
199         .thenReturn(genericVnfSelfLinks);
200
201     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
202         .thenReturn(
203             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
204
205     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
206         .thenReturn(
207             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
208
209     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
210         .thenReturn(
211             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
212
213     Mockito
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")));
218
219     Mockito
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")));
224
225     Mockito
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")));
230
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");
235
236     /*
237      * Our initial gets from elastic search should be record-not-found
238      */
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));
245
246
247     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
248         .thenReturn(new OperationResult(200, null));
249
250     OperationState syncState = geoSynchronizer.doSync();
251     assertEquals(OperationState.OK, syncState);
252
253     assertNotNull(geoSynchronizer.getStatReport(false));
254     assertNotNull(geoSynchronizer.getStatReport(true));
255
256     geoSynchronizer.clearCache();
257     geoSynchronizer.shutdown();
258
259
260   }
261
262   @Test
263   public void validateSmallSyncWithRetries() throws Exception {
264
265     geoSynchronizer = new GeoSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, esStatConfig,
266         geoEntityLookup, oxmEntityLookup);
267
268
269     geoSynchronizer.setAaiAdapter(aaiAdapter);
270     geoSynchronizer.setElasticSearchAdapter(esAdapter);
271
272     String nodesQueryResponse = TestResourceLoader
273         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
274
275     OperationResult genericVnfSelfLinks = new OperationResult();
276
277     genericVnfSelfLinks.setResultCode(200);
278     genericVnfSelfLinks.setResult(nodesQueryResponse);
279
280     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
281         .thenReturn(genericVnfSelfLinks);
282
283     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
284         .thenReturn(
285             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
286
287     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
288         .thenReturn(
289             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
290
291     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
292         .thenReturn(
293             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
294
295     Mockito
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")));
300
301     Mockito
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")));
306
307     Mockito
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")));
312
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");
317
318     /*
319      * Our initial gets from elastic search should be record-not-found
320      */
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));
327
328
329     /*
330      * Elastic Search puts always fail with a version conflict = 409
331      */
332
333     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
334         .thenReturn(new OperationResult(409, null));
335
336     OperationState syncState = geoSynchronizer.doSync();
337     assertEquals(OperationState.OK, syncState);
338
339     assertNotNull(geoSynchronizer.getStatReport(false));
340     assertNotNull(geoSynchronizer.getStatReport(true));
341
342     geoSynchronizer.clearCache();
343     geoSynchronizer.shutdown();
344
345
346   }
347 }