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