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