1 package org.onap.aai.sparky.autosuggestion.sync;
 
   3 import static org.junit.Assert.assertEquals;
 
   4 import static org.junit.Assert.assertNotNull;
 
   6 import java.util.ArrayList;
 
   7 import java.util.HashMap;
 
   8 import java.util.HashSet;
 
  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.GeoEntityLookup;
 
  19 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
 
  20 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
 
  21 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
 
  22 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
 
  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.search.filters.config.FiltersConfig;
 
  27 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
 
  28 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
 
  29 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
 
  30 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
 
  31 import org.onap.aai.sparky.sync.enumeration.OperationState;
 
  32 import org.onap.aai.sparky.util.TestResourceLoader;
 
  34 import com.fasterxml.jackson.databind.ObjectMapper;
 
  36 public class VnfAliasSuggestionSynchronizerTest {
 
  38   private static ObjectMapper mapper = new ObjectMapper();
 
  40   private VnfAliasSuggestionSynchronizer vnfAliasSuggestionSynchronizer;
 
  42   private ElasticSearchSchemaConfig esSchemaConfig;
 
  43   private NetworkStatisticsConfig aaiStatConfig;
 
  44   private NetworkStatisticsConfig esStatConfig;
 
  45   private OxmEntityLookup oxmEntityLookup;
 
  46   private GeoEntityLookup geoEntityLookup;
 
  47   private ElasticSearchAdapter esAdapter;
 
  48   private ActiveInventoryAdapter aaiAdapter;
 
  49   private FiltersConfig filtersConfig;
 
  54   public void init() throws Exception {
 
  56     esSchemaConfig = new ElasticSearchSchemaConfig();
 
  57     esSchemaConfig.setIndexDocType("default");
 
  58     esSchemaConfig.setIndexMappingsFileName(null);
 
  59     esSchemaConfig.setIndexName("aggregation-index-name");
 
  60     esSchemaConfig.setIndexSettingsFileName(null);
 
  63     aaiStatConfig = new NetworkStatisticsConfig();
 
  65     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
  67     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
  68     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
  69     aaiStatConfig.setBytesHistogramNumBins(20);
 
  70     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
 
  72     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
  73     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
  74     aaiStatConfig.setQueueLengthHistogramNumBins(20);
 
  75     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
  77     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
  78     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
  79     aaiStatConfig.setTaskAgeHistogramNumBins(20);
 
  80     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
  82     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
  83     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
 
  84     aaiStatConfig.setResponseTimeHistogramNumBins(20);
 
  85     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
  87     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
  88     aaiStatConfig.setTpsHistogramMaxYAxis(100);
 
  89     aaiStatConfig.setTpsHistogramNumBins(20);
 
  90     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
 
  92     esStatConfig = new NetworkStatisticsConfig();
 
  94     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
  96     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
  97     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
  98     esStatConfig.setBytesHistogramNumBins(20);
 
  99     esStatConfig.setBytesHistogramNumDecimalPoints(2);
 
 101     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
 102     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
 103     esStatConfig.setQueueLengthHistogramNumBins(20);
 
 104     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
 106     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
 107     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
 108     esStatConfig.setTaskAgeHistogramNumBins(20);
 
 109     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
 111     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
 112     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
 
 113     esStatConfig.setResponseTimeHistogramNumBins(20);
 
 114     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
 116     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
 117     esStatConfig.setTpsHistogramMaxYAxis(100);
 
 118     esStatConfig.setTpsHistogramNumBins(20);
 
 119     esStatConfig.setTpsHistogramNumDecimalPoints(2);
 
 121     oxmEntityLookup = new OxmEntityLookup();
 
 123     esAdapter = Mockito.mock(ElasticSearchAdapter.class);
 
 124     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
 
 127     Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
 
 129     processors.add(oxmEntityLookup);
 
 131     filtersConfig = new FiltersConfig();
 
 133     FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
 
 134         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
 
 135         FiltersDetailsConfig.class);
 
 136     FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
 
 137         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
 
 138         FiltersForViewsConfig.class);
 
 140     filtersConfig.setFiltersConfig(filtersDetailsConfig);
 
 141     filtersConfig.setViewsConfig(filtersForViewsConfig);
 
 143     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
 
 144         new HashMap<String, OxmEntityDescriptor>();
 
 146     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
 
 147     genericVnfDescriptor.setEntityName("generic-vnf");
 
 148     List<String> pkeyNames = new ArrayList<String>();
 
 149     pkeyNames.add("vnf-name");
 
 151     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 153     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
 
 156     oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
 
 158     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
 
 159     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
 
 160     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 165      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
 
 167      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
 
 169      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
 
 171      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
 
 174     geoEntityLookup = new GeoEntityLookup();
 
 176     processors.add(geoEntityLookup);
 
 178     OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors);
 
 179     oxmModelLoader.loadLatestOxmModel();
 
 181     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
 
 185   public void validateBasicConstruction() throws Exception {
 
 187     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
 
 188         aaiStatConfig, esStatConfig, filtersConfig);
 
 190     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 191     vnfAliasSuggestionSynchronizer.setElasticSearchAdapter(esAdapter);
 
 193     assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
 
 194     assertNotNull(vnfAliasSuggestionSynchronizer.getElasticSearchAdapter());
 
 199   public void validateSmallSync() throws Exception {
 
 201     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
 
 202         aaiStatConfig, esStatConfig, filtersConfig);
 
 205     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 206     vnfAliasSuggestionSynchronizer.setElasticSearchAdapter(esAdapter);
 
 208     String nodesQueryResponse = TestResourceLoader
 
 209         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 211     OperationResult genericVnfSelfLinks = new OperationResult();
 
 213     genericVnfSelfLinks.setResultCode(200);
 
 214     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 216     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 217         .thenReturn(genericVnfSelfLinks);
 
 219     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
 
 221             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 223     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
 
 225             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 227     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 229             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 232         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
 
 233             Mockito.anyString(), Mockito.anyInt()))
 
 234         .thenReturn(new OperationResult(200, TestResourceLoader
 
 235             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 238         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
 
 239             Mockito.anyString(), Mockito.anyInt()))
 
 240         .thenReturn(new OperationResult(200, TestResourceLoader
 
 241             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 244         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 245             Mockito.anyString(), Mockito.anyInt()))
 
 246         .thenReturn(new OperationResult(200, TestResourceLoader
 
 247             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 249     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 250         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
 
 251             "http://localhost:9200/myindex/mytype/doc2",
 
 252             "http://localhost:9200/myindex/mytype/doc3");
 
 255      * Our initial gets from elastic search should be record-not-found
 
 257     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 258         .thenReturn(new OperationResult(404, null));
 
 259     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 260         .thenReturn(new OperationResult(404, null));
 
 261     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 262         .thenReturn(new OperationResult(404, null));
 
 265     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 266         .thenReturn(new OperationResult(200, null));
 
 268     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
 
 269     assertEquals(OperationState.OK, syncState);
 
 271     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
 
 272     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
 
 274     vnfAliasSuggestionSynchronizer.clearCache();
 
 275     vnfAliasSuggestionSynchronizer.shutdown();
 
 281   public void validateSmallSyncWithRetries() throws Exception {
 
 283     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
 
 284         aaiStatConfig, esStatConfig, filtersConfig);
 
 287     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 288     vnfAliasSuggestionSynchronizer.setElasticSearchAdapter(esAdapter);
 
 290     String nodesQueryResponse = TestResourceLoader
 
 291         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 293     OperationResult genericVnfSelfLinks = new OperationResult();
 
 295     genericVnfSelfLinks.setResultCode(200);
 
 296     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 298     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 299         .thenReturn(genericVnfSelfLinks);
 
 301     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
 
 303             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 305     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
 
 307             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 309     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 311             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 314         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
 
 315             Mockito.anyString(), Mockito.anyInt()))
 
 316         .thenReturn(new OperationResult(200, TestResourceLoader
 
 317             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 320         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
 
 321             Mockito.anyString(), Mockito.anyInt()))
 
 322         .thenReturn(new OperationResult(200, TestResourceLoader
 
 323             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 326         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 327             Mockito.anyString(), Mockito.anyInt()))
 
 328         .thenReturn(new OperationResult(200, TestResourceLoader
 
 329             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 331     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 332         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
 
 333             "http://localhost:9200/myindex/mytype/doc2",
 
 334             "http://localhost:9200/myindex/mytype/doc3");
 
 337      * Our initial gets from elastic search should be record-not-found
 
 339     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 340         .thenReturn(new OperationResult(404, null));
 
 341     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 342         .thenReturn(new OperationResult(404, null));
 
 343     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 344         .thenReturn(new OperationResult(404, null));
 
 348      * Elastic Search puts always fail with a version conflict = 409
 
 351     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 352         .thenReturn(new OperationResult(409, null));
 
 354     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
 
 355     assertEquals(OperationState.OK, syncState);
 
 357     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
 
 358     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
 
 360     vnfAliasSuggestionSynchronizer.clearCache();
 
 361     vnfAliasSuggestionSynchronizer.shutdown();