add test cases to increase coverage
[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.dal.ElasticSearchAdapter;
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 ElasticSearchAdapter esAdapter;
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     esAdapter = Mockito.mock(ElasticSearchAdapter.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     OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors);
162     oxmModelLoader.loadLatestOxmModel();
163
164     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
165   }
166
167   @Test
168   public void validateBasicConstruction() throws Exception {
169
170     viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
171         aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
172
173     viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
174     viewInspectSynchronizer.setElasticSearchAdapter(esAdapter);
175
176     assertNotNull(viewInspectSynchronizer.getAaiAdapter());
177     assertNotNull(viewInspectSynchronizer.getElasticSearchAdapter());
178
179   }
180
181   @Test
182   public void validateSmallSync() throws Exception {
183
184     viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
185         aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
186
187
188     viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
189     viewInspectSynchronizer.setElasticSearchAdapter(esAdapter);
190
191     String nodesQueryResponse = TestResourceLoader
192         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
193
194     OperationResult genericVnfSelfLinks = new OperationResult();
195
196     genericVnfSelfLinks.setResultCode(200);
197     genericVnfSelfLinks.setResult(nodesQueryResponse);
198
199     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
200         .thenReturn(genericVnfSelfLinks);
201
202     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
203         .thenReturn(
204             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
205
206     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
207         .thenReturn(
208             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
209
210     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
211         .thenReturn(
212             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
213
214     Mockito
215         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
216             Mockito.anyString(), Mockito.anyInt()))
217         .thenReturn(new OperationResult(200, TestResourceLoader
218             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
219
220     Mockito
221         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
222             Mockito.anyString(), Mockito.anyInt()))
223         .thenReturn(new OperationResult(200, TestResourceLoader
224             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
225
226     Mockito
227         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
228             Mockito.anyString(), Mockito.anyInt()))
229         .thenReturn(new OperationResult(200, TestResourceLoader
230             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
231
232     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
233         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
234             "http://localhost:9200/myindex/mytype/doc2",
235             "http://localhost:9200/myindex/mytype/doc3");
236
237     /*
238      * Our initial gets from elastic search should be record-not-found
239      */
240     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
241         .thenReturn(new OperationResult(404, null));
242     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
243         .thenReturn(new OperationResult(404, null));
244     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
245         .thenReturn(new OperationResult(404, null));
246
247
248     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
249         .thenReturn(new OperationResult(200, null));
250
251     OperationState syncState = viewInspectSynchronizer.doSync();
252     assertEquals(OperationState.OK, syncState);
253
254     assertNotNull(viewInspectSynchronizer.getStatReport(false));
255     assertNotNull(viewInspectSynchronizer.getStatReport(true));
256
257     viewInspectSynchronizer.clearCache();
258     viewInspectSynchronizer.shutdown();
259
260
261   }
262
263   @Test
264   public void validateSmallSyncWithRetries() throws Exception {
265
266     viewInspectSynchronizer = new ViewInspectEntitySynchronizer(esSchemaConfig, 5, 5, 5,
267         aaiStatConfig, esStatConfig, oxmEntityLookup, searchableEntityLookup);
268
269
270     viewInspectSynchronizer.setAaiAdapter(aaiAdapter);
271     viewInspectSynchronizer.setElasticSearchAdapter(esAdapter);
272
273     String nodesQueryResponse = TestResourceLoader
274         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
275
276     OperationResult genericVnfSelfLinks = new OperationResult();
277
278     genericVnfSelfLinks.setResultCode(200);
279     genericVnfSelfLinks.setResult(nodesQueryResponse);
280
281     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
282         .thenReturn(genericVnfSelfLinks);
283
284     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
285         .thenReturn(
286             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
287
288     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
289         .thenReturn(
290             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
291
292     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
293         .thenReturn(
294             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
295
296     Mockito
297         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
298             Mockito.anyString(), Mockito.anyInt()))
299         .thenReturn(new OperationResult(200, TestResourceLoader
300             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
301
302     Mockito
303         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
304             Mockito.anyString(), Mockito.anyInt()))
305         .thenReturn(new OperationResult(200, TestResourceLoader
306             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
307
308     Mockito
309         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
310             Mockito.anyString(), Mockito.anyInt()))
311         .thenReturn(new OperationResult(200, TestResourceLoader
312             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
313
314     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
315         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
316             "http://localhost:9200/myindex/mytype/doc2",
317             "http://localhost:9200/myindex/mytype/doc3");
318
319     /*
320      * Our initial gets from elastic search should be record-not-found
321      */
322     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
323         .thenReturn(new OperationResult(404, null));
324     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
325         .thenReturn(new OperationResult(404, null));
326     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
327         .thenReturn(new OperationResult(404, null));
328
329
330     /*
331      * Elastic Search puts always fail with a version conflict = 409
332      */
333
334     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
335         .thenReturn(new OperationResult(409, null));
336
337     OperationState syncState = viewInspectSynchronizer.doSync();
338     assertEquals(OperationState.OK, syncState);
339
340     assertNotNull(viewInspectSynchronizer.getStatReport(false));
341     assertNotNull(viewInspectSynchronizer.getStatReport(true));
342
343     viewInspectSynchronizer.clearCache();
344     viewInspectSynchronizer.shutdown();
345
346
347   }
348 }