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;
 
  12 import javax.inject.Inject;
 
  14 import org.junit.Before;
 
  15 import org.junit.Test;
 
  16 import org.junit.runner.RunWith;
 
  17 import org.mockito.Matchers;
 
  18 import org.mockito.Mockito;
 
  19 import org.onap.aai.nodes.NodeIngestor;
 
  20 import org.onap.aai.restclient.client.OperationResult;
 
  21 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
 
  22 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
 
  23 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
 
  24 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
 
  25 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
 
  26 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
 
  27 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
 
  28 import org.onap.aai.sparky.search.SearchServiceAdapter;
 
  29 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
 
  30 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
 
  31 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
 
  32 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
 
  33 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
 
  34 import org.onap.aai.sparky.sync.enumeration.OperationState;
 
  35 import org.onap.aai.sparky.util.TestResourceLoader;
 
  36 import org.springframework.test.context.ContextConfiguration;
 
  37 import org.springframework.test.context.TestPropertySource;
 
  38 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
  40 import com.fasterxml.jackson.databind.ObjectMapper;
 
  42 @RunWith(SpringJUnit4ClassRunner.class)
 
  43 @TestPropertySource(properties = {
 
  44 "schemaIngestPropLoc = src/test/resources/oxm-reader/schema-ingest-single-oxm.properties" })
 
  45 @ContextConfiguration(locations = { "classpath:oxm-reader/oxm-reader-bean.xml" })
 
  48 public class AutosuggestionSynchronizerTest {
 
  51   private static ObjectMapper mapper = new ObjectMapper();
 
  53   private AutosuggestionSynchronizer suggestionSynchronizer;
 
  55   private ElasticSearchSchemaConfig esSchemaConfig;
 
  56   private NetworkStatisticsConfig aaiStatConfig;
 
  57   private NetworkStatisticsConfig esStatConfig;
 
  60   private SearchServiceAdapter searchServiceAdapter;
 
  61   private ActiveInventoryAdapter aaiAdapter;
 
  64   private FiltersConfig filtersConfig;
 
  67    private OxmModelLoader oxmModelLoader;
 
  70    private NodeIngestor nodeInjest;
 
  73   private Set<OxmModelProcessor> processors;
 
  76   private OxmEntityLookup oxmEntityLookup;
 
  82   private SuggestionEntityLookup suggestionEntityLookup;
 
  86   public void init() throws Exception {
 
  88     esSchemaConfig = new ElasticSearchSchemaConfig();
 
  89     esSchemaConfig.setIndexDocType("default");
 
  90     esSchemaConfig.setIndexMappingsFileName(null);
 
  91     esSchemaConfig.setIndexName("aggregation-index-name");
 
  92     esSchemaConfig.setIndexSettingsFileName(null);
 
  95     aaiStatConfig = new NetworkStatisticsConfig();
 
  97     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
  99     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
 100     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
 101     aaiStatConfig.setBytesHistogramNumBins(20);
 
 102     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
 
 104     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
 105     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
 106     aaiStatConfig.setQueueLengthHistogramNumBins(20);
 
 107     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
 109     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
 110     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
 111     aaiStatConfig.setTaskAgeHistogramNumBins(20);
 
 112     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
 114     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
 115     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
 
 116     aaiStatConfig.setResponseTimeHistogramNumBins(20);
 
 117     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
 119     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
 120     aaiStatConfig.setTpsHistogramMaxYAxis(100);
 
 121     aaiStatConfig.setTpsHistogramNumBins(20);
 
 122     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
 
 124     esStatConfig = new NetworkStatisticsConfig();
 
 126     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
 128     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
 129     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
 130     esStatConfig.setBytesHistogramNumBins(20);
 
 131     esStatConfig.setBytesHistogramNumDecimalPoints(2);
 
 133     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
 134     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
 135     esStatConfig.setQueueLengthHistogramNumBins(20);
 
 136     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
 138     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
 139     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
 140     esStatConfig.setTaskAgeHistogramNumBins(20);
 
 141     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
 143     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
 144     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
 
 145     esStatConfig.setResponseTimeHistogramNumBins(20);
 
 146     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
 148     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
 149     esStatConfig.setTpsHistogramMaxYAxis(100);
 
 150     esStatConfig.setTpsHistogramNumBins(20);
 
 151     esStatConfig.setTpsHistogramNumDecimalPoints(2);
 
 155     searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
 
 156     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
 
 161     FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
 
 162         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
 
 163         FiltersDetailsConfig.class);
 
 164     FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
 
 165         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
 
 166         FiltersForViewsConfig.class);
 
 168     filtersConfig.setFiltersConfig(filtersDetailsConfig);
 
 169     filtersConfig.setViewsConfig(filtersForViewsConfig);
 
 171     suggestionEntityLookup = new SuggestionEntityLookup(filtersConfig);
 
 173     processors.add(suggestionEntityLookup);
 
 174     OxmModelLoader oxmModelLoader = new OxmModelLoader("v11", processors);
 
 175     oxmModelLoader.setNodeIngestor(nodeInjest);
 
 176     oxmModelLoader.loadModel();
 
 180     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
 
 181         new HashMap<String, OxmEntityDescriptor>();
 
 183     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
 
 184     genericVnfDescriptor.setEntityName("generic-vnf");
 
 185     List<String> pkeyNames = new ArrayList<String>();
 
 186     pkeyNames.add("vnf-name");
 
 188     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 190     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
 
 197     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
 
 198     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
 
 199     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 204      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
 
 206      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
 
 208      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
 
 210      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
 
 217   public void validateBasicConstruction() throws Exception {
 
 219     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 220         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 222     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 223     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 225     assertNotNull(suggestionSynchronizer.getAaiAdapter());
 
 226     assertNotNull(suggestionSynchronizer.getSearchServiceAdapter());
 
 231   public void validateSmallSync() throws Exception {
 
 233     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 234         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 237     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 238     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 240     String nodesQueryResponse = TestResourceLoader
 
 241         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 243     OperationResult genericVnfSelfLinks = new OperationResult();
 
 245     genericVnfSelfLinks.setResultCode(200);
 
 246     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 248     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 249         .thenReturn(genericVnfSelfLinks);
 
 252         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
 
 253             Mockito.anyString()))
 
 255             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 258         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
 
 259             Mockito.anyString()))
 
 261             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 265             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 267             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 270         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 271             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
 
 272             Mockito.anyInt(),Mockito.anyString()))
 
 273         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 274             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 277         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 278             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
 
 279             Mockito.anyInt(),Mockito.anyString()))
 
 280         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 281             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 284         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 285             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 286         .thenReturn(new OperationResult(200, TestResourceLoader
 
 287             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 289     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 290         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
 
 291             "http://server.proxy:9200/myindex/mytype/doc2",
 
 292             "http://server.proxy:9200/myindex/mytype/doc3");
 
 295      * Our initial gets from elastic search should be record-not-found
 
 297     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 298         .thenReturn(new OperationResult(404, null));
 
 299     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 300         .thenReturn(new OperationResult(404, null));
 
 301     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 302         .thenReturn(new OperationResult(404, null));
 
 305     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 306         .thenReturn(new OperationResult(200, null));
 
 308     OperationState syncState = suggestionSynchronizer.doSync();
 
 309     assertEquals(OperationState.OK, syncState);
 
 311     assertNotNull(suggestionSynchronizer.getStatReport(false));
 
 312     assertNotNull(suggestionSynchronizer.getStatReport(true));
 
 314     suggestionSynchronizer.clearCache();
 
 315     suggestionSynchronizer.shutdown();
 
 321   public void validateSmallSyncWithRetries() throws Exception {
 
 323     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 324         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 327     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 328     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 330     String nodesQueryResponse = TestResourceLoader
 
 331         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 333     OperationResult genericVnfSelfLinks = new OperationResult();
 
 335     genericVnfSelfLinks.setResultCode(200);
 
 336     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 338     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 339         .thenReturn(genericVnfSelfLinks);
 
 342         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
 
 343             Mockito.anyString()))
 
 345             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 348         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
 
 349             Mockito.anyString()))
 
 351             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 355             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 357             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 360         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 361             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
 
 362             Mockito.anyInt(),Mockito.anyString()))
 
 363         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 364             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 367         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 368             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
 
 369             Mockito.anyInt(),Mockito.anyString()))
 
 370         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 371             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 374         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 375             Mockito.anyString(), Mockito.anyInt(),Mockito.anyString()))
 
 376         .thenReturn(new OperationResult(200, TestResourceLoader
 
 377             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 379     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 380         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
 
 381             "http://server.proxy:9200/myindex/mytype/doc2",
 
 382             "http://server.proxy:9200/myindex/mytype/doc3");
 
 385      * Our initial gets from elastic search should be record-not-found
 
 387     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 388         .thenReturn(new OperationResult(404, null));
 
 389     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 390         .thenReturn(new OperationResult(404, null));
 
 391     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 392         .thenReturn(new OperationResult(404, null));
 
 396      * Elastic Search puts always fail with a version conflict = 409
 
 399     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 400         .thenReturn(new OperationResult(409, null));
 
 402     OperationState syncState = suggestionSynchronizer.doSync();
 
 403     assertEquals(OperationState.OK, syncState);
 
 405     assertNotNull(suggestionSynchronizer.getStatReport(false));
 
 406     assertNotNull(suggestionSynchronizer.getStatReport(true));
 
 408     suggestionSynchronizer.clearCache();
 
 409     suggestionSynchronizer.shutdown();