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