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.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.SuggestionEntityDescriptor;
 
  23 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
 
  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 AutosuggestionSynchronizerTest {
 
  38   private static ObjectMapper mapper = new ObjectMapper();
 
  40   private AutosuggestionSynchronizer suggestionSynchronizer;
 
  42   private ElasticSearchSchemaConfig esSchemaConfig;
 
  43   private NetworkStatisticsConfig aaiStatConfig;
 
  44   private NetworkStatisticsConfig esStatConfig;
 
  45   private OxmEntityLookup oxmEntityLookup;
 
  46   private SuggestionEntityLookup suggestionEntityLookup;
 
  47   private ElasticSearchAdapter esAdapter;
 
  48   private ActiveInventoryAdapter aaiAdapter;
 
  51   private FiltersConfig filtersConfig;
 
  56   public void init() throws Exception {
 
  58     esSchemaConfig = new ElasticSearchSchemaConfig();
 
  59     esSchemaConfig.setIndexDocType("default");
 
  60     esSchemaConfig.setIndexMappingsFileName(null);
 
  61     esSchemaConfig.setIndexName("aggregation-index-name");
 
  62     esSchemaConfig.setIndexSettingsFileName(null);
 
  65     aaiStatConfig = new NetworkStatisticsConfig();
 
  67     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
  69     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
  70     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
  71     aaiStatConfig.setBytesHistogramNumBins(20);
 
  72     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
 
  74     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
  75     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
  76     aaiStatConfig.setQueueLengthHistogramNumBins(20);
 
  77     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
  79     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
  80     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
  81     aaiStatConfig.setTaskAgeHistogramNumBins(20);
 
  82     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
  84     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
  85     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
 
  86     aaiStatConfig.setResponseTimeHistogramNumBins(20);
 
  87     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
  89     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
  90     aaiStatConfig.setTpsHistogramMaxYAxis(100);
 
  91     aaiStatConfig.setTpsHistogramNumBins(20);
 
  92     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
 
  94     esStatConfig = new NetworkStatisticsConfig();
 
  96     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
  98     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
  99     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
 100     esStatConfig.setBytesHistogramNumBins(20);
 
 101     esStatConfig.setBytesHistogramNumDecimalPoints(2);
 
 103     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
 104     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
 105     esStatConfig.setQueueLengthHistogramNumBins(20);
 
 106     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
 108     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
 109     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
 110     esStatConfig.setTaskAgeHistogramNumBins(20);
 
 111     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
 113     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
 114     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
 
 115     esStatConfig.setResponseTimeHistogramNumBins(20);
 
 116     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
 118     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
 119     esStatConfig.setTpsHistogramMaxYAxis(100);
 
 120     esStatConfig.setTpsHistogramNumBins(20);
 
 121     esStatConfig.setTpsHistogramNumDecimalPoints(2);
 
 123     oxmEntityLookup = new OxmEntityLookup();
 
 125     esAdapter = Mockito.mock(ElasticSearchAdapter.class);
 
 126     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
 
 129     Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>();
 
 131     processors.add(oxmEntityLookup);
 
 135     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
 
 136         new HashMap<String, OxmEntityDescriptor>();
 
 138     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
 
 139     genericVnfDescriptor.setEntityName("generic-vnf");
 
 140     List<String> pkeyNames = new ArrayList<String>();
 
 141     pkeyNames.add("vnf-name");
 
 143     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 145     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
 
 148     oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors);
 
 151     Map<String, SuggestionEntityDescriptor> suggestionEntityDescriptors =
 
 152         new HashMap<String, SuggestionEntityDescriptor>();
 
 154     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
 
 155     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
 
 156     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 158     filtersConfig = new FiltersConfig(null, null, null);
 
 160     FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
 
 161         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
 
 162         FiltersDetailsConfig.class);
 
 163     FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
 
 164         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
 
 165         FiltersForViewsConfig.class);
 
 167     filtersConfig.setFiltersConfig(filtersDetailsConfig);
 
 168     filtersConfig.setViewsConfig(filtersForViewsConfig);
 
 171      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
 
 173      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
 
 175      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
 
 177      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
 
 180     suggestionEntityLookup = new SuggestionEntityLookup(filtersConfig);
 
 182     processors.add(suggestionEntityLookup);
 
 184     OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors);
 
 185     oxmModelLoader.loadLatestOxmModel();
 
 187     // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors);
 
 191   public void validateBasicConstruction() throws Exception {
 
 193     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 194         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 196     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 197     suggestionSynchronizer.setElasticSearchAdapter(esAdapter);
 
 199     assertNotNull(suggestionSynchronizer.getAaiAdapter());
 
 200     assertNotNull(suggestionSynchronizer.getElasticSearchAdapter());
 
 205   public void validateSmallSync() throws Exception {
 
 207     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 208         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 211     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 212     suggestionSynchronizer.setElasticSearchAdapter(esAdapter);
 
 214     String nodesQueryResponse = TestResourceLoader
 
 215         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 217     OperationResult genericVnfSelfLinks = new OperationResult();
 
 219     genericVnfSelfLinks.setResultCode(200);
 
 220     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 222     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 223         .thenReturn(genericVnfSelfLinks);
 
 225     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
 
 227             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 229     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
 
 231             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 233     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 235             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 238         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
 
 239             Mockito.anyString(), Mockito.anyInt()))
 
 240         .thenReturn(new OperationResult(200, TestResourceLoader
 
 241             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 244         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
 
 245             Mockito.anyString(), Mockito.anyInt()))
 
 246         .thenReturn(new OperationResult(200, TestResourceLoader
 
 247             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 250         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 251             Mockito.anyString(), Mockito.anyInt()))
 
 252         .thenReturn(new OperationResult(200, TestResourceLoader
 
 253             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 255     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 256         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
 
 257             "http://localhost:9200/myindex/mytype/doc2",
 
 258             "http://localhost:9200/myindex/mytype/doc3");
 
 261      * Our initial gets from elastic search should be record-not-found
 
 263     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 264         .thenReturn(new OperationResult(404, null));
 
 265     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 266         .thenReturn(new OperationResult(404, null));
 
 267     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 268         .thenReturn(new OperationResult(404, null));
 
 271     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 272         .thenReturn(new OperationResult(200, null));
 
 274     OperationState syncState = suggestionSynchronizer.doSync();
 
 275     assertEquals(OperationState.OK, syncState);
 
 277     assertNotNull(suggestionSynchronizer.getStatReport(false));
 
 278     assertNotNull(suggestionSynchronizer.getStatReport(true));
 
 280     suggestionSynchronizer.clearCache();
 
 281     suggestionSynchronizer.shutdown();
 
 287   public void validateSmallSyncWithRetries() throws Exception {
 
 289     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 290         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 293     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 294     suggestionSynchronizer.setElasticSearchAdapter(esAdapter);
 
 296     String nodesQueryResponse = TestResourceLoader
 
 297         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 299     OperationResult genericVnfSelfLinks = new OperationResult();
 
 301     genericVnfSelfLinks.setResultCode(200);
 
 302     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 304     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 305         .thenReturn(genericVnfSelfLinks);
 
 307     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), Mockito.anyString()))
 
 309             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 311     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), Mockito.anyString()))
 
 313             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 315     Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 317             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 320         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-1"),
 
 321             Mockito.anyString(), Mockito.anyInt()))
 
 322         .thenReturn(new OperationResult(200, TestResourceLoader
 
 323             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 326         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-2"),
 
 327             Mockito.anyString(), Mockito.anyInt()))
 
 328         .thenReturn(new OperationResult(200, TestResourceLoader
 
 329             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 332         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 333             Mockito.anyString(), Mockito.anyInt()))
 
 334         .thenReturn(new OperationResult(200, TestResourceLoader
 
 335             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 337     Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 338         .thenReturn("http://localhost:9200/myindex/mytype/doc1",
 
 339             "http://localhost:9200/myindex/mytype/doc2",
 
 340             "http://localhost:9200/myindex/mytype/doc3");
 
 343      * Our initial gets from elastic search should be record-not-found
 
 345     Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 346         .thenReturn(new OperationResult(404, null));
 
 347     Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 348         .thenReturn(new OperationResult(404, null));
 
 349     Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 350         .thenReturn(new OperationResult(404, null));
 
 354      * Elastic Search puts always fail with a version conflict = 409
 
 357     Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 358         .thenReturn(new OperationResult(409, null));
 
 360     OperationState syncState = suggestionSynchronizer.doSync();
 
 361     assertEquals(OperationState.OK, syncState);
 
 363     assertNotNull(suggestionSynchronizer.getStatReport(false));
 
 364     assertNotNull(suggestionSynchronizer.getStatReport(true));
 
 366     suggestionSynchronizer.clearCache();
 
 367     suggestionSynchronizer.shutdown();