update sparky with configurable features
[aai/sparky-be.git] / sparkybe-onap-service / src / test / java / org / onap / aai / sparky / autosuggestion / sync / VnfAliasSuggestionSynchronizerTest.java
1 package org.onap.aai.sparky.autosuggestion.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.OxmModelLoader;
22 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
23 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
24 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
25 import org.onap.aai.sparky.search.SearchServiceAdapter;
26 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
27 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
28 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
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
34 import com.fasterxml.jackson.databind.ObjectMapper;
35
36 public class VnfAliasSuggestionSynchronizerTest {
37
38   private static ObjectMapper mapper = new ObjectMapper();
39
40   private VnfAliasSuggestionSynchronizer vnfAliasSuggestionSynchronizer;
41
42   private ElasticSearchSchemaConfig esSchemaConfig;
43   private NetworkStatisticsConfig aaiStatConfig;
44   private NetworkStatisticsConfig esStatConfig;
45   private OxmEntityLookup oxmEntityLookup;
46   private GeoEntityLookup geoEntityLookup;
47   private SearchServiceAdapter searchServiceAdapter;
48   private ActiveInventoryAdapter aaiAdapter;
49   private FiltersConfig filtersConfig;
50
51
52
53   @Before
54   public void init() throws Exception {
55
56     esSchemaConfig = new ElasticSearchSchemaConfig();
57     esSchemaConfig.setIndexDocType("default");
58     esSchemaConfig.setIndexMappingsFileName(null);
59     esSchemaConfig.setIndexName("aggregation-index-name");
60     esSchemaConfig.setIndexSettingsFileName(null);
61
62
63     aaiStatConfig = new NetworkStatisticsConfig();
64
65     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
66
67     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
68     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
69     aaiStatConfig.setBytesHistogramNumBins(20);
70     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
71
72     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
73     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
74     aaiStatConfig.setQueueLengthHistogramNumBins(20);
75     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
76
77     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
78     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
79     aaiStatConfig.setTaskAgeHistogramNumBins(20);
80     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
81
82     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
83     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
84     aaiStatConfig.setResponseTimeHistogramNumBins(20);
85     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
86
87     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
88     aaiStatConfig.setTpsHistogramMaxYAxis(100);
89     aaiStatConfig.setTpsHistogramNumBins(20);
90     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
91
92     esStatConfig = new NetworkStatisticsConfig();
93
94     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
95
96     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
97     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
98     esStatConfig.setBytesHistogramNumBins(20);
99     esStatConfig.setBytesHistogramNumDecimalPoints(2);
100
101     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
102     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
103     esStatConfig.setQueueLengthHistogramNumBins(20);
104     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
105
106     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
107     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
108     esStatConfig.setTaskAgeHistogramNumBins(20);
109     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
110
111     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
112     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
113     esStatConfig.setResponseTimeHistogramNumBins(20);
114     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
115
116     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
117     esStatConfig.setTpsHistogramMaxYAxis(100);
118     esStatConfig.setTpsHistogramNumBins(20);
119     esStatConfig.setTpsHistogramNumDecimalPoints(2);
120
121     oxmEntityLookup = new OxmEntityLookup();
122
123     searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
124     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
125
126
127     Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
128
129     processors.add(oxmEntityLookup);
130
131     filtersConfig = new FiltersConfig();
132
133     FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
134         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
135         FiltersDetailsConfig.class);
136     FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
137         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
138         FiltersForViewsConfig.class);
139
140     filtersConfig.setFiltersConfig(filtersDetailsConfig);
141     filtersConfig.setViewsConfig(filtersForViewsConfig);
142
143     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
144         new HashMap<String, OxmEntityDescriptor>();
145
146     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
147     genericVnfDescriptor.setEntityName("generic-vnf");
148     List<String> pkeyNames = new ArrayList<String>();
149     pkeyNames.add("vnf-name");
150
151     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
152
153     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
154
155
156     oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
157
158     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
159     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
160     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
161
162
163
164     /*
165      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
166      *
167      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
168      *
169      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
170      *
171      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
172      */
173
174     geoEntityLookup = new GeoEntityLookup();
175
176     processors.add(geoEntityLookup);
177
178   
179     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
180   }
181
182   @Test
183   public void validateBasicConstruction() throws Exception {
184
185     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
186         aaiStatConfig, esStatConfig, filtersConfig);
187
188     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
189     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
190
191     assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
192     assertNotNull(vnfAliasSuggestionSynchronizer.getSearchServiceAdapter());
193
194   }
195
196   @Test
197   public void validateSmallSync() throws Exception {
198
199     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
200         aaiStatConfig, esStatConfig, filtersConfig);
201
202
203     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
204     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
205
206     String nodesQueryResponse = TestResourceLoader
207         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
208
209     OperationResult genericVnfSelfLinks = new OperationResult();
210
211     genericVnfSelfLinks.setResultCode(200);
212     genericVnfSelfLinks.setResult(nodesQueryResponse);
213
214     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
215         .thenReturn(genericVnfSelfLinks);
216
217     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
218         .thenReturn(
219             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
220
221     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
222         .thenReturn(
223             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
224
225     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
226         .thenReturn(
227             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
228
229     Mockito
230         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
231             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
232         .thenReturn(new OperationResult(200, TestResourceLoader
233             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
234
235     Mockito
236         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
237             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
238         .thenReturn(new OperationResult(200, TestResourceLoader
239             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
240
241     Mockito
242         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
243             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
244         .thenReturn(new OperationResult(200, TestResourceLoader
245             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
246
247     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
248         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
249             "http://server.proxy:9200/myindex/mytype/doc2",
250             "http://server.proxy:9200/myindex/mytype/doc3");
251
252     /*
253      * Our initial gets from elastic search should be record-not-found
254      */
255     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
256         .thenReturn(new OperationResult(404, null));
257     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
258         .thenReturn(new OperationResult(404, null));
259     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
260         .thenReturn(new OperationResult(404, null));
261
262
263     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
264         .thenReturn(new OperationResult(200, null));
265
266     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
267     assertEquals(OperationState.OK, syncState);
268
269     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
270     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
271
272     vnfAliasSuggestionSynchronizer.clearCache();
273     vnfAliasSuggestionSynchronizer.shutdown();
274
275
276   }
277
278   @Test
279   public void validateSmallSyncWithRetries() throws Exception {
280
281     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
282         aaiStatConfig, esStatConfig, filtersConfig);
283
284
285     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
286     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
287
288     String nodesQueryResponse = TestResourceLoader
289         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
290
291     OperationResult genericVnfSelfLinks = new OperationResult();
292
293     genericVnfSelfLinks.setResultCode(200);
294     genericVnfSelfLinks.setResult(nodesQueryResponse);
295
296     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
297         .thenReturn(genericVnfSelfLinks);
298
299     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
300         .thenReturn(
301             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
302
303     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
304         .thenReturn(
305             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
306
307     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
308         .thenReturn(
309             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
310
311     Mockito
312         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
313             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
314         .thenReturn(new OperationResult(200, TestResourceLoader
315             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
316
317     Mockito
318         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
319             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
320         .thenReturn(new OperationResult(200, TestResourceLoader
321             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
322
323     Mockito
324         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
325             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
326         .thenReturn(new OperationResult(200, TestResourceLoader
327             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
328
329     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
330         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
331             "http://server.proxy:9200/myindex/mytype/doc2",
332             "http://server.proxy:9200/myindex/mytype/doc3");
333
334     /*
335      * Our initial gets from elastic search should be record-not-found
336      */
337     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
338         .thenReturn(new OperationResult(404, null));
339     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
340         .thenReturn(new OperationResult(404, null));
341     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
342         .thenReturn(new OperationResult(404, null));
343
344
345     /*
346      * Elastic Search puts always fail with a version conflict = 409
347      */
348
349     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
350         .thenReturn(new OperationResult(409, null));
351
352     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
353     assertEquals(OperationState.OK, syncState);
354
355     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
356     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
357
358     vnfAliasSuggestionSynchronizer.clearCache();
359     vnfAliasSuggestionSynchronizer.shutdown();
360
361
362   }
363 }