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.setup.Version;
 
  22 import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor;
 
  23 import org.onap.aai.sparky.config.oxm.OxmEntityLookup;
 
  24 import org.onap.aai.sparky.config.oxm.OxmModelLoader;
 
  25 import org.onap.aai.sparky.config.oxm.OxmModelProcessor;
 
  26 import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor;
 
  27 import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup;
 
  28 import org.onap.aai.sparky.dal.ActiveInventoryAdapter;
 
  29 import org.onap.aai.sparky.search.SearchServiceAdapter;
 
  30 import org.onap.aai.sparky.search.filters.config.FiltersConfig;
 
  31 import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig;
 
  32 import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig;
 
  33 import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig;
 
  34 import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig;
 
  35 import org.onap.aai.sparky.sync.enumeration.OperationState;
 
  36 import org.onap.aai.sparky.util.TestResourceLoader;
 
  37 import org.springframework.test.context.ContextConfiguration;
 
  38 import org.springframework.test.context.TestPropertySource;
 
  39 import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
 
  41 import com.fasterxml.jackson.databind.ObjectMapper;
 
  43 @RunWith(SpringJUnit4ClassRunner.class)
 
  44 @TestPropertySource(properties = {
 
  45 "schemaIngestPropLoc = src/test/resources/oxm-reader/schema-ingest-single-oxm.properties" })
 
  46 @ContextConfiguration(locations = { "classpath:oxm-reader/oxm-reader-bean.xml" })
 
  49 public class AutosuggestionSynchronizerTest {
 
  52   private static ObjectMapper mapper = new ObjectMapper();
 
  54   private AutosuggestionSynchronizer suggestionSynchronizer;
 
  56   private ElasticSearchSchemaConfig esSchemaConfig;
 
  57   private NetworkStatisticsConfig aaiStatConfig;
 
  58   private NetworkStatisticsConfig esStatConfig;
 
  61   private SearchServiceAdapter searchServiceAdapter;
 
  62   private ActiveInventoryAdapter aaiAdapter;
 
  65   private FiltersConfig filtersConfig;
 
  68    private OxmModelLoader oxmModelLoader;
 
  71    private NodeIngestor nodeInjest;
 
  74   private Set<OxmModelProcessor> processors;
 
  77   private OxmEntityLookup oxmEntityLookup;
 
  83   private SuggestionEntityLookup suggestionEntityLookup;
 
  87   public void init() throws Exception {
 
  89     esSchemaConfig = new ElasticSearchSchemaConfig();
 
  90     esSchemaConfig.setIndexDocType("default");
 
  91     esSchemaConfig.setIndexMappingsFileName(null);
 
  92     esSchemaConfig.setIndexName("aggregation-index-name");
 
  93     esSchemaConfig.setIndexSettingsFileName(null);
 
  96     aaiStatConfig = new NetworkStatisticsConfig();
 
  98     aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
 100     aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
 101     aaiStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
 102     aaiStatConfig.setBytesHistogramNumBins(20);
 
 103     aaiStatConfig.setBytesHistogramNumDecimalPoints(2);
 
 105     aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
 106     aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
 107     aaiStatConfig.setQueueLengthHistogramNumBins(20);
 
 108     aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
 110     aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
 111     aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
 112     aaiStatConfig.setTaskAgeHistogramNumBins(20);
 
 113     aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
 115     aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
 116     aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L);
 
 117     aaiStatConfig.setResponseTimeHistogramNumBins(20);
 
 118     aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
 120     aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
 121     aaiStatConfig.setTpsHistogramMaxYAxis(100);
 
 122     aaiStatConfig.setTpsHistogramNumBins(20);
 
 123     aaiStatConfig.setTpsHistogramNumDecimalPoints(2);
 
 125     esStatConfig = new NetworkStatisticsConfig();
 
 127     esStatConfig.setNumSamplesPerThreadForRunningAverage(100);
 
 129     esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]");
 
 130     esStatConfig.setBytesHistogramMaxYAxis(1000000L);
 
 131     esStatConfig.setBytesHistogramNumBins(20);
 
 132     esStatConfig.setBytesHistogramNumDecimalPoints(2);
 
 134     esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]");
 
 135     esStatConfig.setQueueLengthHistogramMaxYAxis(20000);
 
 136     esStatConfig.setQueueLengthHistogramNumBins(20);
 
 137     esStatConfig.setQueueLengthHistogramNumDecimalPoints(2);
 
 139     esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]");
 
 140     esStatConfig.setTaskAgeHistogramMaxYAxis(600000L);
 
 141     esStatConfig.setTaskAgeHistogramNumBins(20);
 
 142     esStatConfig.setTaskAgeHistogramNumDecimalPoints(2);
 
 144     esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]");
 
 145     esStatConfig.setResponseTimeHistogramMaxYAxis(10000L);
 
 146     esStatConfig.setResponseTimeHistogramNumBins(20);
 
 147     esStatConfig.setResponseTimeHistogramNumDecimalPoints(2);
 
 149     esStatConfig.setTpsHistogramLabel("[Transactions Per Second]");
 
 150     esStatConfig.setTpsHistogramMaxYAxis(100);
 
 151     esStatConfig.setTpsHistogramNumBins(20);
 
 152     esStatConfig.setTpsHistogramNumDecimalPoints(2);
 
 156     searchServiceAdapter = Mockito.mock(SearchServiceAdapter.class);
 
 157     aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class);
 
 162     FiltersDetailsConfig filtersDetailsConfig = mapper.readValue(
 
 163         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"),
 
 164         FiltersDetailsConfig.class);
 
 165     FiltersForViewsConfig filtersForViewsConfig = mapper.readValue(
 
 166         TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"),
 
 167         FiltersForViewsConfig.class);
 
 169     filtersConfig.setFiltersConfig(filtersDetailsConfig);
 
 170     filtersConfig.setViewsConfig(filtersForViewsConfig);
 
 172     suggestionEntityLookup = new SuggestionEntityLookup(filtersConfig);
 
 174     processors.add(suggestionEntityLookup);
 
 175     Version v = Version.V11;
 
 176     OxmModelLoader oxmModelLoader = new OxmModelLoader(v, processors,nodeInjest);
 
 177     oxmModelLoader.loadModel();
 
 181     Map<String, OxmEntityDescriptor> oxmEntityDescriptors =
 
 182         new HashMap<String, OxmEntityDescriptor>();
 
 184     OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor();
 
 185     genericVnfDescriptor.setEntityName("generic-vnf");
 
 186     List<String> pkeyNames = new ArrayList<String>();
 
 187     pkeyNames.add("vnf-name");
 
 189     genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 191     oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor);
 
 198     SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor();
 
 199     genericVnfSuggestionDescriptor.setEntityName("generic-vnf");
 
 200     genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames);
 
 205      * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig);
 
 207      * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name"));
 
 209      * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse);
 
 211      * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor);
 
 218   public void validateBasicConstruction() throws Exception {
 
 220     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 221         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 223     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 224     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 226     assertNotNull(suggestionSynchronizer.getAaiAdapter());
 
 227     assertNotNull(suggestionSynchronizer.getSearchServiceAdapter());
 
 232   public void validateSmallSync() throws Exception {
 
 234     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 235         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 238     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 239     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 241     String nodesQueryResponse = TestResourceLoader
 
 242         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 244     OperationResult genericVnfSelfLinks = new OperationResult();
 
 246     genericVnfSelfLinks.setResultCode(200);
 
 247     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 249     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 250         .thenReturn(genericVnfSelfLinks);
 
 253         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
 
 254             Mockito.anyString()))
 
 256             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 259         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
 
 260             Mockito.anyString()))
 
 262             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 266             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 268             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 271         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 272             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
 
 274         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 275             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 278         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 279             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
 
 281         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 282             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 285         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 286             Mockito.anyString(), Mockito.anyInt()))
 
 287         .thenReturn(new OperationResult(200, TestResourceLoader
 
 288             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 290     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 291         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
 
 292             "http://server.proxy:9200/myindex/mytype/doc2",
 
 293             "http://server.proxy:9200/myindex/mytype/doc3");
 
 296      * Our initial gets from elastic search should be record-not-found
 
 298     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 299         .thenReturn(new OperationResult(404, null));
 
 300     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 301         .thenReturn(new OperationResult(404, null));
 
 302     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 303         .thenReturn(new OperationResult(404, null));
 
 306     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 307         .thenReturn(new OperationResult(200, null));
 
 309     OperationState syncState = suggestionSynchronizer.doSync();
 
 310     assertEquals(OperationState.OK, syncState);
 
 312     assertNotNull(suggestionSynchronizer.getStatReport(false));
 
 313     assertNotNull(suggestionSynchronizer.getStatReport(true));
 
 315     suggestionSynchronizer.clearCache();
 
 316     suggestionSynchronizer.shutdown();
 
 322   public void validateSmallSyncWithRetries() throws Exception {
 
 324     suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig,
 
 325         esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig);
 
 328     suggestionSynchronizer.setAaiAdapter(aaiAdapter);
 
 329     suggestionSynchronizer.setSearchServiceAdapter(searchServiceAdapter);
 
 331     String nodesQueryResponse = TestResourceLoader
 
 332         .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json");
 
 334     OperationResult genericVnfSelfLinks = new OperationResult();
 
 336     genericVnfSelfLinks.setResultCode(200);
 
 337     genericVnfSelfLinks.setResult(nodesQueryResponse);
 
 339     Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf"))
 
 340         .thenReturn(genericVnfSelfLinks);
 
 343         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"),
 
 344             Mockito.anyString()))
 
 346             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1");
 
 349         .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"),
 
 350             Mockito.anyString()))
 
 352             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2");
 
 356             aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString()))
 
 358             "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3");
 
 361         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 362             Matchers.contains("generic-vnf-1"), Mockito.anyString(),
 
 364         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 365             "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json")));
 
 368         .when(aaiAdapter.queryActiveInventoryWithRetries(
 
 369             Matchers.contains("generic-vnf-2"), Mockito.anyString(),
 
 371         .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson(
 
 372             "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json")));
 
 375         .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"),
 
 376             Mockito.anyString(), Mockito.anyInt()))
 
 377         .thenReturn(new OperationResult(200, TestResourceLoader
 
 378             .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json")));
 
 380     Mockito.when(searchServiceAdapter.buildSearchServiceDocUrl(Mockito.anyString(), Mockito.anyString()))
 
 381         .thenReturn("http://server.proxy:9200/myindex/mytype/doc1",
 
 382             "http://server.proxy:9200/myindex/mytype/doc2",
 
 383             "http://server.proxy:9200/myindex/mytype/doc3");
 
 386      * Our initial gets from elastic search should be record-not-found
 
 388     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc1"), Mockito.any()))
 
 389         .thenReturn(new OperationResult(404, null));
 
 390     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc2"), Mockito.any()))
 
 391         .thenReturn(new OperationResult(404, null));
 
 392     Mockito.when(searchServiceAdapter.doGet(Matchers.contains("doc3"), Mockito.any()))
 
 393         .thenReturn(new OperationResult(404, null));
 
 397      * Elastic Search puts always fail with a version conflict = 409
 
 400     Mockito.when(searchServiceAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any()))
 
 401         .thenReturn(new OperationResult(409, null));
 
 403     OperationState syncState = suggestionSynchronizer.doSync();
 
 404     assertEquals(OperationState.OK, syncState);
 
 406     assertNotNull(suggestionSynchronizer.getStatReport(false));
 
 407     assertNotNull(suggestionSynchronizer.getStatReport(true));
 
 409     suggestionSynchronizer.clearCache();
 
 410     suggestionSynchronizer.shutdown();