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.search.SearchServiceAdapter;
 
  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 SearchServiceAdapter searchServiceAdapter;
 
  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     searchServiceAdapter = Mockito.mock(SearchServiceAdapter.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);
 
 179     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
 
 183   public void validateBasicConstruction() throws Exception {
 
 185     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
 
 186         aaiStatConfig, esStatConfig, filtersConfig);
 
 188     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 189     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 191     assertNotNull(vnfAliasSuggestionSynchronizer.getAaiAdapter());
 
 192     assertNotNull(vnfAliasSuggestionSynchronizer.getSearchServiceAdapter());
 
 197   public void validateSmallSync() throws Exception {
 
 199     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
 
 200         aaiStatConfig, esStatConfig, filtersConfig);
 
 203     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 204     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 206     String nodesQueryResponse = TestResourceLoader
 
 207         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 209     OperationResult genericVnfSelfLinks = new OperationResult();
 
 211     genericVnfSelfLinks.setResultCode(200);
 
 212     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 214     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 215         .thenReturn(genericVnfSelfLinks);
 
 217     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
 
 219             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 221     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
 
 223             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 225     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 227             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 230         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
 
 231             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 232         .thenReturn(new OperationResult(200, TestResourceLoader
 
 233             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 236         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
 
 237             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 238         .thenReturn(new OperationResult(200, TestResourceLoader
 
 239             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 242         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 243             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 244         .thenReturn(new OperationResult(200, TestResourceLoader
 
 245             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 247     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 248         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
 
 249             "http://server.proxy:9200/myindex/mytype/doc2",
 
 250             "http://server.proxy:9200/myindex/mytype/doc3");
 
 253      * Our initial gets from elastic search should be record-not-found
 
 255     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 256         .thenReturn(new OperationResult(404, null));
 
 257     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 258         .thenReturn(new OperationResult(404, null));
 
 259     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 260         .thenReturn(new OperationResult(404, null));
 
 263     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 264         .thenReturn(new OperationResult(200, null));
 
 266     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
 
 267     assertEquals(OperationState.OK, syncState);
 
 269     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
 
 270     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
 
 272     vnfAliasSuggestionSynchronizer.clearCache();
 
 273     vnfAliasSuggestionSynchronizer.shutdown();
 
 279   public void validateSmallSyncWithRetries() throws Exception {
 
 281     vnfAliasSuggestionSynchronizer = new VnfAliasSuggestionSynchronizer(esSchemaConfig, 5, 5, 5,
 
 282         aaiStatConfig, esStatConfig, filtersConfig);
 
 285     vnfAliasSuggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 286     vnfAliasSuggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 288     String nodesQueryResponse = TestResourceLoader
 
 289         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 291     OperationResult genericVnfSelfLinks = new OperationResult();
 
 293     genericVnfSelfLinks.setResultCode(200);
 
 294     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 296     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 297         .thenReturn(genericVnfSelfLinks);
 
 299     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
 
 301             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 303     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
 
 305             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 307     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 309             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 312         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
 
 313             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 314         .thenReturn(new OperationResult(200, TestResourceLoader
 
 315             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 318         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
 
 319             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 320         .thenReturn(new OperationResult(200, TestResourceLoader
 
 321             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 324         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 325             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 326         .thenReturn(new OperationResult(200, TestResourceLoader
 
 327             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 329     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 330         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
 
 331             "http://server.proxy:9200/myindex/mytype/doc2",
 
 332             "http://server.proxy:9200/myindex/mytype/doc3");
 
 335      * Our initial gets from elastic search should be record-not-found
 
 337     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 338         .thenReturn(new OperationResult(404, null));
 
 339     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 340         .thenReturn(new OperationResult(404, null));
 
 341     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 342         .thenReturn(new OperationResult(404, null));
 
 346      * Elastic Search puts always fail with a version conflict = 409
 
 349     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 350         .thenReturn(new OperationResult(409, null));
 
 352     OperationState syncState = vnfAliasSuggestionSynchronizer.doSync();
 
 353     assertEquals(OperationState.OK, syncState);
 
 355     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(false));
 
 356     assertNotNull(vnfAliasSuggestionSynchronizer.getStatReport(true));
 
 358     vnfAliasSuggestionSynchronizer.clearCache();
 
 359     vnfAliasSuggestionSynchronizer.shutdown();