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