diff options
author | da490c <dave.adams@amdocs.com> | 2018-03-22 00:32:52 -0400 |
---|---|---|
committer | da490c <dave.adams@amdocs.com> | 2018-03-22 09:34:25 -0400 |
commit | ba31685194c77ef140411531299696ae701385d4 (patch) | |
tree | 912f7d5b3378901ccabb8df52b26866d74572f10 /sparkybe-onap-service/src/test/java/org/onap | |
parent | ef7f255958e541ffaec0fd2a977440dd7b6fd6b8 (diff) |
Convert Sparky to Spring-Boot
Issue-ID: AAI-599
Change-Id: If474dd02794f442fdddcd90f62fb75e0d6b907e7
Signed-off-by: da490c <dave.adams@amdocs.com>
Diffstat (limited to 'sparkybe-onap-service/src/test/java/org/onap')
140 files changed, 16371 insertions, 0 deletions
diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/AveragingRingBufferTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/AveragingRingBufferTest.java new file mode 100644 index 0000000..f64a0f5 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/AveragingRingBufferTest.java @@ -0,0 +1,134 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.analytics; + +import static org.junit.Assert.assertEquals; + +import java.security.SecureRandom; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.analytics.AveragingRingBuffer; + +/** + * The Class AveragingRingBufferTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class AveragingRingBufferTest { + + protected SecureRandom random = new SecureRandom(); + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + // nothing at the moment + } + + /** + * Validate pre index roll averaging. + */ + @Test + public void validatePreIndexRollAveraging() { + + AveragingRingBuffer arb = new AveragingRingBuffer(5); + assertEquals(0, arb.getAvg()); + + /* + * On initial buffer fill, the average will be re-calculated on the fly for the first nth data + * points until the data buffer has been filled the first time, and then the buffer + * automatically recalculates the average every time the buffer index rolls over, to the keep + * the average relative to the last "nth" data points. + */ + + // [ 1, 0, 0, 0, 0 ], sum = 1, avg = 1/1 =1 + arb.addSample(1); + assertEquals(1, arb.getAvg()); + + // [ 1, 2, 0, 0, 0 ], sum = 3, avg = 3/2 = 1 + arb.addSample(2); + assertEquals(1, arb.getAvg()); + + // [ 1, 2, 3, 0, 0 ], sum = 6, avg = 6/3 = 2 + arb.addSample(3); + assertEquals(2, arb.getAvg()); + + // [ 1, 2, 3, 4, 0 ], sum = 10, avg = 10/4 = 2 + arb.addSample(4); + assertEquals(2, arb.getAvg()); + + // [ 1, 2, 3, 4, 5 ], sum = 15, avg = 15/5 = 3 + arb.addSample(5); + assertEquals(3, arb.getAvg()); + + } + + /** + * Validate post index roll averaging. + */ + @Test + public void validatePostIndexRollAveraging() { + + AveragingRingBuffer arb = new AveragingRingBuffer(5); + arb.addSample(1); + arb.addSample(2); + arb.addSample(3); + arb.addSample(4); + arb.addSample(5); + + /* + * The behavior switches, and now doesn't re-calculate the average until each nth data point, to + * reduce the computational over-head of re-calculating on each value. + */ + + // [ 10, 2, 3, 4, 5 ], + arb.addSample(10); + assertEquals(3, arb.getAvg()); + + // [ 10, 20, 3, 4, 5 ], + arb.addSample(20); + assertEquals(3, arb.getAvg()); + + // [ 10, 20, 30, 4, 5 ], + arb.addSample(30); + assertEquals(3, arb.getAvg()); + + // [ 10, 20, 30, 40, 5 ], + arb.addSample(40); + assertEquals(3, arb.getAvg()); + + // [ 10, 20, 30, 40, 50 ], s=150, avg=150/5=30 + arb.addSample(50); + assertEquals(30, arb.getAvg()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistogramSamplerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistogramSamplerTest.java new file mode 100644 index 0000000..bba52a7 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistogramSamplerTest.java @@ -0,0 +1,91 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.analytics; + +import java.security.SecureRandom; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.analytics.HistogramSampler; + +/** + * The Class HistogramSamplerTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class HistogramSamplerTest { + + protected SecureRandom random = new SecureRandom(); + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + // nothing at the moment + } + + /** + * Validate basic construction and delimited reporting. + */ + @Test + public void validateBasicConstructionAndDelimitedReporting() { + + HistogramSampler histoSampler = new HistogramSampler("[File byte size]", 500000, 22, 3); + + SecureRandom random = new SecureRandom(); + + for (int x = 0; x < 100000; x++) { + histoSampler.track(random.nextInt(9999999)); + } + + System.out.println(histoSampler.getStats(false, " ")); + + } + + + /** + * Validate basic construction and formatted reporting. + */ + @Test + public void validateBasicConstructionAndFormattedReporting() { + + HistogramSampler histoSampler = new HistogramSampler("[Queue Length Samples]", 100000, 15, 3); + + SecureRandom random = new SecureRandom(); + + for (int x = 0; x < 100000; x++) { + histoSampler.track(random.nextInt(9999999)); + } + + System.out.println(histoSampler.getStats(true, " ")); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistoricalCounterTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistoricalCounterTest.java new file mode 100644 index 0000000..21899a9 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistoricalCounterTest.java @@ -0,0 +1,70 @@ +package org.onap.aai.sparky.analytics; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.analytics.HistoricalCounter; + +public class HistoricalCounterTest { + + + private HistoricalCounter historicalCounter; + private HistoricalCounter historicalCount; + @Before + public void init() throws Exception { + historicalCounter = new HistoricalCounter(true); + historicalCount = new HistoricalCounter(false); + } + + @Test + public void successfullInitialization() { + assertEquals(-1, historicalCounter.getMin(),0); + assertEquals(0, historicalCounter.getMax(),0); + assertEquals(0, historicalCounter.getNumSamples(),0); + assertEquals(0, historicalCounter.getNumSamples(),0); + assertEquals(0.0, historicalCounter.getValue(),0); + assertEquals(0, historicalCounter.getAvg(),0); + assertTrue(historicalCounter.isSingleValue()); + + } + + @Test + public void updateValuesAndReset() { + historicalCounter.update(-1); + assertEquals(0, historicalCounter.getValue(),0); + historicalCounter.update(10); + assertEquals(10, historicalCounter.getValue(),0); + historicalCounter.reset(); + assertEquals(-1, historicalCounter.getMin(),0); + assertEquals(0, historicalCounter.getMax(),0); + assertEquals(0, historicalCounter.getNumSamples(),0); + assertEquals(0, historicalCounter.getNumSamples(),0); + assertEquals(0.0, historicalCounter.getValue(),0); + + } + + @Test + public void updateValues() { + historicalCount.update(2); + assertEquals(2, historicalCount.getMin(),0); + historicalCount.setMin(10); + historicalCount.update(3); + assertEquals(3, historicalCount.getMin(),0); + historicalCount.setMax(1); + historicalCount.update(4); + assertEquals(4, historicalCount.getMax(),0); + historicalCount.setTotalOfSamples(10); + historicalCount.setNumSamples(2); + assertEquals(5, historicalCount.getAvg(),0); + historicalCount.setTotalOfSamples(10); + assertEquals(10, historicalCount.getTotalOfSamples(),0); + historicalCount.setMaintainSingleValue(true); + assertTrue(historicalCounter.isSingleValue()); + + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/TransactionRateControllerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/TransactionRateControllerTest.java new file mode 100644 index 0000000..881c9ab --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/TransactionRateControllerTest.java @@ -0,0 +1,217 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.analytics; + +import org.junit.Before; + + +/** + * The Class TransactionRateControllerTest. + */ +public class TransactionRateControllerTest { + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + // nothing at the moment + } + /* + * @Test public void tenTPS_oneThread_validateRateEnforcementWhenAvgResposneTimeIsUnderBudget() { + * + * TransactionRateController trc = new TransactionRateController(10.0, 1, 5); + * + * trc.trackResponseTime(25); trc.trackResponseTime(35); trc.trackResponseTime(45); + * trc.trackResponseTime(55); trc.trackResponseTime(70); + * + * // avg should be 46 ms + * + * assertEquals(54, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void tenTPS_oneThread_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(10.0, 1, 5); + * + * trc.trackResponseTime(75); trc.trackResponseTime(125); trc.trackResponseTime(250); + * trc.trackResponseTime(105); trc.trackResponseTime(23); + * + * // avg should be 115 ms + * + * assertEquals(0, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void oneTPS_oneThread_validateRateEnforcementWhenAvgResposneTimeIsUnderBudget() { + * + * TransactionRateController trc = new TransactionRateController(1.0, 1, 5); + * + * trc.trackResponseTime(25); trc.trackResponseTime(35); trc.trackResponseTime(45); + * trc.trackResponseTime(55); trc.trackResponseTime(70); + * + * // avg should be 46 ms + * + * assertEquals(954, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void oneTPS_oneThread_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(1.0, 1, 5); + * + * trc.trackResponseTime(75); trc.trackResponseTime(125); trc.trackResponseTime(250); + * trc.trackResponseTime(105); trc.trackResponseTime(23); + * + * // avg should be 115 ms + * + * assertEquals(885, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void halfTPS_oneThread_validateRateEnforcementWhenAvgResposneTimeIsUnderBudget() { + * + * TransactionRateController trc = new TransactionRateController(0.5, 1, 5); + * + * trc.trackResponseTime(25); trc.trackResponseTime(35); trc.trackResponseTime(45); + * trc.trackResponseTime(55); trc.trackResponseTime(70); + * + * // avg should be 46 ms + * + * assertEquals(1954, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void halfTPS_oneThread_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(0.5, 1, 5); + * + * trc.trackResponseTime(75); trc.trackResponseTime(125); trc.trackResponseTime(250); + * trc.trackResponseTime(105); trc.trackResponseTime(23); + * + * // avg should be 115 ms + * + * assertEquals(1885, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void tenTPS_tenThreads_validateRateEnforcementWhenAvgResposneTimeIsUnderBudget() { + * + * TransactionRateController trc = new TransactionRateController(10.0, 10, 5); + * + * trc.trackResponseTime(25); trc.trackResponseTime(35); trc.trackResponseTime(45); + * trc.trackResponseTime(55); trc.trackResponseTime(70); + * + * // avg should be 46 ms + * + * assertEquals(540, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void tenTPS_tenThreads_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(10.0, 10, 5); + * + * trc.trackResponseTime(75); trc.trackResponseTime(125); trc.trackResponseTime(250); + * trc.trackResponseTime(105); trc.trackResponseTime(23); + * + * // avg should be 115 ms + * + * assertEquals(0, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void oneTPS_tenThreads_validateRateEnforcementWhenAvgResposneTimeIsUnderBudget() { + * + * TransactionRateController trc = new TransactionRateController(1.0, 10, 5); + * + * trc.trackResponseTime(25); trc.trackResponseTime(35); trc.trackResponseTime(45); + * trc.trackResponseTime(55); trc.trackResponseTime(70); + * + * // avg should be 46 ms + * + * assertEquals(9540, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void oneTPS_tenThreads_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(1.0, 10, 5); + * + * trc.trackResponseTime(75); trc.trackResponseTime(125); trc.trackResponseTime(250); + * trc.trackResponseTime(105); trc.trackResponseTime(23); + * + * // avg should be 115 ms + * + * assertEquals(8850, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void halfTPS_tenThreads_validateRateEnforcementWhenAvgResposneTimeIsUnderBudget() + * { + * + * TransactionRateController trc = new TransactionRateController(0.5, 10, 5); + * + * trc.trackResponseTime(25); trc.trackResponseTime(35); trc.trackResponseTime(45); + * trc.trackResponseTime(55); trc.trackResponseTime(70); + * + * // avg should be 46 ms + * + * assertEquals(19540, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void halfTPS_tenThreads_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(0.5, 10, 5); + * + * trc.trackResponseTime(75); trc.trackResponseTime(125); trc.trackResponseTime(250); + * trc.trackResponseTime(105); trc.trackResponseTime(23); + * + * // avg should be 115 ms + * + * assertEquals(18850, trc.getFixedDelayInMs()); + * + * } + * + * @Test public void oneTPS_fiveThreads_validateRateEnforcementWhenAvgResposneTimeIsOverBudget() { + * + * TransactionRateController trc = new TransactionRateController(1, 5, 5); + * + * trc.trackResponseTime(0); trc.trackResponseTime(0); trc.trackResponseTime(0); + * trc.trackResponseTime(0); trc.trackResponseTime(0); + * + * // avg should be 0 ms + * + * assertEquals(5000, trc.getFixedDelayInMs()); + * + * } + */ + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/autosuggestion/sync/AutosuggestionSynchronizerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/autosuggestion/sync/AutosuggestionSynchronizerTest.java new file mode 100644 index 0000000..dd6f1c7 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/autosuggestion/sync/AutosuggestionSynchronizerTest.java @@ -0,0 +1,387 @@ +package org.onap.aai.sparky.autosuggestion.sync; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.config.oxm.OxmModelProcessor; +import org.onap.aai.sparky.config.oxm.SuggestionEntityDescriptor; +import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup; +import org.onap.aai.sparky.dal.ActiveInventoryAdapter; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.search.filters.config.FiltersConfig; +import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig; +import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; +import org.onap.aai.sparky.sync.enumeration.OperationState; +import org.onap.aai.sparky.util.TestResourceLoader; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class AutosuggestionSynchronizerTest { + + private static ObjectMapper mapper = new ObjectMapper(); + + private AutosuggestionSynchronizer suggestionSynchronizer; + + private ElasticSearchSchemaConfig esSchemaConfig; + private NetworkStatisticsConfig aaiStatConfig; + private NetworkStatisticsConfig esStatConfig; + private OxmEntityLookup oxmEntityLookup; + private SuggestionEntityLookup suggestionEntityLookup; + private ElasticSearchAdapter esAdapter; + private ActiveInventoryAdapter aaiAdapter; + + + private FiltersConfig filtersConfig; + + + + @Before + public void init() throws Exception { + + esSchemaConfig = new ElasticSearchSchemaConfig(); + esSchemaConfig.setIndexDocType("default"); + esSchemaConfig.setIndexMappingsFileName(null); + esSchemaConfig.setIndexName("aggregation-index-name"); + esSchemaConfig.setIndexSettingsFileName(null); + + + aaiStatConfig = new NetworkStatisticsConfig(); + + aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + aaiStatConfig.setBytesHistogramMaxYAxis(1000000L); + aaiStatConfig.setBytesHistogramNumBins(20); + aaiStatConfig.setBytesHistogramNumDecimalPoints(2); + + aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000); + aaiStatConfig.setQueueLengthHistogramNumBins(20); + aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + aaiStatConfig.setTaskAgeHistogramNumBins(20); + aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L); + aaiStatConfig.setResponseTimeHistogramNumBins(20); + aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + aaiStatConfig.setTpsHistogramMaxYAxis(100); + aaiStatConfig.setTpsHistogramNumBins(20); + aaiStatConfig.setTpsHistogramNumDecimalPoints(2); + + esStatConfig = new NetworkStatisticsConfig(); + + esStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + esStatConfig.setBytesHistogramMaxYAxis(1000000L); + esStatConfig.setBytesHistogramNumBins(20); + esStatConfig.setBytesHistogramNumDecimalPoints(2); + + esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + esStatConfig.setQueueLengthHistogramMaxYAxis(20000); + esStatConfig.setQueueLengthHistogramNumBins(20); + esStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + esStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + esStatConfig.setTaskAgeHistogramNumBins(20); + esStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + esStatConfig.setResponseTimeHistogramMaxYAxis(10000L); + esStatConfig.setResponseTimeHistogramNumBins(20); + esStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + esStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + esStatConfig.setTpsHistogramMaxYAxis(100); + esStatConfig.setTpsHistogramNumBins(20); + esStatConfig.setTpsHistogramNumDecimalPoints(2); + + oxmEntityLookup = new OxmEntityLookup(); + + esAdapter = Mockito.mock(ElasticSearchAdapter.class); + aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + + + Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>(); + + processors.add(oxmEntityLookup); + + + + Map<String, OxmEntityDescriptor> oxmEntityDescriptors = + new HashMap<String, OxmEntityDescriptor>(); + + OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor(); + genericVnfDescriptor.setEntityName("generic-vnf"); + List<String> pkeyNames = new ArrayList<String>(); + pkeyNames.add("vnf-name"); + + genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames); + + oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor); + + + oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors); + + + Map<String, SuggestionEntityDescriptor> suggestionEntityDescriptors = + new HashMap<String, SuggestionEntityDescriptor>(); + + SuggestionEntityDescriptor genericVnfSuggestionDescriptor = new SuggestionEntityDescriptor(); + genericVnfSuggestionDescriptor.setEntityName("generic-vnf"); + genericVnfSuggestionDescriptor.setPrimaryKeyAttributeNames(pkeyNames); + + filtersConfig = new FiltersConfig(null, null, null); + + FiltersDetailsConfig filtersDetailsConfig = mapper.readValue( + TestResourceLoader.getTestResourceDataJson("/filters/aaiui_filters_testConfig.json"), + FiltersDetailsConfig.class); + FiltersForViewsConfig filtersForViewsConfig = mapper.readValue( + TestResourceLoader.getTestResourceDataJson("/filters/aaiui_views_testConfig.json"), + FiltersForViewsConfig.class); + + filtersConfig.setFiltersConfig(filtersDetailsConfig); + filtersConfig.setViewsConfig(filtersForViewsConfig); + + /* + * SuggestionSearchEntity sse = new SuggestionSearchEntity(filtersConfig); + * + * sse.setEntityType("generic-vnf"); sse.setSuggestionPropertyTypes( Arrays.asList("vnf-name")); + * + * genericVnfSuggestionDescriptor.setSuggestionSearchEntity(sse); + * + * suggestionEntityDescriptors.put("generic-vnf", genericVnfSuggestionDescriptor); + */ + + suggestionEntityLookup = new SuggestionEntityLookup(filtersConfig); + + processors.add(suggestionEntityLookup); + + OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors); + oxmModelLoader.loadLatestOxmModel(); + + // suggestionEntityLookup.setSuggestionSearchEntityDescriptors(suggestionEntityDescriptors); + } + + @Test + public void validateBasicConstruction() throws Exception { + + suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig); + + suggestionSynchronizer.setAaiAdapter(aaiAdapter); + suggestionSynchronizer.setElasticSearchAdapter(esAdapter); + + assertNotNull(suggestionSynchronizer.getAaiAdapter()); + assertNotNull(suggestionSynchronizer.getElasticSearchAdapter()); + + } + + @Test + public void validateSmallSync() throws Exception { + + suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig); + + + suggestionSynchronizer.setAaiAdapter(aaiAdapter); + suggestionSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json"); + + OperationResult genericVnfSelfLinks = new OperationResult(); + + genericVnfSelfLinks.setResultCode(200); + genericVnfSelfLinks.setResult(nodesQueryResponse); + + Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf")) + .thenReturn(genericVnfSelfLinks); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1"); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2"); + + Mockito + .when( + aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-vnf-1"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-vnf-2"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json"))); + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())) + .thenReturn("http://localhost:9200/myindex/mytype/doc1", + "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3"); + + /* + * Our initial gets from elastic search should be record-not-found + */ + Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(200, null)); + + OperationState syncState = suggestionSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertNotNull(suggestionSynchronizer.getStatReport(false)); + assertNotNull(suggestionSynchronizer.getStatReport(true)); + + suggestionSynchronizer.clearCache(); + suggestionSynchronizer.shutdown(); + + + } + + @Test + public void validateSmallSyncWithRetries() throws Exception { + + suggestionSynchronizer = new AutosuggestionSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup, suggestionEntityLookup, filtersConfig); + + + suggestionSynchronizer.setAaiAdapter(aaiAdapter); + suggestionSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_generic-vnf_nodesQuery_response.json"); + + OperationResult genericVnfSelfLinks = new OperationResult(); + + genericVnfSelfLinks.setResultCode(200); + genericVnfSelfLinks.setResult(nodesQueryResponse); + + Mockito.when(aaiAdapter.getSelfLinksByEntityType("generic-vnf")) + .thenReturn(genericVnfSelfLinks); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-1"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-1"); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-2"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-2"); + + Mockito + .when( + aaiAdapter.repairSelfLink(Matchers.contains("generic-vnf-3"), Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/network/generic-vnfs/generic-vnf/generic-vnf-3"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-vnf-1"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/generic-vnf-generic-vnf-1_full_depth.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-vnf-2"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/generic-vnf-generic-vnf-2_full_depth.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("generic-vnf-3"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/generic-vnf-generic-vnf-3_full_depth.json"))); + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())) + .thenReturn("http://localhost:9200/myindex/mytype/doc1", + "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3"); + + /* + * Our initial gets from elastic search should be record-not-found + */ + Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + + + /* + * Elastic Search puts always fail with a version conflict = 409 + */ + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(409, null)); + + OperationState syncState = suggestionSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertNotNull(suggestionSynchronizer.getStatReport(false)); + assertNotNull(suggestionSynchronizer.getStatReport(true)); + + suggestionSynchronizer.clearCache(); + suggestionSynchronizer.shutdown(); + + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/common/search/CommonSearchSuggestionTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/common/search/CommonSearchSuggestionTest.java new file mode 100644 index 0000000..abe31a3 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/common/search/CommonSearchSuggestionTest.java @@ -0,0 +1,55 @@ +package org.onap.aai.sparky.common.search; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.search.filters.entity.UiFilterValueEntity; + + +public class CommonSearchSuggestionTest { + + private CommonSearchSuggestion commonSearchSuggestions; + private CommonSearchSuggestion commonSearchSuggestion; + private ArrayList<UiFilterValueEntity> filterValues; + + @Before + public void init() throws Exception { + + filterValues = new ArrayList<UiFilterValueEntity>(); + commonSearchSuggestions = new CommonSearchSuggestion("627dfa28b","schema","generic-vnf called sdwanfwdemo_vnf1_under_fw-si1","VNF-Stack",filterValues); + commonSearchSuggestion = new CommonSearchSuggestion("627dfa28b","schema","generic-vnf called sdwanfwdemo_vnf1_under_fw-si1","VNF-Stack",null); + + } + + + @Test + public void updateValues() { + + commonSearchSuggestions.setHashId("4a83c197ffa19ec4a1"); + assertNotNull(commonSearchSuggestions.getHashId()); + commonSearchSuggestions.setRoute("structuredView"); + assertNotNull(commonSearchSuggestions.getRoute()); + commonSearchSuggestions.setText("generic-vnf called fp_vnf1_under_fw-si1 called fp_vnf1_under_fw-si1 -- Schema"); + assertNotNull(commonSearchSuggestions.getText()); + assertNotNull(commonSearchSuggestions.getFilterValues()); + assertNotNull(commonSearchSuggestions.toString()); + + + commonSearchSuggestion.setHashId(null); + assertNull(commonSearchSuggestion.getHashId()); + commonSearchSuggestion.setRoute(null); + assertNull(commonSearchSuggestion.getRoute()); + commonSearchSuggestion.setText(null); + assertNull(commonSearchSuggestion.getText()); + assertNull(commonSearchSuggestion.getFilterValues()); + assertNotNull(commonSearchSuggestion.toString()); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceDescriptorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceDescriptorTest.java new file mode 100644 index 0000000..0b506df --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceDescriptorTest.java @@ -0,0 +1,34 @@ +package org.onap.aai.sparky.config.oxm; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class CrossEntityReferenceDescriptorTest { + + private CrossEntityReferenceDescriptor crossEntityReferenceDescriptor; + private CrossEntityReference crossEntityReference; + + @Before + public void init() throws Exception { + + crossEntityReference = new CrossEntityReference(); + crossEntityReferenceDescriptor = new CrossEntityReferenceDescriptor(); + + } + + @Test + public void updateValues() { + + crossEntityReferenceDescriptor.setCrossEntityReference(crossEntityReference); + assertNotNull(crossEntityReferenceDescriptor.getCrossEntityReference()); + crossEntityReferenceDescriptor.hasCrossEntityReferences(); + assertFalse(crossEntityReferenceDescriptor.hasCrossEntityReferences()); + assertNotNull(crossEntityReferenceDescriptor.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceTest.java new file mode 100644 index 0000000..c403213 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceTest.java @@ -0,0 +1,36 @@ +package org.onap.aai.sparky.config.oxm; + +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + +public class CrossEntityReferenceTest { + + private CrossEntityReference crossEntityReference; + private ArrayList<String> refAttribute; + + @Before + public void init() throws Exception { + + crossEntityReference = new CrossEntityReference(); + refAttribute = new ArrayList<String>(); + + } + + @Test + public void updateValues() { + + crossEntityReference.setTargetEntityType(""); + assertNotNull(crossEntityReference.getTargetEntityType()); + crossEntityReference.setReferenceAttributes(refAttribute); + assertNotNull(crossEntityReference.getReferenceAttributes()); + crossEntityReference.addReferenceAttribute(""); + assertNotNull(crossEntityReference.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoEntityDescriptorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoEntityDescriptorTest.java new file mode 100644 index 0000000..dffda5c --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoEntityDescriptorTest.java @@ -0,0 +1,37 @@ +package org.onap.aai.sparky.config.oxm; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + + +import org.junit.Before; +import org.junit.Test; + +public class GeoEntityDescriptorTest { + + private GeoEntityDescriptor geoEntityDescriptor; + + @Before + public void init() throws Exception { + geoEntityDescriptor = new GeoEntityDescriptor(); + + } + + @Test + public void updateValues() { + + geoEntityDescriptor.setGeoLatName(""); + assertNotNull(geoEntityDescriptor.getGeoLatName()); + geoEntityDescriptor.setGeoLongName(""); + assertNotNull(geoEntityDescriptor.getGeoLongName()); + assertNotNull(geoEntityDescriptor.toString()); + geoEntityDescriptor.setGeoLatName(null); + assertNull(geoEntityDescriptor.getGeoLatName()); + geoEntityDescriptor.setGeoLongName(null); + assertNull(geoEntityDescriptor.getGeoLongName()); + assertNotNull(geoEntityDescriptor.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoOxmEntityDescriptorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoOxmEntityDescriptorTest.java new file mode 100644 index 0000000..2324194 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoOxmEntityDescriptorTest.java @@ -0,0 +1,40 @@ +package org.onap.aai.sparky.config.oxm; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; + +public class GeoOxmEntityDescriptorTest { + + private GeoOxmEntityDescriptor geoOxmEntityDescriptor; + + @Before + public void init() throws Exception { + geoOxmEntityDescriptor = new GeoOxmEntityDescriptor(); + + } + + @Test + public void updateValues() { + + geoOxmEntityDescriptor.setGeoLatName(""); + assertNotNull(geoOxmEntityDescriptor.getGeoLatName()); + geoOxmEntityDescriptor.setGeoLongName(""); + assertNotNull(geoOxmEntityDescriptor.getGeoLongName()); + assertTrue(geoOxmEntityDescriptor.hasGeoEntity()); + assertNotNull(geoOxmEntityDescriptor.toString()); + geoOxmEntityDescriptor.setGeoLatName(null); + assertNull(geoOxmEntityDescriptor.getGeoLatName()); + geoOxmEntityDescriptor.setGeoLongName(null); + assertNull(geoOxmEntityDescriptor.getGeoLongName()); + assertFalse(geoOxmEntityDescriptor.hasGeoEntity()); + assertNotNull(geoOxmEntityDescriptor.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityContainerLookup.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityContainerLookup.java new file mode 100644 index 0000000..7d55e4d --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityContainerLookup.java @@ -0,0 +1,99 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.config.oxm; + +import java.util.ArrayList; +import java.util.Collection; +import java.util.List; +import java.util.Map; + +import org.eclipse.persistence.dynamic.DynamicType; +import org.eclipse.persistence.internal.oxm.mappings.Descriptor; +import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; + +public class OxmEntityContainerLookup implements OxmModelProcessor { + + private Collection<String> searchableEntityGroups; + private Collection<String> entityContainers; + + public OxmEntityContainerLookup() { + searchableEntityGroups = new ArrayList<String>(); + entityContainers = new ArrayList<String>(); + } + + @Override + public void processOxmModel(DynamicJAXBContext jaxbContext) { + + @SuppressWarnings("rawtypes") + List<Descriptor> descriptorsList = jaxbContext.getXMLContext().getDescriptors(); + + for (@SuppressWarnings("rawtypes") + Descriptor desc : descriptorsList) { + + DynamicType entity = jaxbContext.getDynamicType(desc.getAlias()); + + @SuppressWarnings("unchecked") + Map<String, String> properties = entity.getDescriptor().getProperties(); + + if (properties != null) { + + String container = properties.get("container"); + + if (container != null && !entityContainers.contains(container)) { + + entityContainers.add(container); + + if (properties.containsKey("searchable")) { + if (!searchableEntityGroups.contains(container)) { + searchableEntityGroups.add(container); + } + } + } + + } + + } + + } + + public Collection<String> getSearchableEntityGroups() { + return searchableEntityGroups; + } + + public void setSearchableEntityGroups(Collection<String> searchableEntityGroups) { + this.searchableEntityGroups = searchableEntityGroups; + } + + public Collection<String> getEntityContainers() { + return entityContainers; + } + + public void setEntityContainers(Collection<String> entityContainers) { + this.entityContainers = entityContainers; + } + + public boolean isEntityContainer(String entityType) { + return entityContainers.contains(entityType); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityDescriptorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityDescriptorTest.java new file mode 100644 index 0000000..dea5d79 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityDescriptorTest.java @@ -0,0 +1,41 @@ +package org.onap.aai.sparky.config.oxm; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + +public class OxmEntityDescriptorTest { + + private OxmEntityDescriptor oxmEntityDescriptor; + private ArrayList<String> primaryKeyAttributeNames; + + @Before + public void init() throws Exception { + oxmEntityDescriptor = new OxmEntityDescriptor(); + primaryKeyAttributeNames = new ArrayList<String>(); + + } + + @Test + public void updateValues() { + + oxmEntityDescriptor.setEntityName(""); + assertNotNull(oxmEntityDescriptor.getEntityName()); + oxmEntityDescriptor.setPrimaryKeyAttributeNames(primaryKeyAttributeNames); + assertNotNull(oxmEntityDescriptor.getPrimaryKeyAttributeNames()); + oxmEntityDescriptor.addPrimaryKeyName(""); + assertNotNull(oxmEntityDescriptor.toString()); + oxmEntityDescriptor.setEntityName(null); + assertNull(oxmEntityDescriptor.getEntityName()); + oxmEntityDescriptor.setPrimaryKeyAttributeNames(null); + assertNull(oxmEntityDescriptor.getPrimaryKeyAttributeNames()); + assertNotNull(oxmEntityDescriptor.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/crossentityreference/sync/CrossEntityReferenceSynchronizerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/crossentityreference/sync/CrossEntityReferenceSynchronizerTest.java new file mode 100644 index 0000000..c6c999a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/crossentityreference/sync/CrossEntityReferenceSynchronizerTest.java @@ -0,0 +1,1035 @@ +package org.onap.aai.sparky.crossentityreference.sync; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.HashMap; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; + +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.CrossEntityReferenceLookup; +import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.config.oxm.OxmModelProcessor; +import org.onap.aai.sparky.config.oxm.SearchableEntityLookup; +import org.onap.aai.sparky.dal.ActiveInventoryAdapter; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; +import org.onap.aai.sparky.sync.enumeration.OperationState; +import org.onap.aai.sparky.util.StringCollectionContainsMatcher; +import org.onap.aai.sparky.util.TestResourceLoader; + +import com.fasterxml.jackson.databind.ObjectMapper; + +public class CrossEntityReferenceSynchronizerTest { + + private static ObjectMapper mapper = new ObjectMapper(); + + private CrossEntityReferenceSynchronizer cerSynchronizer; + + private ElasticSearchSchemaConfig esSchemaConfig; + private NetworkStatisticsConfig aaiStatConfig; + private NetworkStatisticsConfig esStatConfig; + private OxmEntityLookup oxmEntityLookup; + private SearchableEntityLookup searchableEntityLookup; + private ElasticSearchAdapter esAdapter; + private ActiveInventoryAdapter aaiAdapter; + private CrossEntityReferenceLookup cerLookup; + private RestEndpointConfig aaiRestEndPointConfig; + + @Before + public void init() throws Exception { + + esSchemaConfig = new ElasticSearchSchemaConfig(); + esSchemaConfig.setIndexDocType("default"); + esSchemaConfig.setIndexMappingsFileName(null); + esSchemaConfig.setIndexName("aggregation-index-name"); + esSchemaConfig.setIndexSettingsFileName(null); + + + aaiStatConfig = new NetworkStatisticsConfig(); + + aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + aaiStatConfig.setBytesHistogramMaxYAxis(1000000L); + aaiStatConfig.setBytesHistogramNumBins(20); + aaiStatConfig.setBytesHistogramNumDecimalPoints(2); + + aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000); + aaiStatConfig.setQueueLengthHistogramNumBins(20); + aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + aaiStatConfig.setTaskAgeHistogramNumBins(20); + aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L); + aaiStatConfig.setResponseTimeHistogramNumBins(20); + aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + aaiStatConfig.setTpsHistogramMaxYAxis(100); + aaiStatConfig.setTpsHistogramNumBins(20); + aaiStatConfig.setTpsHistogramNumDecimalPoints(2); + + esStatConfig = new NetworkStatisticsConfig(); + + esStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + esStatConfig.setBytesHistogramMaxYAxis(1000000L); + esStatConfig.setBytesHistogramNumBins(20); + esStatConfig.setBytesHistogramNumDecimalPoints(2); + + esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + esStatConfig.setQueueLengthHistogramMaxYAxis(20000); + esStatConfig.setQueueLengthHistogramNumBins(20); + esStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + esStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + esStatConfig.setTaskAgeHistogramNumBins(20); + esStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + esStatConfig.setResponseTimeHistogramMaxYAxis(10000L); + esStatConfig.setResponseTimeHistogramNumBins(20); + esStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + esStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + esStatConfig.setTpsHistogramMaxYAxis(100); + esStatConfig.setTpsHistogramNumBins(20); + esStatConfig.setTpsHistogramNumDecimalPoints(2); + + oxmEntityLookup = new OxmEntityLookup(); + + esAdapter = Mockito.mock(ElasticSearchAdapter.class); + aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + + + Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>(); + + processors.add(oxmEntityLookup); + + + Map<String, OxmEntityDescriptor> oxmEntityDescriptors = + new HashMap<String, OxmEntityDescriptor>(); + + OxmEntityDescriptor genericVnfDescriptor = new OxmEntityDescriptor(); + genericVnfDescriptor.setEntityName("generic-vnf"); + List<String> pkeyNames = new ArrayList<String>(); + pkeyNames.add("vnf-name"); + + genericVnfDescriptor.setPrimaryKeyAttributeNames(pkeyNames); + + oxmEntityDescriptors.put("generic-vnf", genericVnfDescriptor); + + + oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors); + + cerLookup = new CrossEntityReferenceLookup(); + processors.add(cerLookup); + + searchableEntityLookup = new SearchableEntityLookup(); + processors.add(searchableEntityLookup); + + OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors); + oxmModelLoader.loadLatestOxmModel(); + + aaiRestEndPointConfig = new RestEndpointConfig(); + aaiRestEndPointConfig.setNumRequestRetries(5); + + Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig); + + } + + @Test + public void validateBasicConstruction() throws Exception { + + cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup); + + cerSynchronizer.setAaiAdapter(aaiAdapter); + cerSynchronizer.setElasticSearchAdapter(esAdapter); + + assertNotNull(cerSynchronizer.getAaiAdapter()); + assertNotNull(cerSynchronizer.getElasticSearchAdapter()); + + } + + private Matcher<List<String>> listContainsValue(String expectedValue) { + return new StringCollectionContainsMatcher(expectedValue); + } + + @Test + public void validateSmallSync() throws Exception { + + cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup); + + cerSynchronizer.setAaiAdapter(aaiAdapter); + cerSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json"); + + OperationResult entitySelfLinks = new OperationResult(); + + entitySelfLinks.setResultCode(200); + entitySelfLinks.setResult(nodesQueryResponse); + + Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription")) + .thenReturn(entitySelfLinks); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1"); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2"); + + Mockito + .when( + aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-subscription-2"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/service-subscription-service-subscription-2.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-subscription-1"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/service-subscription-service-subscription-1.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json"))); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-59")))) + .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-54")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-55")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-50")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-52")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-57")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-53")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-58")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-51")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-56")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56"); + + + + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-59.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-54.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-55.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-50.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-52.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-57.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-53.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-58.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-51.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-56.json"))); + + + + + + + /* + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-59"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-59.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-54"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-54.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-55"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-55.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-50"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-50.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-52"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-52.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-57"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-57.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-53"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-53.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-58"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-58.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-51"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-51.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-56"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-56.json"))); + + + */ + + + + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())) + .thenReturn("http://localhost:9200/myindex/mytype/doc1", + "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3"); + + /* + * Our initial gets from elastic search should be record-not-found + */ + Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(200, null)); + + OperationState syncState = cerSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertNotNull(cerSynchronizer.getStatReport(false)); + assertNotNull(cerSynchronizer.getStatReport(true)); + + cerSynchronizer.clearCache(); + cerSynchronizer.shutdown(); + + + } + + @Test + public void validateSmallSyncWithRetries() throws Exception { + + cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup); + + cerSynchronizer.setAaiAdapter(aaiAdapter); + cerSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json"); + + OperationResult entitySelfLinks = new OperationResult(); + + entitySelfLinks.setResultCode(200); + entitySelfLinks.setResult(nodesQueryResponse); + + Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription")) + .thenReturn(entitySelfLinks); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1"); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2"); + + Mockito + .when( + aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-subscription-2"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/service-subscription-service-subscription-2.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-subscription-1"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/service-subscription-service-subscription-1.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json"))); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-59")))) + .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-54")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-55")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-50")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-52")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-57")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-53")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-58")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-51")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-56")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56"); + + + + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-59.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-54.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-55.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-50.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-52.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-57.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-53.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-58.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-51.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-56.json"))); + + + + + + + /* + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-59"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-59.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-54"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-54.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-55"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-55.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-50"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-50.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-52"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-52.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-57"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-57.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-53"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-53.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-58"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-58.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-51"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-51.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-instance-56"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/service-instance/service-instance-56.json"))); + + + */ + + + + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())) + .thenReturn("http://localhost:9200/myindex/mytype/doc1", + "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3"); + + /* + * Our initial gets from elastic search should be record-not-found + */ + Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())) + .thenReturn(new OperationResult(404, null)); + + + /* + * Cause version conflict errors on every put to test retry flow + */ + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(409, null)); + + OperationState syncState = cerSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertNotNull(cerSynchronizer.getStatReport(false)); + assertNotNull(cerSynchronizer.getStatReport(true)); + + cerSynchronizer.clearCache(); + cerSynchronizer.shutdown(); + + + + + } + + + + @Test + public void validateSmallSyncWithEntityMerges() throws Exception { + + cerSynchronizer = new CrossEntityReferenceSynchronizer(esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, cerLookup, oxmEntityLookup, searchableEntityLookup); + + cerSynchronizer.setAaiAdapter(aaiAdapter); + cerSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_service-subscription_nodesQuery_response.json"); + + OperationResult entitySelfLinks = new OperationResult(); + + entitySelfLinks.setResultCode(200); + entitySelfLinks.setResult(nodesQueryResponse); + + Mockito.when(aaiAdapter.getSelfLinksByEntityType("service-subscription")) + .thenReturn(entitySelfLinks); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-1"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-1/service-subscriptions/service-subscription/service-subscription-1"); + + Mockito + .when(aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-2"), + Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-2/service-subscriptions/service-subscription/service-subscription-2"); + + Mockito + .when( + aaiAdapter.repairSelfLink(Matchers.contains("service-subscription-3"), Mockito.anyString())) + .thenReturn( + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-3/service-subscriptions/service-subscription/service-subscription-3"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-subscription-2"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/service-subscription-service-subscription-2.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("service-subscription-1"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/service-subscription-service-subscription-1.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("service-subscription-3"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/service-subscription-service-subscription-3.json"))); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-59")))) + .thenReturn("https://server.proxy:8443/aai/v11/search/generic-query/service-instance-59"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-54")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-54"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-55")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-55"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-50")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-50"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-52")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-52"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-57")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-57"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-53")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-53"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-58")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-58"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-51")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-51"); + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat(listContainsValue("service-instance-56")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-56"); + + + + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-59"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-59.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-54"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-54.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-55"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-55.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-50"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-50.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-52"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-52.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-57"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-57.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-53"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-53.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-58"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-58.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-51"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-51.json"))); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-instance-56"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance-56.json"))); + + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())) + .thenReturn("http://localhost:9200/myindex/mytype/doc1", + "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3"); + + /* + * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update + */ + Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json"))); + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(200, null)); + + + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(200, null)); + + OperationState syncState = cerSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertNotNull(cerSynchronizer.getStatReport(false)); + assertNotNull(cerSynchronizer.getStatReport(true)); + + cerSynchronizer.clearCache(); + cerSynchronizer.shutdown(); + + + + + } + + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ActiveInventoryAdapterTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ActiveInventoryAdapterTest.java new file mode 100644 index 0000000..1273e80 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ActiveInventoryAdapterTest.java @@ -0,0 +1,63 @@ +package org.onap.aai.sparky.dal; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.ArrayList; + + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.enums.RestAuthenticationMode; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; + +public class ActiveInventoryAdapterTest { + + private OxmModelLoader oxmModelLoader; + private OxmEntityLookup oxmEntityLookup; + private RestEndpointConfig endpointConfig; + private ActiveInventoryAdapter aaiAdapter; + private ArrayList<String> queryParams; + + @Before + public void init() throws Exception { + + oxmModelLoader = new OxmModelLoader(); + oxmEntityLookup = new OxmEntityLookup(); + endpointConfig = new RestEndpointConfig(); + queryParams = new ArrayList<String>(); + endpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC); + aaiAdapter = new ActiveInventoryAdapter(oxmModelLoader,oxmEntityLookup,endpointConfig); + } + + + @SuppressWarnings("static-access") + @Test + public void updateValues()throws Exception { + + assertNotNull(aaiAdapter.getMessageHeaders()); + assertNotNull(aaiAdapter.getBasicAuthenticationCredentials()); + assertNotNull(aaiAdapter.getResourceBasePath()); + assertNotNull(aaiAdapter.extractResourcePath("")); + assertNotNull(aaiAdapter.getGenericQueryForSelfLink("",queryParams)); + assertNull(aaiAdapter.getSelfLinkForEntity("","","")); + assertNotNull(aaiAdapter.queryActiveInventory("","")); + assertNotNull(aaiAdapter.queryActiveInventoryWithRetries("","",4)); + aaiAdapter.setOxmEntityLookup(oxmEntityLookup); + assertNotNull(aaiAdapter.getOxmEntityLookup()); + aaiAdapter.setEndpointConfig(endpointConfig); + assertNotNull(aaiAdapter.getEndpointConfig()); + + //assertNull(aaiAdapter.repairSelfLink("","")); + //assertNotNull(aaiAdapter.repairSelfLink(null,"")); + //assertNotNull(aaiAdapter.getSelfLinkForEntity(null,"","")); + //assertNull(aaiAdapter.getSelfLinkForEntity("",null,"")); + //assertNotNull(aaiAdapter.getSelfLinkForEntity("","",null)); + //assertNotNull(aaiAdapter.getSelfLinksByEntityType("")); + //assertNotNull(aaiAdapter.getSelfLinksByEntityType(null)); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ElasticSearchAdapterTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ElasticSearchAdapterTest.java new file mode 100644 index 0000000..84fc515 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ElasticSearchAdapterTest.java @@ -0,0 +1,50 @@ +package org.onap.aai.sparky.dal; + +import static org.junit.Assert.assertNotNull; + +import javax.ws.rs.core.MediaType; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.enums.RestAuthenticationMode; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; + +public class ElasticSearchAdapterTest { + + + private ElasticSearchAdapter elasticSearchAdapter; + private RestEndpointConfig endpointConfig; + + @Before + public void init() throws Exception { + + endpointConfig = new RestEndpointConfig(); + endpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC); + elasticSearchAdapter = new ElasticSearchAdapter(endpointConfig); + } + + + @Test + public void updateValues() { + + assertNotNull(elasticSearchAdapter.doPost("https://10.247.40.25:8000","{maxResults:10, queryStr: f}",MediaType.APPLICATION_JSON_TYPE)); + assertNotNull(elasticSearchAdapter.doGet("https://10.247.40.25:8000",MediaType.APPLICATION_JSON_TYPE)); + assertNotNull(elasticSearchAdapter.doHead("https://10.247.40.25:8000",MediaType.APPLICATION_JSON_TYPE)); + assertNotNull(elasticSearchAdapter.doPut("https://10.247.40.25:8000","{maxResults:10, queryStr: f}",MediaType.APPLICATION_JSON_TYPE)); + assertNotNull(elasticSearchAdapter.doPatch("https://10.247.40.25:8000","{maxResults:10, queryStr: f}",MediaType.APPLICATION_JSON_TYPE)); + assertNotNull(elasticSearchAdapter.doDelete("https://10.247.40.25:8000",MediaType.APPLICATION_JSON_TYPE)); + assertNotNull(elasticSearchAdapter.doBulkOperation("https://10.247.40.25:8000","{maxResults:10, queryStr: f}")); + assertNotNull(elasticSearchAdapter.buildBulkImportOperationRequest("","","","","")); + assertNotNull(elasticSearchAdapter.retrieveEntityById("","","","","")); + assertNotNull(elasticSearchAdapter.buildElasticSearchUrlForApi("","")); + assertNotNull(elasticSearchAdapter.buildElasticSearchUrl("","")); + assertNotNull(elasticSearchAdapter.buildElasticSearchGetDocUrl("","","")); + assertNotNull(elasticSearchAdapter.buildElasticSearchGetDocUrl("","")); + assertNotNull(elasticSearchAdapter.buildElasticSearchPostUrl("")); + assertNotNull(elasticSearchAdapter.getBulkUrl()); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/NetworkTransactionTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/NetworkTransactionTest.java new file mode 100644 index 0000000..3852a8f --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/NetworkTransactionTest.java @@ -0,0 +1,59 @@ +package org.onap.aai.sparky.dal; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor; +import org.onap.aai.sparky.dal.rest.HttpMethod; + +public class NetworkTransactionTest { + + + private NetworkTransaction networkTransaction; + private NetworkTransaction networkTransactions; + private OxmEntityDescriptor descriptor; + private OperationResult opResult; + + @Before + public void init() throws Exception { + opResult = new OperationResult(); + descriptor = new OxmEntityDescriptor(); + networkTransaction = new NetworkTransaction(); + networkTransactions = new NetworkTransaction(HttpMethod.POST,"",opResult); + + + + } + + + @Test + public void updateValues() { + + networkTransaction.setOperationResult(opResult); + assertNotNull(networkTransaction.getOperationResult()); + networkTransaction.setOperationType(HttpMethod.PUT); + assertNotNull(networkTransaction.getOperationType()); + networkTransaction.setTaskAgeInMs(); + assertNotNull(networkTransaction.getTaskAgeInMs()); + networkTransaction.setEntityType("searchedNodeClass"); + assertNotNull(networkTransaction.getEntityType()); + networkTransaction.setLink("/etc/aaiEntityNodeDescriptors.json"); + assertNotNull(networkTransaction.getLink()); + networkTransaction.setQueryParameters("/etc/aaiEntityNodeDescriptors.json"); + assertNotNull(networkTransaction.getQueryParameters()); + networkTransaction.setDescriptor(descriptor); + assertNotNull(networkTransaction.getDescriptor()); + networkTransaction.setOpTimeInMs(3); + assertEquals(3,networkTransaction.getOpTimeInMs()); + assertNotNull(networkTransaction.toString()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntity.java new file mode 100644 index 0000000..d01a98e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntity.java @@ -0,0 +1,44 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AutoSuggestDocumentEntity { + + @JsonProperty("entity_suggest") + AutoSuggestDocumentEntityFields fields; + + public AutoSuggestDocumentEntityFields getFields() { + return fields; + } + + public void setFields(AutoSuggestDocumentEntityFields fields) { + this.fields = fields; + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntityFields.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntityFields.java new file mode 100644 index 0000000..a4b7370 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntityFields.java @@ -0,0 +1,81 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonInclude.Include; + +@JsonInclude(Include.NON_NULL) +public class AutoSuggestDocumentEntityFields { + + private String output; + private List<String> input; + private PayloadEntity payload; + private int weight; + + public AutoSuggestDocumentEntityFields() { + input = new ArrayList<String>(); + } + + public String getOutput() { + return output; + } + + public void setOutput(String output) { + this.output = output; + } + + public List<String> getInput() { + return input; + } + + public void setInput(List<String> input) { + this.input = input; + } + + public PayloadEntity getPayload() { + return payload; + } + + public void setPayload(PayloadEntity payload) { + this.payload = payload; + } + + public int getWeight() { + return weight; + } + + public void setWeight(int weight) { + this.weight = weight; + } + + public void addInput(String input) { + this.input.add(input); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitEntity.java new file mode 100644 index 0000000..33ad604 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitEntity.java @@ -0,0 +1,87 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AutoSuggestElasticHitEntity { + + @JsonProperty("_index") + private String index; + + @JsonProperty("_type") + private String type; + + @JsonProperty("_id") + private String id; + + @JsonProperty("_score") + private String score; + + @JsonProperty("_source") + private AutoSuggestDocumentEntity source; + + public String getIndex() { + return index; + } + + public void setIndex(String index) { + this.index = index; + } + + public String getType() { + return type; + } + + public void setType(String type) { + this.type = type; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public String getScore() { + return score; + } + + public void setScore(String score) { + this.score = score; + } + + public AutoSuggestDocumentEntity getSource() { + return source; + } + + public void setSource(AutoSuggestDocumentEntity source) { + this.source = source; + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitsEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitsEntity.java new file mode 100644 index 0000000..7efe4a4 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitsEntity.java @@ -0,0 +1,50 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.ArrayList; +import java.util.List; + +public class AutoSuggestElasticHitsEntity { + + private List<AutoSuggestElasticHitEntity> hits; + + public AutoSuggestElasticHitsEntity() { + hits = new ArrayList<AutoSuggestElasticHitEntity>(); + } + + public List<AutoSuggestElasticHitEntity> getHits() { + return hits; + } + + public void setHits(List<AutoSuggestElasticHitEntity> hits) { + this.hits = hits; + } + + public void addHit(AutoSuggestElasticHitEntity hit) { + this.hits.add(hit); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticSearchResponse.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticSearchResponse.java new file mode 100644 index 0000000..1b096cd --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticSearchResponse.java @@ -0,0 +1,85 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class AutoSuggestElasticSearchResponse { + + private int took; + + @JsonProperty("timed_out") + private boolean timedOut; + + @JsonProperty("_shards") + private Map<String,String> shards; + + private AutoSuggestElasticHitsEntity hits; + + public AutoSuggestElasticSearchResponse(){ + this.shards = new HashMap<String,String>(); + } + + public int getTook() { + return took; + } + + public void setTook(int took) { + this.took = took; + } + + public boolean isTimedOut() { + return timedOut; + } + + public void setTimedOut(boolean timedOut) { + this.timedOut = timedOut; + } + + public Map<String, String> getShards() { + return shards; + } + + public void setShards(Map<String, String> shards) { + this.shards = shards; + } + + public void addShard(String name, String value) { + shards.put(name, value); + } + + public AutoSuggestElasticHitsEntity getHits() { + return hits; + } + + public void setHits(AutoSuggestElasticHitsEntity hits) { + this.hits = hits; + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/BucketEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/BucketEntity.java new file mode 100644 index 0000000..69285a2 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/BucketEntity.java @@ -0,0 +1,61 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class BucketEntity { + private String key; + + @JsonProperty("doc_count") + private int docCount; + + public BucketEntity() { + + } + + public BucketEntity(String name, int value) { + this.key = name; + this.docCount = value; + } + + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + + public int getDocCount() { + return docCount; + } + + public void setDocCount(int docCount) { + this.docCount = docCount; + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHit.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHit.java new file mode 100644 index 0000000..e9409af --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHit.java @@ -0,0 +1,29 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +public class ElasticHit { + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHitsEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHitsEntity.java new file mode 100644 index 0000000..a5a71b8 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHitsEntity.java @@ -0,0 +1,74 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ElasticHitsEntity { + + private int total; + @JsonProperty("max_score") + private int maxScore; + + private List<ElasticHit> hits; + + public ElasticHitsEntity() { + this.hits = new ArrayList<ElasticHit>(); + } + + public void addHit(ElasticHit hit) { + this.hits.add(hit); + } + + public int getTotal() { + return total; + } + + public void setTotal(int total) { + this.total = total; + } + + public int getMaxScore() { + return maxScore; + } + + public void setMaxScore(int maxScore) { + this.maxScore = maxScore; + } + + public List<ElasticHit> getHits() { + return hits; + } + + public void setHits(List<ElasticHit> hits) { + this.hits = hits; + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggegrationResponse.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggegrationResponse.java new file mode 100644 index 0000000..8e1b5f1 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggegrationResponse.java @@ -0,0 +1,109 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.HashMap; +import java.util.Map; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ElasticSearchAggegrationResponse { + + private int took; + + @JsonProperty("timed_out") + private boolean timedOut; + + @JsonProperty("_shards") + private Map<String, String> shards; + + private ElasticHitsEntity hits; + + private Map<String, ElasticSearchAggregation> aggregations; + + public ElasticSearchAggegrationResponse() { + this.shards = new HashMap<String, String>(); + this.aggregations = new HashMap<String,ElasticSearchAggregation>(); + } + + + public int getTook() { + return took; + } + + + public void setTook(int took) { + this.took = took; + } + + + public boolean isTimedOut() { + return timedOut; + } + + + public void setTimedOut(boolean timedOut) { + this.timedOut = timedOut; + } + + + public Map<String, String> getShards() { + return shards; + } + + + public void setShards(Map<String, String> shards) { + this.shards = shards; + } + + + public ElasticHitsEntity getHits() { + return hits; + } + + + public void setHits(ElasticHitsEntity hits) { + this.hits = hits; + } + + public void addShard(String key, String value) { + this.shards.put(key,value); + } + + + public Map<String, ElasticSearchAggregation> getAggregations() { + return aggregations; + } + + + public void setAggregations(Map<String, ElasticSearchAggregation> aggregations) { + this.aggregations = aggregations; + } + + public void addAggregation(String key, ElasticSearchAggregation agg) { + this.aggregations.put(key, agg); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggregation.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggregation.java new file mode 100644 index 0000000..a7d9ce7 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggregation.java @@ -0,0 +1,74 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.ArrayList; +import java.util.List; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class ElasticSearchAggregation { + + @JsonProperty("doc_count_error_upper_bound") + private int docCountErrorUpperBound; + + @JsonProperty("sum_other_doc_count") + private int sumOtherDocCount; + + private List<BucketEntity> buckets; + + public ElasticSearchAggregation() { + buckets = new ArrayList<BucketEntity>(); + } + + public int getDocCountErrorUpperBound() { + return docCountErrorUpperBound; + } + + public void setDocCountErrorUpperBound(int docCountErrorUpperBound) { + this.docCountErrorUpperBound = docCountErrorUpperBound; + } + + public int getSumOtherDocCount() { + return sumOtherDocCount; + } + + public void setSumOtherDocCount(int sumOtherDocCount) { + this.sumOtherDocCount = sumOtherDocCount; + } + + public List<BucketEntity> getBuckets() { + return buckets; + } + + public void setBuckets(List<BucketEntity> buckets) { + this.buckets = buckets; + } + + public void addBucket(BucketEntity bucket) { + buckets.add(bucket); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchCountResponse.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchCountResponse.java new file mode 100644 index 0000000..0d165f3 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchCountResponse.java @@ -0,0 +1,60 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +import java.util.HashMap; +import java.util.Map; + +public class ElasticSearchCountResponse { + + private int count; + private Map<String, String> shards; + + public ElasticSearchCountResponse() { + this.shards = new HashMap<String,String>(); + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + + public Map<String, String> getShards() { + return shards; + } + + public void setShards(Map<String, String> shards) { + this.shards = shards; + } + + public void addShard(String key, String value) { + this.shards.put(key, value); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/PayloadEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/PayloadEntity.java new file mode 100644 index 0000000..a74ac0f --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/PayloadEntity.java @@ -0,0 +1,32 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.elasticsearch.entity; + +public class PayloadEntity { + + public PayloadEntity() { + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/proxy/processor/AaiUiProxyProcessorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/proxy/processor/AaiUiProxyProcessorTest.java new file mode 100644 index 0000000..e710338 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/proxy/processor/AaiUiProxyProcessorTest.java @@ -0,0 +1,145 @@ +/** + * ============LICENSE_START======================================================= + * SPARKY (AAI UI service) + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.proxy.processor; + +import static org.junit.Assert.assertEquals; + +import javax.servlet.http.HttpServletRequest; +import javax.ws.rs.core.MediaType; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import org.mockito.AdditionalMatchers; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.restclient.client.RestClient; +import org.onap.aai.restclient.enums.RestAuthenticationMode; +import org.onap.aai.sparky.dal.rest.RestClientConstructionException; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; +import org.restlet.data.Status; + +public class AaiUiProxyProcessorTest { + + private RestClient client = null; + private OperationResult successResult = null; + OperationResult failureResult = null; + private Exchange mockExchange; + private Message mockRequestMessage; + private Message mockResponseMessage; + + private HttpServletRequest mockHttpServletRequest; + + private AaiUiProxyProcessor aaiUiProxyProcessor; + + private String goodBeTargetUrl = "https://0.0.0.0:8000/services/routerService/servicegraph"; + private String badBeTargetUrl = "https://0.0.0.0:8000/aservicegraph"; + private String goodDrTargetUrl = "https://0.0.0.0:9502/ui-request/servicegraph"; + + String successResponsePayload = "good-payload"; + String failureResponsePayload = "Server Error"; + + @Before + public void init()throws RestClientConstructionException { + client = Mockito.mock(RestClient.class); + mockExchange = Mockito.mock(Exchange.class); + mockRequestMessage = Mockito.mock(Message.class); + mockResponseMessage = Mockito.mock(Message.class); + mockHttpServletRequest = Mockito.mock(HttpServletRequest.class); + + + RestEndpointConfig config = new RestEndpointConfig(); + config.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC); + aaiUiProxyProcessor = new AaiUiProxyProcessor(config,"ui-request"); + + initializeMocks(getProxyRequestJson("someHashValue")); + aaiUiProxyProcessor.setClient(client); + } + + @Test + public void testProxyMessage_successPath() { + OperationResult successResultSpy = Mockito.spy(successResult); + Mockito.when(client.post(Mockito.eq(goodDrTargetUrl), Mockito.anyString(), Mockito.anyMap(), + Mockito.eq(MediaType.APPLICATION_JSON_TYPE), Mockito.eq(MediaType.APPLICATION_JSON_TYPE))) + .thenReturn(successResultSpy); + + Mockito.when(mockExchange.getIn().getHeader(Exchange.HTTP_URI)).thenReturn(goodBeTargetUrl); + Mockito.when(mockExchange.getIn().getBody(HttpServletRequest.class)).thenReturn(mockHttpServletRequest); + aaiUiProxyProcessor.proxyMessage(mockExchange); + + //Mockito.verify(successResultSpy).getResult(); + //assertEquals(Status.SUCCESS_OK.getCode(), aaiUiProxyProcessor.getOperationResult().getResultCode()); + } + + @Test + public void testProxyMessage_failurePath() { + OperationResult failureResultSpy = Mockito.spy(failureResult); + Mockito.when(client.post(AdditionalMatchers.not(Matchers.eq(goodDrTargetUrl)), + Mockito.anyString(), Mockito.anyMap(), Mockito.eq(MediaType.APPLICATION_JSON_TYPE), + Mockito.eq(MediaType.APPLICATION_JSON_TYPE))).thenReturn(failureResultSpy); + + Mockito.when(mockExchange.getIn().getHeader(Exchange.HTTP_URI)).thenReturn(badBeTargetUrl); + Mockito.when(mockExchange.getIn().getBody(HttpServletRequest.class)).thenReturn(mockHttpServletRequest); + aaiUiProxyProcessor.proxyMessage(mockExchange); + + Mockito.verify(failureResultSpy).getFailureCause(); + assertEquals(Status.SERVER_ERROR_INTERNAL.getCode(), aaiUiProxyProcessor.getOperationResult().getResultCode()); + } + + private String getProxyRequestJson(String hashId) { + JSONObject root = new JSONObject(); + root.put("hashId", hashId); + return root.toString(); + + } + + @SuppressWarnings("unchecked") + private void initializeMocks(String requestPayload) { + + client = Mockito.mock(RestClient.class); + successResult = new OperationResult(200, successResponsePayload); + failureResult = new OperationResult(500, failureResponsePayload); + failureResult.setFailureCause(failureResponsePayload); + + Mockito.when(client.post(Mockito.eq(goodDrTargetUrl), Mockito.anyString(), Mockito.anyMap(), + Mockito.eq(MediaType.APPLICATION_JSON_TYPE), Mockito.eq(MediaType.APPLICATION_JSON_TYPE))) + .thenReturn(successResult); + + Mockito.when(client.post(AdditionalMatchers.not(Matchers.eq(goodDrTargetUrl)), + Mockito.anyString(), Mockito.anyMap(), Mockito.eq(MediaType.APPLICATION_JSON_TYPE), + Mockito.eq(MediaType.APPLICATION_JSON_TYPE))).thenReturn(failureResult); + + Mockito.when(mockHttpServletRequest.getRequestURI()).thenReturn("fakeUri"); + Mockito.when(mockHttpServletRequest.getLocalPort()).thenReturn(8001); + + Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage); + Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage); + } + +} + diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/rest/config/RestEndpointConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/rest/config/RestEndpointConfigTest.java new file mode 100644 index 0000000..eb1e3f8 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/rest/config/RestEndpointConfigTest.java @@ -0,0 +1,76 @@ +package org.onap.aai.sparky.dal.rest.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; + +import org.onap.aai.restclient.enums.RestAuthenticationMode; + +public class RestEndpointConfigTest { + + private RestEndpointConfig restEndpointConfig; + @Before + public void init() throws Exception{ + + restEndpointConfig = new RestEndpointConfig(); + + + } + + @Test + public void updateValues(){ + restEndpointConfig.setValidateServerCertChain(true); + assertTrue(restEndpointConfig.isValidateServerCertChain()); + restEndpointConfig.setValidateServerHostname(true); + assertTrue(restEndpointConfig.isValidateServerHostname()); + restEndpointConfig.setEndpointIpAddress("10.147.110.199"); + assertNotNull(restEndpointConfig.getEndpointIpAddress()); + restEndpointConfig.setEndpointServerPort("9885"); + assertNotNull(restEndpointConfig.getEndpointServerPort()); + restEndpointConfig.setNumRequestRetries(5); + assertEquals(restEndpointConfig.getNumRequestRetries(),5); + restEndpointConfig.setBasicAuthUserName("sparky"); + assertNotNull(restEndpointConfig.getBasicAuthUserName()); + restEndpointConfig.setBasicAuthPassword("sparky"); + assertNotNull(restEndpointConfig.getBasicAuthPassword()); + restEndpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC); + assertEquals(restEndpointConfig.getRestAuthenticationMode(),RestAuthenticationMode.SSL_BASIC); + restEndpointConfig.setConnectTimeoutInMs(6000); + assertEquals(restEndpointConfig.getConnectTimeoutInMs(),6000); + restEndpointConfig.setCertFileName("aai-client-cert.p12"); + assertNotNull(restEndpointConfig.getCertFileName()); + restEndpointConfig.setReadTimeoutInMs(4000); + assertEquals(restEndpointConfig.getReadTimeoutInMs(),4000); + restEndpointConfig.setCertPassword("1i9a1u2a1unz1lr61wn51wn11lss1unz1u301i6o"); + assertNotNull(restEndpointConfig.getCertPassword()); + restEndpointConfig.setTruststoreFileName("synchronizer.jks"); + assertNotNull(restEndpointConfig.getTruststoreFileName()); + assertNotNull(restEndpointConfig.toString()); + + restEndpointConfig.setEndpointIpAddress(null); + assertNull(restEndpointConfig.getEndpointIpAddress()); + restEndpointConfig.setEndpointServerPort(null); + assertNull(restEndpointConfig.getEndpointServerPort()); + restEndpointConfig.setCertFileName(null); + assertNull(restEndpointConfig.getCertFileName()); + restEndpointConfig.setTruststoreFileName(null); + assertNull(restEndpointConfig.getTruststoreFileName()); + restEndpointConfig.setRestAuthenticationMode(null); + assertNull(restEndpointConfig.getRestAuthenticationMode()); + restEndpointConfig.setCertPassword(null); + assertNull(restEndpointConfig.getCertPassword()); + restEndpointConfig.setBasicAuthUserName(null); + assertNull(restEndpointConfig.getBasicAuthUserName()); + restEndpointConfig.setBasicAuthPassword(null); + assertNull(restEndpointConfig.getBasicAuthPassword()); + assertNotNull(restEndpointConfig.toString()); + + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/config/SearchServiceConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/config/SearchServiceConfigTest.java new file mode 100644 index 0000000..712ae30 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/config/SearchServiceConfigTest.java @@ -0,0 +1,21 @@ +package org.onap.aai.sparky.dal.sas.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; + + +import org.junit.Before; +import org.junit.Test; + +public class SearchServiceConfigTest { + + @Before + public void init() throws Exception{ + + } + + @Test + public void updateValues(){ + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/DocumentEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/DocumentEntity.java new file mode 100644 index 0000000..b9349a9 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/DocumentEntity.java @@ -0,0 +1,68 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +import java.util.HashMap; +import java.util.Map; + +public class DocumentEntity { + private String etag; + private String url; + private Map<String,String> content; + + public DocumentEntity() { + content = new HashMap<String,String>(); + } + + + public String getEtag() { + return etag; + } + + public void setEtag(String etag) { + this.etag = etag; + } + + public String getUrl() { + return url; + } + + public void setUrl(String url) { + this.url = url; + } + + public Map<String, String> getContent() { + return content; + } + + public void setContent(Map<String, String> content) { + this.content = content; + } + + public void addContent(String key, String value) { + content.put(key, value); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/EntityCountResponse.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/EntityCountResponse.java new file mode 100644 index 0000000..20002d2 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/EntityCountResponse.java @@ -0,0 +1,55 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +import java.util.HashMap; +import java.util.Map; + +public class EntityCountResponse { + + private Map<String,String> shards; + private int count; + + public EntityCountResponse() { + this.shards = new HashMap<String,String>(); + } + + public Map<String, String> getShards() { + return shards; + } + + public void setShards(Map<String, String> shards) { + this.shards = shards; + } + + public int getCount() { + return count; + } + + public void setCount(int count) { + this.count = count; + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationEntity.java new file mode 100644 index 0000000..4a3bbf4 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationEntity.java @@ -0,0 +1,60 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.aai.sparky.dal.elasticsearch.entity.BucketEntity; + +public class GroupByAggregationEntity { + private int totalChartHits; + List<BucketEntity> buckets; + + public GroupByAggregationEntity() { + this.buckets = new ArrayList<BucketEntity>(); + } + + public int getTotalChartHits() { + return totalChartHits; + } + + public void setTotalChartHits(int totalChartHits) { + this.totalChartHits = totalChartHits; + } + + public List<BucketEntity> getBuckets() { + return buckets; + } + + public void setBuckets(List<BucketEntity> buckets) { + this.buckets = buckets; + } + + public void addBucket(BucketEntity bucket) { + this.buckets.add(bucket); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationResponseEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationResponseEntity.java new file mode 100644 index 0000000..fd2e17d --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationResponseEntity.java @@ -0,0 +1,48 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +import com.fasterxml.jackson.annotation.JsonProperty; + +public class GroupByAggregationResponseEntity { + + @JsonProperty("groupby_aggregation") + private GroupByAggregationEntity aggEntity; + + public GroupByAggregationResponseEntity() { + + } + + public GroupByAggregationEntity getAggEntity() { + return aggEntity; + } + + public void setAggEntity(GroupByAggregationEntity aggEntity) { + this.aggEntity = aggEntity; + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/HitEntity.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/HitEntity.java new file mode 100644 index 0000000..73b2d12 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/HitEntity.java @@ -0,0 +1,48 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +public class HitEntity { + + private String score; + private DocumentEntity document; + + public String getScore() { + return score; + } + + public void setScore(String score) { + this.score = score; + } + + public DocumentEntity getDocument() { + return document; + } + + public void setDocument(DocumentEntity document) { + this.document = document; + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionEntityBuilder.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionEntityBuilder.java new file mode 100644 index 0000000..88dff42 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionEntityBuilder.java @@ -0,0 +1,294 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +import java.util.ArrayList; +import java.util.List; + +public class SearchAbstractionEntityBuilder { + + + public static HitEntity getHitSample1() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("17.073963"); + + doc.addContent("entityPrimaryKeyValue", "example-vnf-id-val-4394"); + doc.addContent("entityType", "vpe"); + doc.addContent("searchTags", "example-vnf-id-val-4394;example-vnf-name-val-4394;example-vnf-name2-val-4394"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/vpes/vpe/example-vnf-id-val-4394"); + doc.addContent("searchTagIDs", "0;1;2"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:20:48.072-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/e317a35256717f10e88d1b2c995efcdddfc911bf350c73e37e8afca6dfb11553"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample2() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("17.073963"); + + doc.addContent("entityPrimaryKeyValue", "vpe-vnf-id-team4-11"); + doc.addContent("entityType", "vpe"); + doc.addContent("searchTags", "vpe-vnf-id-team4-11;example-vnf-name-val-9512;example-vnf-name2-val-9512"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/vpes/vpe/vpe-vnf-id-team4-11"); + doc.addContent("searchTagIDs", "0;1;2"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:20:48.175-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/80f6d1a252e047e50e0adbeb90ad30876bb5b63cf70c9dd53f3fe46aeb50c74b"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample3() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("17.030035"); + + doc.addContent("entityPrimaryKeyValue", "example-vnf-id-val-6176"); + doc.addContent("entityType", "generic-vnf"); + doc.addContent("searchTags", "example-vnf-id-val-6176;example-vnf-name-val-6176;example-vnf-name2-val-6176"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/generic-vnfs/generic-vnf/example-vnf-id-val-6176"); + doc.addContent("searchTagIDs", "0;1;2"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:29:39.889-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/8dfd1136f943296508fee11efcda35a0719aa490aa60e9abffecce0b220d8c94"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample4() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("17.01174"); + + doc.addContent("entityPrimaryKeyValue", "vnf-id-team4-11"); + doc.addContent("entityType", "newvce"); + doc.addContent("searchTags", "vnf-id-team4-11;example-vnf-name-val-5313;example-vnf-name2-val-5313"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/newvces/newvce/vnf-id-team4-11"); + doc.addContent("searchTagIDs", "0;1;2"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:21:08.142-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/83dcab92d75b20eb94578039c8cec5e7b6b4717791e3c367d8af5069ce76dc90"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample5() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("17.01174"); + + doc.addContent("entityPrimaryKeyValue", "example-vnf-id2-val-9501"); + doc.addContent("entityType", "newvce"); + doc.addContent("searchTags", "example-vnf-id2-val-9501;example-vnf-name-val-9501;example-vnf-name2-val-9501"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/newvces/newvce/example-vnf-id2-val-9501"); + doc.addContent("searchTagIDs", "0;1;2"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:21:23.323-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/461816ba8aa94d01f2c978999b843dbaf10e0509db58d1945d6f5999d6db8f5e"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample6() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("17.01174"); + + doc.addContent("entityPrimaryKeyValue", "vnf-id-dm-auto-10"); + doc.addContent("entityType", "vce"); + doc.addContent("searchTags", "vpe-id-dm-auto-10;vnf-id-dm-auto-10;vnf-name-dm-auto-10;vnf-name2-dm-auto-10"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/vces/vce/vnf-id-dm-auto-10"); + doc.addContent("searchTagIDs", "0;1;2;3"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:24:57.209-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/1ead4512e65ee0eafb24e0156cc1abdf97368f08dfe065f02580aa09661bbcd8"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample7() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("13.940832"); + + doc.addContent("entityPrimaryKeyValue", "e3e59c5b-ad48-44d0-b3e4-80eacdcee4c7"); + doc.addContent("entityType", "generic-vnf"); + doc.addContent("searchTags", "e3e59c5b-ad48-44d0-b3e4-80eacdcee4c7;VNF_Test_vNF_modules_01"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/generic-vnfs/generic-vnf/e3e59c5b-ad48-44d0-b3e4-80eacdcee4c7"); + doc.addContent("searchTagIDs", "0;1"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:26:34.603-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/1462582e8fd7786f72f26548e4247b72ab6cd101cca0bbb68a60dd3ad16500d0"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample8() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("13.940832"); + + doc.addContent("entityPrimaryKeyValue", "fusion-jitsi-vnf-001"); + doc.addContent("entityType", "generic-vnf"); + doc.addContent("searchTags", "fusion-jitsi-vnf-001;fusion-jitsi-vnf"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/generic-vnfs/generic-vnf/fusion-jitsi-vnf-001"); + doc.addContent("searchTagIDs", "0;1"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:28:14.293-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/b79ddfec9a00184445174c91e7490a0d407f351983bba4ae53bfec0584f73ee3"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample9() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("13.940832"); + + doc.addContent("entityPrimaryKeyValue", "vnfm0003v"); + doc.addContent("entityType", "generic-vnf"); + doc.addContent("searchTags", "vnfm0003v;vnfm0003v"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/generic-vnfs/generic-vnf/vnfm0003v"); + doc.addContent("searchTagIDs", "0;1"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:29:39.594-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/52ae232ea5506d6de8ef35c4f46a1ceafe35f3717ff578b83531bc7615870b12"); + doc.setEtag("1"); + + + return hitEntity; + + } + + public static HitEntity getHitSample10() { + + HitEntity hitEntity = new HitEntity(); + DocumentEntity doc = new DocumentEntity(); + + hitEntity.setDocument(doc); + hitEntity.setScore("13.928098"); + + doc.addContent("entityPrimaryKeyValue", "amist456vnf"); + doc.addContent("entityType", "generic-vnf"); + doc.addContent("searchTags", "amist456vnf;amist456vnf"); + doc.addContent("link", "https://ext1.test.onap.com:8443/aai/v9/network/generic-vnfs/generic-vnf/amist456vnf"); + doc.addContent("searchTagIDs", "0;1"); + doc.addContent("lastmodTimestamp", "2017-04-18T17:28:28.163-0400"); + + doc.setUrl("services/search-data-service/v1/search/indexes/entitysearchindex-localhost-ist-apr18/documents/3424afea5963696380a0fdc78ee5320cf5fa9bc0459f1f9376db208d31196434"); + doc.setEtag("1"); + + + return hitEntity; + + } + + + + public static SearchAbstractionResponse getSuccessfulEntitySearchResponse() { + + SearchAbstractionResponse sasResponse = new SearchAbstractionResponse(); + + SearchResult searchResult = new SearchResult(); + sasResponse.setSearchResult(searchResult); + + searchResult.setTotalHits(3257); + + List<HitEntity> hits = new ArrayList<HitEntity>(); + + hits.add(getHitSample1()); + hits.add(getHitSample2()); + hits.add(getHitSample3()); + hits.add(getHitSample4()); + hits.add(getHitSample5()); + hits.add(getHitSample6()); + hits.add(getHitSample7()); + hits.add(getHitSample8()); + hits.add(getHitSample9()); + hits.add(getHitSample10()); + + searchResult.setHits(hits); + + return sasResponse; + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionResponse.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionResponse.java new file mode 100644 index 0000000..b937f66 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionResponse.java @@ -0,0 +1,39 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +public class SearchAbstractionResponse { + + private SearchResult searchResult; + + public SearchResult getSearchResult() { + return searchResult; + } + + public void setSearchResult(SearchResult searchResult) { + this.searchResult = searchResult; + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchResult.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchResult.java new file mode 100644 index 0000000..a656491 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchResult.java @@ -0,0 +1,49 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.dal.sas.entity; + +import java.util.List; + +public class SearchResult { + + private int totalHits; + private List<HitEntity> hits; + + public int getTotalHits() { + return totalHits; + } + public void setTotalHits(int totalHits) { + this.totalHits = totalHits; + } + public List<HitEntity> getHits() { + return hits; + } + public void setHits(List<HitEntity> hits) { + this.hits = hits; + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/AttributeUpdaterTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/AttributeUpdaterTest.java new file mode 100644 index 0000000..63b3ff4 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/AttributeUpdaterTest.java @@ -0,0 +1,164 @@ +package org.onap.aai.sparky.editattributes; +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +/* +package org.openecomp.sparky.editattributes; + +import static org.junit.Assert.assertEquals; + +import java.util.HashMap; +import java.util.Map; + +import javax.ws.rs.core.Response.Status; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.dal.aai.config.ActiveInventoryConfig; +import org.onap.aai.sparky.editattributes.AttributeUpdater; +import org.openecomp.sparky.dal.aai.config.ActiveInventoryConfigUtil; + + +/** + * The Class AttributeUpdaterTest. + * +public class AttributeUpdaterTest { + + /** + * Sets the up. + * + * @throws Exception the exception + * + @Before + public void setUp() throws Exception {} + + /** + * @throws Exception + */ + /* + @Test + public void testUpdateObjectAttribute() throws Exception { + + OxmEntityDescriptor desc = new OxmEntityDescriptor(); + desc.addPrimaryKeyName("hostname"); + desc.setEntityName("pserver"); + + OxmEntityLookup entityLookup = OxmEntityLookup.getInstance(); + entityLookup.addEntityDescriptor("pserver", desc); + + AttributeUpdater updater = new AttributeUpdater(new OxmModelLoader(), entityLookup, + new ActiveInventoryConfig(ActiveInventoryConfigUtil.getValidTestProperties())); + Map<String, Object> attributes = new HashMap<>(); + attributes.put("prov-status", "PREPROV"); + attributes.put("in-maint", "true"); + OperationResult result = updater.updateObjectAttribute( + "cloud-infrastructure/pservers/pserver/something", attributes, "someid"); + assertEquals(Status.FORBIDDEN.getStatusCode(), result.getResultCode()); + } + */ + + // This needs the OXM file in place to work. + /** + * Test get edit object from uri. + * + * @throws Exception the exception + */ + //@Test + /*public void testGetEditObjectFromUri() throws Exception { + + OxmModelLoader loader = new OxmModelLoader(); + loader.setLatestVersionNum(11); + + OxmEntityDescriptor desc = new OxmEntityDescriptor(); + desc.addPrimaryKeyName("hostname"); + desc.setEntityName("pserver"); + + OxmEntityLookup entityLookup = OxmEntityLookup.getInstance(); + entityLookup.addEntityDescriptor("pserver", desc); + + + DynamicType mockType = Mockito.mock(DynamicType.class); + Class<? extends DynamicEntity> mockDynamicEntity = Mockito.mock(DynamicEntity.class); + + Mockito.when(mockType.getJavaClass()).thenReturn(mockDynamicEntity); + + + + + HashMap<String, DynamicType> typeLookup = new HashMap<String,DynamicType>(); + typeLookup.put("pserver", mockType); + + entityLookup.setEntityTypeLookup(typeLookup); + + + AttributeUpdater updater = new AttributeUpdater(new OxmModelLoader(), entityLookup, + new ActiveInventoryConfig(ActiveInventoryConfigUtil.getValidTestProperties())); + AaiEditObject result = + updater.getEditObjectFromUri("cloud-infrastructure/pservers/pserver/mtznjtax101"); + assertEquals("Pserver", result.getObjectType()); + assertEquals("pserver", result.getRootElement()); + assertEquals("hostname", result.getKeyName()); + assertEquals("mtznjtax101", result.getKeyValue()); + }*/ + + /** + * Test get relative uri. + * + * @throws Exception the exception + */ + /* + @Test + public void testGetRelativeUri() throws Exception { + + OxmEntityDescriptor desc = new OxmEntityDescriptor(); + desc.addPrimaryKeyName("hostname"); + desc.setEntityName("pserver"); + + OxmEntityLookup entityLookup = OxmEntityLookup.getInstance(); + entityLookup.addEntityDescriptor("pserver", desc); + + AttributeUpdater updater = new AttributeUpdater(new OxmModelLoader(), entityLookup, + new ActiveInventoryConfig(ActiveInventoryConfigUtil.getValidTestProperties())); + // Test entity uri without "/aai/version/" + String result = updater.getRelativeUri("cloud-infrastructure/pservers/pserver/mtznjtax101"); + assertEquals("/cloud-infrastructure/pservers/pserver/mtznjtax101", result); + result = updater.getRelativeUri("/aai/v8/cloud-infrastructure/pservers/pserver/mtznjtax101"); + assertEquals("/cloud-infrastructure/pservers/pserver/mtznjtax101", result); + + result = updater.getRelativeUri("/v8/cloud-infrastructure/pservers/pserver/mtznjtax101"); + assertEquals("/cloud-infrastructure/pservers/pserver/mtznjtax101", result); + + result = updater.getRelativeUri("aai/v88/cloud-infrastructure/pservers/pserver/mtznjtax101"); + assertEquals("/cloud-infrastructure/pservers/pserver/mtznjtax101", result); + + result = updater.getRelativeUri("/cloud-infrastructure/pservers/pserver/mtznjtax101"); + assertEquals("/cloud-infrastructure/pservers/pserver/mtznjtax101", result); + } + +} +*/
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/EditAttributesTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/EditAttributesTest.java new file mode 100644 index 0000000..4e7e80a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/EditAttributesTest.java @@ -0,0 +1,171 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.editattributes; + +import java.io.IOException; +import java.io.InputStream; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; + +import org.apache.commons.io.IOUtils; +import org.junit.Before; +import org.junit.BeforeClass; + + +/** + * The Class EditAttributesTest. + */ +public class EditAttributesTest { + String sampleJsonRequest = + "{ \"entity-uri\" : \"some/uri/value/here\", \"entity-type\" : \"complex\"," + + " \"attributes\" : { \"prov-status\" : \"PREPROV\", \"inMaint\" : \"true\"," + + " \"isClosedLoop\" : \"false\" }}"; + + /** + * Sets the up before class. + * + * @throws Exception the exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception {} + + /** + * Sets the up. + * + * @throws Exception the exception + */ + @Before + public void setUp() throws Exception {} + + + /** + * Test analyze edit request body. + */ + /* + @Test + public void testAnalyzeEditRequestBody() { + AttributeEditProcessor aes = new AttributeEditProcessor(); + EditRequest request = aes.analyzeEditRequestBody(sampleJsonRequest); + System.out.println("JSON Body : " + sampleJsonRequest); + assertNotNull(request); + assertEquals("URI should match", "some/uri/value/here", request.getEntityUri()); + assertEquals("Entity Type should match", "complex", request.getEntityType()); + assertEquals("Attribute ProvStatus should match", "PREPROV", + request.getAttributes().get("prov-status")); + assertEquals("Attribute inMaint should be true", "true", + request.getAttributes().get("inMaint")); + assertEquals("Attribute isClosedLoop should be false", "false", + request.getAttributes().get("isClosedLoop")); + + } + */ + + + /** + * Test edit request. + * + * @throws IOException Signals that an I/O exception has occurred. + * @throws ServletException the servlet exception + * @throws JSONException the JSON exception + */ + /* + @Test + public void testEditRequest() throws IOException, ServletException, JSONException { + HttpServletRequest mockRequest = mock(HttpServletRequest.class); + HttpServletResponse mockResponse = mock(HttpServletResponse.class); + ServletOutputStream mockOutput = mock(ServletOutputStream.class); + ServletInputStream mockInput = new MockServletInputStream(sampleJsonRequest); + + when(mockRequest.getRequestURI()).thenReturn("editAttributes"); + when(mockResponse.getOutputStream()).thenReturn(mockOutput); + + when(mockRequest.getInputStream()).thenReturn(mockInput); + + Principal princip = new UserPrincipal("ds1150"); + + when(mockRequest.getUserPrincipal()).thenReturn(princip); + + PrintWriter writer = new PrintWriter("editServletTest.txt"); + when(mockResponse.getWriter()).thenReturn(writer); + AttributeEditProcessor aes = new AttributeEditProcessor(); + aes.doPost(mockRequest, mockResponse); + JSONObject result = null; + try { + writer.close(); + result = new JSONObject(FileUtils.readFileToString(new File("editServletTest.txt"), "UTF-8")); + } catch (JSONException ex) { + // Nothing to catch + } + assertNotNull(result); + // assertEquals("Attributes updated successfully (just need PATCH !!!)", result.get("result")); + } + */ + + + + /** + * The Class MockServletInputStream. + */ + class MockServletInputStream extends ServletInputStream { + InputStream inputStream; + + /** + * Instantiates a new mock servlet input stream. + * + * @param string the string + */ + MockServletInputStream(String string) { + this.inputStream = IOUtils.toInputStream(string); + } + + /* (non-Javadoc) + * @see java.io.InputStream#read() + */ + @Override + public int read() throws IOException { + return inputStream.read(); + } + + @Override + public boolean isFinished() { + // TODO Auto-generated method stub + return false; + } + + @Override + public boolean isReady() { + // TODO Auto-generated method stub + return false; + } + + @Override + public void setReadListener(ReadListener readListener) { + // TODO Auto-generated method stub + + } + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserAuthorizationReader.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserAuthorizationReader.java new file mode 100644 index 0000000..4f99b6d --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserAuthorizationReader.java @@ -0,0 +1,113 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.editattributes; + +import static org.hamcrest.Matchers.containsInAnyOrder; +import static org.hamcrest.Matchers.empty; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.nio.file.Paths; +import java.util.List; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.aai.sparky.editattributes.UserAuthorizationReader; + +/** + * The Class TestUserAuthorizationReader. + */ +public class TestUserAuthorizationReader { + + private static File userAuthFile; + private static File userAuthFileEmpty; + + /** + * Sets the up before class. + * + * @throws Exception the exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + userAuthFile = Paths.get(TestData.USER_AUTH_FILE.getFilename()).toFile(); + userAuthFileEmpty = Paths.get(TestData.USER_AUTH_FILE_EMPTY.getFilename()).toFile(); + } + + /** + * The Enum TestData. + */ + enum TestData { + // @formatter:off + USER_AUTH_FILE( + "src/test/resources/user-auth-reader/authorized-users.config"), USER_AUTH_FILE_EMPTY( + "src/test/resources/user-auth-reader/authorized-users-empty.config"); + + private String filename; + + /** + * Instantiates a new test data. + * + * @param filename the filename + */ + TestData(String filename) { + this.filename = filename; + } + + public String getFilename() { + return this.filename; + } + // @formatter:on + } + + /** + * Test get users. + * + * @throws Exception the exception + */ + @Test + public void testGetUsers() throws Exception { + UserAuthorizationReader userAuthorizationReader = new UserAuthorizationReader(userAuthFile); + + // Method under test + List<String> userList = userAuthorizationReader.getUsers(); + + assertThat(userList, containsInAnyOrder("user1", "user2 user3", "user4")); + } + + /** + * Test get users passing empty config. + * + * @throws Exception the exception + */ + @Test + public void testGetUsersPassingEmptyConfig() throws Exception { + UserAuthorizationReader userConfigReader = new UserAuthorizationReader(userAuthFileEmpty); + + List<String> userList = userConfigReader.getUsers(); + + assertThat(userList, empty()); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserValidator.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserValidator.java new file mode 100644 index 0000000..e20defa --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserValidator.java @@ -0,0 +1,137 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.editattributes; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.nio.file.Paths; + +import org.apache.log4j.BasicConfigurator; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.editattributes.UserAuthorizationReader; +import org.onap.aai.sparky.editattributes.UserValidator; + +/** + * The Class TestUserValidator. + */ +@RunWith(MockitoJUnitRunner.class) +public class TestUserValidator { + + @Mock + private UserAuthorizationReader userAuthorizationReader; + + @InjectMocks + private UserValidator userValidator; + + private static File userAuthFile; + private static File missingUserAuthFile; + + /** + * Sets the up before class. + * + * @throws Exception the exception + */ + @BeforeClass + public static void setUpBeforeClass() throws Exception { + BasicConfigurator.configure(); + userAuthFile = Paths.get(TestData.USER_AUTH_FILE.getFilename()).toFile(); + missingUserAuthFile = Paths.get(TestData.MISSING_USER_AUTH_FILE.getFilename()).toFile(); + } + + /** + * The Enum TestData. + */ + enum TestData { + // @formatter:off + USER_AUTH_FILE( + "src/test/resources/user-validator/authorized-users.config"), MISSING_USER_AUTH_FILE( + "src/test/resources/user-validator/missing.config"); + + private String filename; + + /** + * Instantiates a new test data. + * + * @param filename the filename + */ + TestData(String filename) { + this.filename = filename; + } + + public String getFilename() { + return this.filename; + } + // @formatter:on + } + + /** + * Test is authorized user. + * + * @throws Exception the exception + */ + @Test + public void testIsAuthorizedUser() throws Exception { + when(userAuthorizationReader.getUsers()).thenCallRealMethod(); + when(userAuthorizationReader.getUserAuthorizationFile()).thenReturn(userAuthFile); + + boolean isAuthUser = userValidator.isAuthorizedUser("user1"); + assertThat(isAuthUser, is(true)); + + boolean isAuthUser2 = userValidator.isAuthorizedUser("user2"); + assertThat(isAuthUser2, is(false)); + + boolean isAuthUser3 = userValidator.isAuthorizedUser("user3"); + assertThat(isAuthUser3, is(false)); + + boolean isAuthUser4 = userValidator.isAuthorizedUser("not-in-file"); + assertThat(isAuthUser4, is(false)); + + boolean isAuthUser5 = userValidator.isAuthorizedUser("user4"); + assertThat(isAuthUser5, is(true)); + } + + /** + * Test not authorized if file not present. + * + * @throws Exception the exception + */ + @Test + public void testNotAuthorizedIfFileNotPresent() throws Exception { + when(userAuthorizationReader.getUsers()).thenCallRealMethod(); + when(userAuthorizationReader.getUserAuthorizationFile()).thenReturn(missingUserAuthFile); + + boolean isAuthUser = userValidator.isAuthorizedUser("user1"); + assertThat(isAuthUser, is(false)); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/entity/EditRequestTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/entity/EditRequestTest.java new file mode 100644 index 0000000..5f87a27 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/entity/EditRequestTest.java @@ -0,0 +1,43 @@ +package org.onap.aai.sparky.editattributes.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.EntityTypeAggregation; +import org.onap.aai.sparky.viewandinspect.entity.GraphMeta; + +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + +public class EditRequestTest { + + private EditRequest editAttribute; + private HashMap<String,Object> attributes; + + + + @Before + public void init() throws Exception { + + editAttribute = new EditRequest(); + attributes = new HashMap<String,Object>(); + + } + + + @Test + public void updateValues() { + + editAttribute.setEntityUri(""); + assertNotNull(editAttribute.getEntityUri()); + editAttribute.setEntityType(""); + assertNotNull(editAttribute.getEntityType()); + editAttribute.setAttributes(attributes); + assertNotNull(editAttribute.getAttributes()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/EntityHistoryQueryBuilderTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/EntityHistoryQueryBuilderTest.java new file mode 100644 index 0000000..9cd7781 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/EntityHistoryQueryBuilderTest.java @@ -0,0 +1,34 @@ +package org.onap.aai.sparky.inventory; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +//import java.security.SecureRandom; + +import org.junit.Before; +import org.junit.Test; +//import org.openecomp.sparky.analytics.HistoricalCounter; +import org.onap.aai.sparky.inventory.EntityHistoryQueryBuilder; + +public class EntityHistoryQueryBuilderTest { + + private EntityHistoryQueryBuilder entityHistoryQueryBuilder; + + @Before + public void init() throws Exception { + entityHistoryQueryBuilder = new EntityHistoryQueryBuilder(); + } + + @SuppressWarnings("static-access") + @Test + public void successfullBuild() { + entityHistoryQueryBuilder.getQuery("table"); + assertNotNull(entityHistoryQueryBuilder.createTableQuery()); + entityHistoryQueryBuilder.getQuery("graph"); + assertNotNull(entityHistoryQueryBuilder.createGraphQuery()); + entityHistoryQueryBuilder.getQuery("tree"); + assertNull(entityHistoryQueryBuilder.getQuery("tree")); + + } + +}
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/GeoIndexDocumentTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/GeoIndexDocumentTest.java new file mode 100644 index 0000000..2e39725 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/GeoIndexDocumentTest.java @@ -0,0 +1,121 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.inventory; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.inventory.entity.GeoIndexDocument; + +/** + * The Class GeoIndexDocumentTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class GeoIndexDocumentTest { + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception {} + + /** + * Checks if is valid geo index document success path. + */ + @Test + public void isValidGeoIndexDocument_successPath() { + + GeoIndexDocument geoDoc = new GeoIndexDocument(); + + geoDoc.setEntityPrimaryKeyName("pkeyName"); + geoDoc.setEntityPrimaryKeyValue("pkeyValue"); + geoDoc.setEntityType("type"); + geoDoc.setId("12312"); + geoDoc.setLatitude("-45.123"); + geoDoc.setLongitude("181.321"); + geoDoc.setSelfLink("https://server.somewhere.com:8443/aai/v7/id"); + + assertTrue(geoDoc.isValidGeoDocument()); + + } + + /** + * Checks if is valid geo index document fail no geo coordinates. + */ + @Test + public void isValidGeoIndexDocument_fail_no_geoCoordinates() { + + GeoIndexDocument geoIndexDoc = new GeoIndexDocument(); + + geoIndexDoc.setEntityPrimaryKeyName("pkeyName"); + geoIndexDoc.setEntityPrimaryKeyValue("pkeyValue"); + geoIndexDoc.setEntityType("type"); + geoIndexDoc.setId("12312"); + geoIndexDoc.setSelfLink("https://server.somewhere.com:8443/aai/v7/id"); + + assertFalse(geoIndexDoc.isValidGeoDocument()); + + } + + /** + * Checks if is valid geo index document fail invalid geo coordinates. + */ + @Test + public void isValidGeoIndexDocument_fail_invalid_geoCoordinates() { + + GeoIndexDocument geoIndexDoc = new GeoIndexDocument(); + + geoIndexDoc.setEntityPrimaryKeyName("pkeyName"); + geoIndexDoc.setEntityPrimaryKeyValue("pkeyValue"); + geoIndexDoc.setEntityType("type"); + geoIndexDoc.setId("12312"); + geoIndexDoc.setLatitude("not_a_valid"); + geoIndexDoc.setLongitude("geo point"); + + geoIndexDoc.setSelfLink("https://server.somewhere.com:8443/aai/v7/id"); + + assertFalse(geoIndexDoc.isValidGeoDocument()); + + } + + /** + * Checks if is valid geo index document fail nothing set. + */ + @Test + public void isValidGeoIndexDocument_fail_nothing_set() { + + GeoIndexDocument geoIndexDoc = new GeoIndexDocument(); + + assertFalse(geoIndexDoc.isValidGeoDocument()); + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/entity/TopographicalEntityTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/entity/TopographicalEntityTest.java new file mode 100644 index 0000000..c878077 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/entity/TopographicalEntityTest.java @@ -0,0 +1,50 @@ +package org.onap.aai.sparky.inventory.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class TopographicalEntityTest { + + private TopographicalEntity topographicalEntity; + + + @Before + public void init() throws Exception { + topographicalEntity = new TopographicalEntity(); + } + + + @SuppressWarnings("static-access") + @Test + public void updateValues() { + + topographicalEntity.setEntityType(""); + assertNotNull(topographicalEntity.getEntityType()); + topographicalEntity.setEntityPrimaryKeyValue(""); + assertNotNull(topographicalEntity.getEntityPrimaryKeyValue()); + topographicalEntity.setEntityPrimaryKeyName(""); + assertNotNull(topographicalEntity.getEntityPrimaryKeyName()); + topographicalEntity.setLatitude(""); + assertNotNull(topographicalEntity.getLatitude()); + topographicalEntity.setLongitude(""); + assertNotNull(topographicalEntity.getLongitude()); + topographicalEntity.setSelfLink(""); + assertNotNull(topographicalEntity.getSelfLink()); + topographicalEntity.setId(""); + assertNotNull(topographicalEntity.getId()); + assertNotNull(topographicalEntity.getSerialversionuid()); + assertNotNull(topographicalEntity.toString()); + + //assertNotNull(topographicalEntity.getAsJson()); + //assertNotNull(topographicalEntity.generateUniqueShaDigest("","","")); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/logging/util/LoggingUtilsTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/logging/util/LoggingUtilsTest.java new file mode 100644 index 0000000..4dc30a9 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/logging/util/LoggingUtilsTest.java @@ -0,0 +1,25 @@ +package org.onap.aai.sparky.logging.util; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.logging.util.LoggingUtils; + +public class LoggingUtilsTest { + + private LoggingUtils durationTester; + @Before + public void init() throws Exception { + durationTester = new LoggingUtils(); + } + + @Test + public void durationTester() { + + + assertEquals("1425",durationTester.setDuration(3575, 5000)); + + } + +}
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityCountHistoryProcessorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityCountHistoryProcessorTest.java new file mode 100644 index 0000000..9629ae8 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityCountHistoryProcessorTest.java @@ -0,0 +1,154 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search; +/* +import static org.junit.Assert.assertEquals; + +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.component.restlet.RestletConstants; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.search.EntityCountHistoryProcessor; +import org.onap.aai.sparky.util.RestletUtils; +import org.restlet.Request; +import org.restlet.Response; +import org.restlet.data.ClientInfo; +import org.restlet.data.Reference; +import org.restlet.data.Status; + +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; +import com.fasterxml.jackson.databind.node.ObjectNode; + +public class EntityCountHistoryProcessorTest { + private EntityCountHistoryProcessor entityCountHistoryProcessor; + private Exchange mockExchange; + private Message mockRequestMessage; + private Message mockResponseMessage; + private Request mockRestletRequest; + private Response mockRestletResponse; + private ClientInfo requestClientInfo; + private RestletUtils mockRestletUtils; + + @Before + public void init() throws Exception { + mockExchange = Mockito.mock(Exchange.class); + mockRequestMessage = Mockito.mock(Message.class); + mockResponseMessage = Mockito.mock(Message.class); + mockRestletRequest = Mockito.mock(Request.class); + mockRestletResponse = Mockito.mock(Response.class); + mockRestletUtils = Mockito.mock(RestletUtils.class); + + entityCountHistoryProcessor = new EntityCountHistoryProcessor(); + entityCountHistoryProcessor.setRestletUtils(mockRestletUtils); + + requestClientInfo = new ClientInfo(); + + Mockito.when(mockRestletRequest.getClientInfo()).thenReturn(requestClientInfo); + + Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_REQUEST, Request.class)) + .thenReturn(mockRestletRequest); + Mockito.when(mockRequestMessage.getHeader(RestletConstants.RESTLET_RESPONSE, Response.class)) + .thenReturn(mockRestletResponse); + Mockito.when(mockExchange.getIn()).thenReturn(mockRequestMessage); + Mockito.when(mockExchange.getOut()).thenReturn(mockResponseMessage); + } + + public String getStubbedData_getEntityCountHistory_success() { + ObjectMapper mapper = new ObjectMapper(); + ObjectNode entityCountEntry = mapper.createObjectNode(); + + entityCountEntry.put("doc_count", 2069); + entityCountEntry.put("key", "complex"); + + ArrayNode arrayNode = mapper.createArrayNode(); + arrayNode.add(entityCountEntry); + + ObjectNode resultNode = mapper.createObjectNode(); + resultNode.set("result", arrayNode); + + return resultNode.toString(); + } + + @Test + public void testGetEntityCountHistory_success() { + EntityCountHistoryProcessor spyEntityCountHistoryProcessor = + Mockito.spy(entityCountHistoryProcessor); + OperationResult operationResult = new OperationResult(); + + String result = getStubbedData_getEntityCountHistory_success(); + + operationResult.setResult(Status.SUCCESS_OK.getCode(), result); + + Mockito.when(mockExchange.getIn().getHeader("CamelHttpQuery", String.class)).thenReturn(""); + + Mockito.doReturn("table").when(spyEntityCountHistoryProcessor).getTypeParameter(Mockito.any()); + Mockito.doReturn(operationResult).when(spyEntityCountHistoryProcessor).getResults(Mockito.any(), + Mockito.any()); + + spyEntityCountHistoryProcessor.getEntityCountHistory(mockExchange); + + ArgumentCaptor<String> entityCaptor = ArgumentCaptor.forClass(String.class); + Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityCaptor.capture(), + Mockito.any()); + assertEquals(operationResult.getResult(), entityCaptor.getValue()); + } + + @Test + public void testGetEntityCountHistory_failure_noTypeParameter() { + Mockito.when(mockRestletRequest.getOriginalRef()).thenReturn(new Reference()); + + EntityCountHistoryProcessor spyEntityCountHistoryProcessor = + Mockito.spy(entityCountHistoryProcessor); + OperationResult operationResult = new OperationResult(); + + String result = getStubbedData_getEntityCountHistory_success(); + + operationResult.setResult(Status.SUCCESS_OK.getCode(), result); + + Mockito.when(mockExchange.getIn().getHeader("CamelHttpQuery", String.class)).thenReturn(""); + + Mockito.doReturn("").when(spyEntityCountHistoryProcessor).getTypeParameter(Mockito.any()); + Mockito.doReturn(operationResult).when(spyEntityCountHistoryProcessor).getResults(Mockito.any(), Mockito.any()); + + spyEntityCountHistoryProcessor.getEntityCountHistory(mockExchange); + + ArgumentCaptor<String> entityCaptor = ArgumentCaptor.forClass(String.class); + Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setEntity(entityCaptor.capture(), + Mockito.any()); + assertEquals("{ \"errorMessage\" : Unsupported request. Resource not found. }", + entityCaptor.getValue()); + + ArgumentCaptor<Status> responseCodeCaptor = ArgumentCaptor.forClass(Status.class); + Mockito.verify(mockRestletResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture()); + assertEquals(Status.CLIENT_ERROR_NOT_FOUND, responseCodeCaptor.getValue()); + } +} +*/
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryBucketTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryBucketTest.java new file mode 100644 index 0000000..31f0c04 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryBucketTest.java @@ -0,0 +1,31 @@ +package org.onap.aai.sparky.search; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class EntityTypeSummaryBucketTest { + +private EntityTypeSummaryBucket entityTypeSummaryBucket; + + @Before + public void init() throws Exception { + entityTypeSummaryBucket = new EntityTypeSummaryBucket(); + + } + + + @Test + public void updateValues() { + + entityTypeSummaryBucket.setKey("54566"); + assertNotNull(entityTypeSummaryBucket.getKey()); + entityTypeSummaryBucket.setCount(3); + assertEquals(3,entityTypeSummaryBucket.getCount()); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryTest.java new file mode 100644 index 0000000..de8929e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryTest.java @@ -0,0 +1,37 @@ +package org.onap.aai.sparky.search; + +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + +public class EntityTypeSummaryTest { + + + private EntityTypeSummary entityTypeSummaryBucket; + private ArrayList<EntityTypeSummaryBucket> bucketList; + private EntityTypeSummaryBucket bucket; + + @Before + public void init() throws Exception { + entityTypeSummaryBucket = new EntityTypeSummary(); + bucketList = new ArrayList<EntityTypeSummaryBucket>(); + bucket = new EntityTypeSummaryBucket(); + + } + + + @Test + public void updateValues() { + + entityTypeSummaryBucket.setTotalChartHits(8); + assertNotNull(entityTypeSummaryBucket.getTotalChartHits()); + entityTypeSummaryBucket.setBuckets(bucketList); + assertNotNull(entityTypeSummaryBucket.getBuckets()); + entityTypeSummaryBucket.addBucket(bucket); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchEntityPropertiesTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchEntityPropertiesTest.java new file mode 100644 index 0000000..2958525 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchEntityPropertiesTest.java @@ -0,0 +1,34 @@ +package org.onap.aai.sparky.search; + +import static org.junit.Assert.assertNotNull; + +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; + +public class SearchEntityPropertiesTest { + + private SearchEntityProperties searchEntityProperties; + private HashMap<String,String> fields; + + @Before + public void init() throws Exception { + searchEntityProperties = new SearchEntityProperties(); + fields = new HashMap<String,String>(); + + } + + + @Test + public void updateValues() { + + searchEntityProperties.setFields(fields); + assertNotNull(searchEntityProperties.getFields()); + searchEntityProperties.setType("VNF-Stack"); + assertNotNull(searchEntityProperties.getType()); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchServiceAdapterTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchServiceAdapterTest.java new file mode 100644 index 0000000..7963528 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchServiceAdapterTest.java @@ -0,0 +1,47 @@ +package org.onap.aai.sparky.search; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.enums.RestAuthenticationMode; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; + +public class SearchServiceAdapterTest { + + private SearchServiceAdapter searchServiceAdapter; + private RestEndpointConfig endpointConfig; + + @Before + public void init() throws Exception { + + endpointConfig = new RestEndpointConfig(); + endpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC); + searchServiceAdapter = new SearchServiceAdapter(endpointConfig,"1.0"); + } + + + @Test + public void updateValues() { + + searchServiceAdapter.setServiceApiVersion("2.0"); + assertNotNull(searchServiceAdapter.getServiceApiVersion()); + searchServiceAdapter.setEndpointConfig(endpointConfig); + assertNotNull(searchServiceAdapter.getEndpointConfig()); + assertNotNull(searchServiceAdapter.doPost("https://10.247.40.25:8000","{maxResults:10, queryStr: f}","application/json")); + assertNotNull(searchServiceAdapter.doGet("https://10.247.40.25:8000","application/json")); + assertNotNull(searchServiceAdapter.doPut("https://10.247.40.25:8000","{maxResults:10, queryStr: f}","application/json")); + assertNotNull(searchServiceAdapter.doDelete("https://10.247.40.25:8000","application/json")); + assertNotNull(searchServiceAdapter.getTxnHeader()); + assertNotNull(searchServiceAdapter.buildSearchServiceQueryUrl("searchentity-localhost")); + assertNotNull(searchServiceAdapter.buildSearchServiceUrlForApi("searchentity-localhost","2.0")); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/UnifiedSearchProcessorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/UnifiedSearchProcessorTest.java new file mode 100644 index 0000000..b0aa22b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/UnifiedSearchProcessorTest.java @@ -0,0 +1,445 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.impl.DefaultExchange; +import org.json.JSONObject; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.sparky.common.search.CommonSearchSuggestion; +import org.onap.aai.sparky.search.api.SearchProvider; +import org.onap.aai.sparky.search.entity.MockSearchResponse; +import org.onap.aai.sparky.search.entity.QuerySearchEntity; +import org.onap.aai.sparky.search.entity.SearchSuggestion; +import org.onap.aai.sparky.search.registry.SearchProviderRegistry; +import org.onap.aai.sparky.util.HttpServletHelper; + +import com.fasterxml.jackson.databind.ObjectMapper; + + +public class UnifiedSearchProcessorTest { + + public interface Suggester { + public void addSuggestion( SearchSuggestion suggestion ); + } + + private abstract class AbstractDummySearchProvider implements SearchProvider, Suggester { + + protected List<SearchSuggestion> suggestions; + + protected AbstractDummySearchProvider() { + suggestions = new ArrayList<SearchSuggestion>(); + } + + public List<SearchSuggestion> getSuggestions() { + return suggestions; + } + + @Override + public List<SearchSuggestion> search(QuerySearchEntity queryRequest) { + return getSuggestions(); + } + } + + private class AlphaSearchProvider extends AbstractDummySearchProvider { + public AlphaSearchProvider() { + super(); + } + + @Override + public void addSuggestion(SearchSuggestion suggestion) { + if (suggestion != null) { + suggestions.add(suggestion); + } + } + } + + private class BravoSearchProvider extends AbstractDummySearchProvider { + public BravoSearchProvider() { + super(); + } + + @Override + public void addSuggestion(SearchSuggestion suggestion) { + if (suggestion != null) { + suggestions.add(suggestion); + } + } + } + + private class GammaSearchProvider extends AbstractDummySearchProvider { + public GammaSearchProvider() { + super(); + } + + @Override + public void addSuggestion(SearchSuggestion suggestion) { + if (suggestion != null) { + suggestions.add(suggestion); + } + } + } + + private SearchServiceAdapter mockSearchAdapter; + + private UnifiedSearchProcessor unifiedSearchProcessor; + private Message mockRequestMessage; + private ObjectMapper mapper; + + private Exchange exchange; + private CamelContext camelContext; + + @Before + public void init() { + + camelContext = new DefaultCamelContext(); + exchange = new DefaultExchange(camelContext); + + mockRequestMessage = Mockito.mock(Message.class); + exchange.setIn(mockRequestMessage); + + unifiedSearchProcessor = new UnifiedSearchProcessor(); + unifiedSearchProcessor.setUseOrderedSearchProviderKeys(true); + + mapper = new ObjectMapper(); + + mockSearchAdapter = Mockito.mock(SearchServiceAdapter.class); + } + + + @Test + public void validateDefaultConstructor() { + + // initially it should be null until the bean wiring initializes it + assertNull(unifiedSearchProcessor.getSearchProviderRegistry()); + + } + + + @Test + public void validateAccessors() { + + SearchProviderRegistry searchProviderRegistry = new SearchProviderRegistry(); + unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry); + + // initially it should be null until the bean wiring initializes it + assertNotNull(unifiedSearchProcessor.getSearchProviderRegistry()); + assertEquals(0, searchProviderRegistry.getSearchProviders().size()); + + } + + private void initializeSearchMocks(String requestPayload) { + + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + HttpServletHelper.setRequestPayload(request, "application/json", requestPayload); + + Mockito.when(request.getRequestURI()).thenReturn("fakeUri"); + Mockito.when(request.getLocalPort()).thenReturn(8001); + Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request); + Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(requestPayload); + + } + + private String getSearchRequestJson(String queryString, int maxResults) { + + JSONObject root = new JSONObject(); + root.put("queryStr", queryString); + root.put("maxResults", maxResults); + + return root.toString(); + + } + + private String getExternalSearchRequestJson() { + JSONObject root = new JSONObject(); + + root.put("view", "testView"); + root.put("entityId", "thisIsAnId"); + root.put("entityType", "pserver"); + + return root.toString(); + } + + + @Test + public void testSearch_search_when_noSearchProviders() throws IOException { + + // mock env setup + + initializeSearchMocks(getSearchRequestJson("vnfs",10)); + + SearchProviderRegistry searchProviderRegistry = new SearchProviderRegistry(); + unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry); + + // method under test + unifiedSearchProcessor.search(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class); + + assertEquals(0, searchResponse.getTotalFound()); + assertEquals(0, searchResponse.getSuggestions().size()); + + } + + @Test + public void testSearch_search_when_ThreeSearchProviders_no_suggestions() throws IOException { + + // mock env setup + + initializeSearchMocks(getSearchRequestJson("vnfs",10)); + + SearchProviderRegistry searchProviderRegistry = new SearchProviderRegistry(); + + AlphaSearchProvider alpha = new AlphaSearchProvider(); + BravoSearchProvider bravo = new BravoSearchProvider(); + GammaSearchProvider gamma = new GammaSearchProvider(); + + searchProviderRegistry.addSearchProvider(alpha); + searchProviderRegistry.addSearchProvider(bravo); + searchProviderRegistry.addSearchProvider(gamma); + + unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry); + + // method under test + unifiedSearchProcessor.search(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + /* + * With a null view name, an empty filter set should be returned - there should be 0 filters + */ + + SearchResponse searchResponse = mapper.readValue(entityPayload, SearchResponse.class); + + assertEquals(0, searchResponse.getTotalFound()); + assertEquals(0, searchResponse.getSuggestions().size()); + + } + + private void addSuggestions(int numSuggestions, String suggestionPrefix, Suggester suggester) { + for ( int x = 0; x < numSuggestions; x++ ){ + CommonSearchSuggestion suggestion = new CommonSearchSuggestion(); + suggestion.setText(suggestionPrefix + "-" + x); + suggester.addSuggestion(suggestion); + } + } + + private int countSuggestions(String suggestionPrefix, SearchResponse response) { + + int totalFound = 0; + + for ( SearchSuggestion suggestion : response.getSuggestions()) { + + if ( suggestion.getText() != null && suggestion.getText().startsWith(suggestionPrefix)) { + totalFound++; + } + } + + return totalFound; + + } + + private int countSuggestions(String suggestionPrefix, MockSearchResponse response) { + + int totalFound = 0; + + for ( SearchSuggestion suggestion : response.getSuggestions()) { + + if ( suggestion.getText() != null && suggestion.getText().startsWith(suggestionPrefix)) { + totalFound++; + } + } + + return totalFound; + + } + + + @Test + public void testSearch_search_when_ThreeSearchProviders_5suggestions_each() throws IOException { + + // mock env setup + + initializeSearchMocks(getSearchRequestJson("vnfs",10)); + + SearchProviderRegistry searchProviderRegistry = new SearchProviderRegistry(); + + AlphaSearchProvider alpha = new AlphaSearchProvider(); + BravoSearchProvider bravo = new BravoSearchProvider(); + GammaSearchProvider gamma = new GammaSearchProvider(); + + addSuggestions(5, "alpha", alpha); + addSuggestions(5, "bravo", bravo); + addSuggestions(5, "gamma", gamma); + + searchProviderRegistry.addSearchProvider(alpha); + searchProviderRegistry.addSearchProvider(bravo); + searchProviderRegistry.addSearchProvider(gamma); + + unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry); + + // method under test + unifiedSearchProcessor.search(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class); + + assertEquals(10, searchResponse.getTotalFound()); + assertEquals(10, searchResponse.getSuggestions().size()); + + assertEquals( 4, countSuggestions("alpha", searchResponse)); + assertEquals( 3, countSuggestions("bravo", searchResponse)); + assertEquals( 3, countSuggestions("gamma", searchResponse)); + + } + + @Test + public void testSearch_search_when_ThreeSearchProviders_mixedNumSuggestions() throws IOException { + + // mock env setup + + initializeSearchMocks(getSearchRequestJson("vnfs",13)); + + SearchProviderRegistry searchProviderRegistry = new SearchProviderRegistry(); + + AlphaSearchProvider alpha = new AlphaSearchProvider(); + BravoSearchProvider bravo = new BravoSearchProvider(); + GammaSearchProvider gamma = new GammaSearchProvider(); + + searchProviderRegistry.addSearchProvider(alpha); + searchProviderRegistry.addSearchProvider(bravo); + searchProviderRegistry.addSearchProvider(gamma); + + unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry); + + addSuggestions(45,"alpha",alpha); + addSuggestions(1,"bravo",bravo); + addSuggestions(99,"gamma",gamma); + + // method under test + unifiedSearchProcessor.search(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class); + + assertEquals(13, searchResponse.getTotalFound()); + assertEquals(13, searchResponse.getSuggestions().size()); + + /** + * There should be an even divide of suggestions per search provider relative + * to the suggestions available per search provider. + * Alpha has 45 suggestions + * Bravo has 1 suggestion + * Gamma has 99 suggestions + * + * We only asked for 13 suggestions to be returned, so based on the suggestion + * distribution algorithm we will get a fair distribution of suggestions per provider + * relative to what each provider has available. Resulting in: + * 6 from Alpha + * 1 from Bravo + * 6 from Gamma + * + */ + + assertEquals( 6, countSuggestions("alpha", searchResponse)); + assertEquals( 1, countSuggestions("bravo", searchResponse)); + assertEquals( 6, countSuggestions("gamma", searchResponse)); + + } + + @Test + public void testSearch_search_when_ThreeSearchProviders_wantedMoreSuggestionsThanAvailable() throws IOException { + + // mock env setup + + initializeSearchMocks(getSearchRequestJson("vnfs",13)); + + SearchProviderRegistry searchProviderRegistry = new SearchProviderRegistry(); + + AlphaSearchProvider alpha = new AlphaSearchProvider(); + BravoSearchProvider bravo = new BravoSearchProvider(); + GammaSearchProvider gamma = new GammaSearchProvider(); + + searchProviderRegistry.addSearchProvider(alpha); + searchProviderRegistry.addSearchProvider(bravo); + searchProviderRegistry.addSearchProvider(gamma); + + unifiedSearchProcessor.setSearchProviderRegistry(searchProviderRegistry); + + addSuggestions(1,"alpha",alpha); + addSuggestions(4,"bravo",bravo); + addSuggestions(0,"gamma",gamma); + + // method under test + unifiedSearchProcessor.search(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + MockSearchResponse searchResponse = mapper.readValue(entityPayload, MockSearchResponse.class); + + assertEquals(5, searchResponse.getTotalFound()); + assertEquals(5, searchResponse.getSuggestions().size()); + + assertEquals( 1, countSuggestions("alpha", searchResponse)); + assertEquals( 4, countSuggestions("bravo", searchResponse)); + assertEquals( 0, countSuggestions("gamma", searchResponse)); + + } +}
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/config/SuggestionConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/config/SuggestionConfigTest.java new file mode 100644 index 0000000..864b7ff --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/config/SuggestionConfigTest.java @@ -0,0 +1,42 @@ +package org.onap.aai.sparky.search.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; +public class SuggestionConfigTest { + + + private SuggestionConfig suggestionsConfig; + private ArrayList<String> stopWords; + private HashMap<String,String> pairs; + @Before + public void init() throws Exception{ + + suggestionsConfig = new SuggestionConfig(); + stopWords = new ArrayList<String>(); + pairs = new HashMap<String,String>(); + + + } + + @Test + public void updateValues(){ + + suggestionsConfig.setStopWords(stopWords); + assertNotNull(suggestionsConfig.getStopWords()); + suggestionsConfig.setPairingList(pairs); + assertNotNull(suggestionsConfig.getPairingList()); + suggestionsConfig.setDefaultPairingValue("with"); + assertNotNull(suggestionsConfig.getDefaultPairingValue()); + suggestionsConfig.setViSuggestionRoute("schema"); + assertNotNull(suggestionsConfig.getViSuggestionRoute()); + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/entity/MockSearchResponse.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/entity/MockSearchResponse.java new file mode 100644 index 0000000..02a1aee --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/entity/MockSearchResponse.java @@ -0,0 +1,71 @@ +package org.onap.aai.sparky.search.entity; + +import java.util.ArrayList; +import java.util.List; + +import org.onap.aai.sparky.common.search.CommonSearchSuggestion; + +public class MockSearchResponse { + private long processingTimeInMs; + private int totalFound; + + private List<CommonSearchSuggestion> suggestions; + + /** + * Instantiates a new search response. + */ + public MockSearchResponse() { + this.suggestions = new ArrayList<CommonSearchSuggestion>(); + this.processingTimeInMs = 0; + this.totalFound = 0; + } + + public long getProcessingTimeInMs() { + return processingTimeInMs; + } + + public void setProcessingTimeInMs(long processingTimeInMs) { + this.processingTimeInMs = processingTimeInMs; + } + + public int getTotalFound() { + return totalFound; + } + + public void setTotalFound(int totalFound) { + this.totalFound = totalFound; + } + + public List<CommonSearchSuggestion> getSuggestions() { + return suggestions; + } + + public void setSuggestions(List<CommonSearchSuggestion> suggestions) { + this.suggestions = suggestions; + } + + /** + * Adds the entity entry. + * + * @param suggestionEntry that will be converted to JSON + */ + public void addSuggestion(CommonSearchSuggestion suggestionEntity){ + suggestions.add(suggestionEntity); + } + + /** + * Increments the total number of hits for this SearchResponse by + * the value passed in. + * + * @param additionalCount - Count to increment the total found + */ + public void addToTotalFound(int additionalCount) { + totalFound += additionalCount; + } + + @Override + public String toString() { + return "DummySearchResponse [processingTimeInMs=" + processingTimeInMs + ", totalFound=" + + totalFound + ", suggestions=" + suggestions + "]"; + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilterProcessorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilterProcessorTest.java new file mode 100644 index 0000000..0644a53 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilterProcessorTest.java @@ -0,0 +1,374 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search.filters; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.io.IOException; +import java.io.StringReader; +import java.util.ArrayList; +import java.util.List; + +import javax.json.Json; +import javax.json.JsonArray; +import javax.json.JsonObject; +import javax.json.JsonReader; +import javax.json.stream.JsonParsingException; +import javax.servlet.http.HttpServletRequest; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.component.restlet.RestletConstants; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.impl.DefaultExchange; +import org.junit.Before; +import org.junit.Test; +import org.mockito.ArgumentCaptor; +import org.mockito.Mockito; +import org.onap.aai.restclient.enums.RestAuthenticationMode; +import org.onap.aai.sparky.config.SparkyResourceLoader; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.dal.rest.RestClientConstructionException; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; +import org.onap.aai.sparky.search.filters.FilterProcessor; +import org.onap.aai.sparky.search.filters.FilteredSearchHelper; +import org.onap.aai.sparky.search.filters.config.UiFilterConfig; +import org.onap.aai.sparky.search.filters.config.UiFilterListItemConfig; +import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig; +import org.onap.aai.sparky.search.filters.config.FiltersDetailsConfig; +import org.onap.aai.sparky.search.filters.config.FiltersConfig; +import org.onap.aai.sparky.search.filters.config.UiViewListItemConfig; +import org.onap.aai.sparky.search.filters.entity.DiscoverFiltersRequest; +import org.onap.aai.sparky.search.filters.entity.ViewConfiguration; +import org.onap.aai.sparky.search.filters.entity.ViewFilter; +import org.onap.aai.sparky.util.HttpServletHelper; +import org.onap.aai.sparky.util.NodeUtils; +import org.onap.aai.sparky.util.SparkyTestConstants; +import org.onap.aai.sparky.search.filters.config.FiltersForViewsConfig; +import org.restlet.Request; +import org.restlet.Response; +import org.restlet.data.MediaType; +import org.restlet.data.Status; +import org.springframework.core.io.DefaultResourceLoader; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class FilterProcessorTest { + + private FilterProcessor filterProcessor; + private FilteredSearchHelper filteredSearchHelper; + private ObjectMapper mapper; + private RestEndpointConfig restEndpointConfig; + + private Exchange exchange; + private CamelContext camelContext; + private Message mockRequestMessage; + + + protected UiViewListItemConfig generateViewConfig(ViewConfiguration viewConfig) { + + UiViewListItemConfig uiViewConfig = new UiViewListItemConfig(viewConfig.getViewName(), null); + + List<UiFilterListItemConfig> filters = new ArrayList<UiFilterListItemConfig>(); + + for (ViewFilter viewFilter : viewConfig.getViewFilters()) { + filters.add(new UiFilterListItemConfig(viewFilter.getId(), viewFilter.getDefaultValue())); + } + + uiViewConfig.setListOfFilters(filters); + + return uiViewConfig; + } + + protected FiltersConfig generateDefaultViewsFilterConfig() { + + FiltersForViewsConfig uiViewsConfig = new FiltersForViewsConfig(); + FiltersConfig viewFilterConfig = new FiltersConfig(); + + List<UiViewListItemConfig> views = new ArrayList<UiViewListItemConfig>(); + + // Default filter value to use below + UiFilterOptionsValuesConfig defaultValue = new UiFilterOptionsValuesConfig("Today", "Last 0 hours"); + + // VNF View - 4 Filters + ViewConfiguration vnfViewConfig = new ViewConfiguration("vnfSearch"); + vnfViewConfig.addViewFilter(new ViewFilter("1", null)); + vnfViewConfig.addViewFilter(new ViewFilter("2", null)); + vnfViewConfig.addViewFilter(new ViewFilter("7", null)); + vnfViewConfig.addViewFilter(new ViewFilter("8", null)); + views.add(generateViewConfig(vnfViewConfig)); + + // View and Inspect (Schema) - 0 Filters + ViewConfiguration viewInspectConfig = new ViewConfiguration("viewInspect"); + views.add(generateViewConfig(viewInspectConfig)); + + // Data Integrity - 4 Filters + ViewConfiguration dataIntegrityConfig = new ViewConfiguration("dataIntegrity"); + dataIntegrityConfig.addViewFilter(new ViewFilter("3", null)); + dataIntegrityConfig.addViewFilter(new ViewFilter("4", null)); + dataIntegrityConfig.addViewFilter(new ViewFilter("5", defaultValue)); + dataIntegrityConfig.addViewFilter(new ViewFilter("6", null)); + views.add(generateViewConfig(dataIntegrityConfig)); + + uiViewsConfig.setViews(views); + + viewFilterConfig.setViewsConfig(uiViewsConfig); + + List<UiFilterOptionsValuesConfig> optionsValues = new ArrayList<UiFilterOptionsValuesConfig>(); + optionsValues.add(new UiFilterOptionsValuesConfig("Today", "Last 0 hours")); + optionsValues.add(new UiFilterOptionsValuesConfig("Since Yesterday", "Last 24 hours")); + optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Week", "Last 7 days")); + optionsValues.add(new UiFilterOptionsValuesConfig("Since Last Month", "Last 30 days")); + optionsValues.add(new UiFilterOptionsValuesConfig("Custom Range", "Custom Range")); + + + + FiltersDetailsConfig uiFiltersConfig = new FiltersDetailsConfig(); + + List<UiFilterConfig> uiFilterConfig = new ArrayList<UiFilterConfig>(); + uiFilterConfig.add(new UiFilterConfig("1", "filterName1", "Display Name 1", "dropDown", "false", "Any 1", null, "options", null, null)); + uiFilterConfig.add(new UiFilterConfig("2", "filterName2", "Display Name 2", "dropDown", "false", "Any 2", null, "options", null, null)); + uiFilterConfig.add(new UiFilterConfig("3", "filterName3", "Display Name 3", "dropDown", "false", "Any 3", null, "options", null, null)); + uiFilterConfig.add(new UiFilterConfig("4", "filterName4", "Display Name 4", "dropDown", "false", "Any 4", null, "options", null, null)); + uiFilterConfig.add(new UiFilterConfig("5", "filterName5", "Display Name 5", "date", "false", "Any 5", defaultValue, "dynamicOptions", optionsValues, null)); + uiFilterConfig.add(new UiFilterConfig("6", "filterName6", "Display Name 6", "dropDown", "false", "Any 6", null, "options", null, null)); + uiFilterConfig.add(new UiFilterConfig("7", "filterName7", "Display Name 7", "dropDown", "false", "Any 7", null, "options", null, null)); + uiFilterConfig.add(new UiFilterConfig("8", "filterName8", "Display Name 8", "dropDown", "false", "Any 8", null, "options", null, null)); + + uiFiltersConfig.setFilters(uiFilterConfig); + + viewFilterConfig.setFiltersConfig(uiFiltersConfig); + + return viewFilterConfig; + } + + @Before + public void init()throws RestClientConstructionException { + + camelContext = new DefaultCamelContext(); + exchange = new DefaultExchange(camelContext); + + mockRequestMessage = Mockito.mock(Message.class); + + exchange.setIn(mockRequestMessage); + + //TODO-> edit the following:FilteredSearchHelper & FilterProcessor to pass in the correct parameters + restEndpointConfig = new RestEndpointConfig(); + restEndpointConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_BASIC); + filteredSearchHelper = new FilteredSearchHelper(new FiltersConfig(), + new FilterElasticSearchAdapter(new ElasticSearchAdapter(restEndpointConfig))); + filterProcessor = new FilterProcessor(); + + mapper = new ObjectMapper(); + } + + + @Test + public void validateDefaultConstructor() { + assertNotNull(filterProcessor.getMapper()); + assertNull(filterProcessor.getFilteredSearchHelper()); + } + + private void verifyResponseAndNumFiltersForBadRequest(Exchange exchange, Status expectedStatus, int numExpectedFilters) + throws JsonParseException, JsonMappingException, IOException { + + assertEquals(expectedStatus.getCode(), exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + JsonReader jsonReader = Json.createReader(new StringReader(entityPayload)); + JsonObject responsePayload = jsonReader.readObject(); + + JsonObject filters = responsePayload.getJsonObject("filters"); + assertEquals(0, filters.size()); + } + + private void initializeMocks(String requestPayload) throws IOException { + + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + if ( requestPayload != null) { + HttpServletHelper.setRequestPayload(request, "application/json", requestPayload); + } + + Mockito.when(request.getRequestURI()).thenReturn("fakeUri"); + Mockito.when(request.getLocalPort()).thenReturn(8001); + Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request); + Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(requestPayload); + + SparkyResourceLoader resourceLoader = new SparkyResourceLoader(); + resourceLoader.setResourceLoader(new DefaultResourceLoader()); + + filterProcessor.setFilteredSearchHelper(filteredSearchHelper); + + FiltersConfig filtersConfig = new FiltersConfig(); + filtersConfig.initializeFiltersDetailsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.FILTERS_JSON_FILE, false)); + filtersConfig.initializeFiltersForViewsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.VIEWS_JSON_FILE, false)); + + filteredSearchHelper.setFiltersConfig(filtersConfig); + + } + + + @Test + public void testGetFiltersWithValues_success_path() throws IOException { + + // Initialize for call against 'vnfSearch' + DiscoverFiltersRequest vnfSearchrequest = new DiscoverFiltersRequest(); + vnfSearchrequest.setViewName("vnfSearch"); + + initializeMocks(NodeUtils.convertObjectToJson(vnfSearchrequest, false)); + + // Test call against 'vnfSearch' + filterProcessor.getFiltersWithValues(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + String entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + JsonReader vnfJsonReader = Json.createReader(new StringReader(entityPayload)); + JsonObject vnfResponsePayload = vnfJsonReader.readObject(); + + JsonObject vnfFilters = vnfResponsePayload.getJsonObject("filters"); + assertNotNull(vnfFilters); + assertEquals(0, vnfFilters.size()); + + //JsonObject filterOne = vnfFilters.getJsonObject("1"); + //assertNotNull(filterOne); + //assertEquals("Display Name 1", filterOne.getString("label")); + + JsonObject filterEight = vnfFilters.getJsonObject("8"); + //assertNotNull(filterEight); + // JsonObject eightInnerControl = filterEight.getJsonObject("controls").getJsonObject("filterName8"); + // assertEquals(4, eightInnerControl.size()); + //assertEquals("dropDown", eightInnerControl.getString("type")); + //assertEquals("false", eightInnerControl.getString("multiSelect")); + //assertEquals("Any 8", eightInnerControl.getString("watermark")); + //assertEquals(0, eightInnerControl.getJsonArray("options").size()); + + // Initialize for call against 'dataIntegrity' + DiscoverFiltersRequest dataIntegrityRequest = new DiscoverFiltersRequest(); + dataIntegrityRequest.setViewName("dataIntegrity"); + + initializeMocks(NodeUtils.convertObjectToJson(dataIntegrityRequest, false)); + + // Test call against 'dataIntegrity' + filterProcessor.getFiltersWithValues(exchange); + + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + entityPayload = exchange.getOut().getBody(String.class); + assertNotNull(entityPayload); + + JsonReader dIJsonReader = Json.createReader(new StringReader(entityPayload)); + JsonObject dIResponsePayload = dIJsonReader.readObject(); + + JsonObject dIFilters = dIResponsePayload.getJsonObject("filters"); + assertNotNull(dIFilters); + // assertEquals(4, dIFilters.size()); + + //JsonObject filterFour = dIFilters.getJsonObject("4"); + //// assertNotNull(filterFour); + // assertEquals("Display Name 4", filterFour.getString("label")); + + JsonObject filterFive = dIFilters.getJsonObject("5"); + //assertNotNull(filterFive); + //JsonObject fiveInnerControl = filterFive.getJsonObject("controls").getJsonObject("filterName5"); + //assertEquals(5, fiveInnerControl.size()); + //assertEquals("date", fiveInnerControl.getString("type")); + // assertEquals("false", fiveInnerControl.getString("multiSelect")); + //assertEquals("Any 5", fiveInnerControl.getString("watermark")); + // JsonArray dynamicOptions = fiveInnerControl.getJsonArray("dynamicOptions"); + //assertEquals(5, dynamicOptions.size()); + //JsonObject today = dynamicOptions.getJsonObject(0); + //assertEquals("Today", today.getString("decode")); + } + + @Test + public void testGetFiltersWithValues_viewNameNull() throws IOException { + + DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest(); + initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false)); + + // Method under test + filterProcessor.getFiltersWithValues(exchange); + + verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0); + } + + @Test + public void testGetFiltersWithValues_viewNameEmptyString() throws IOException { + + DiscoverFiltersRequest discoverFiltersRequest = new DiscoverFiltersRequest(); + discoverFiltersRequest.setViewName(""); + + initializeMocks(NodeUtils.convertObjectToJson(discoverFiltersRequest, false)); + + // Method under test + filterProcessor.getFiltersWithValues(exchange); + + verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0); + } + + @Test + public void testGetFiltersWithValues_requestPayloadIsNull() throws IOException { + + initializeMocks(null); + + // Method under test + filterProcessor.getFiltersWithValues(exchange); + + verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0); + } + + @Test + public void testGetFiltersWithValues_requestPayloadIsEmptyString() throws IOException { + + initializeMocks(""); + + // Method under test + filterProcessor.getFiltersWithValues(exchange); + + verifyResponseAndNumFiltersForBadRequest(exchange, Status.CLIENT_ERROR_NOT_FOUND, 0); + } + + @Test(expected=JsonParsingException.class) + public void testGetFiltersWithValues_requestPayloadCausesException() throws IOException { + + initializeMocks("{"); + + // Method under test + filterProcessor.getFiltersWithValues(exchange); + + verifyResponseAndNumFiltersForBadRequest(exchange, Status.SERVER_ERROR_INTERNAL, 0); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilteredSearchHelperTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilteredSearchHelperTest.java new file mode 100644 index 0000000..56afcf9 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilteredSearchHelperTest.java @@ -0,0 +1,69 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search.filters; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; + +import org.junit.BeforeClass; +import org.junit.Test; +import org.onap.aai.sparky.search.filters.FilteredSearchHelper; +import org.onap.aai.sparky.search.filters.config.FiltersConfig; +/* +public class FilteredSearchHelperTest { + + private static FilteredSearchHelper filteredSearchHelper; + + @BeforeClass + public static void init() throws IOException { + FiltersConfig config = FiltersConfig.getInstance(); + config.setFilterMappingsFileName("src/test/resources/filters/aaiui_views.json"); + config.setFiltersFileName("src/test/resources/filters/aaiui_filters.json"); + System.out.println("SETTING UIVIEWSCONFIG"); + config.setViewsConfig(config.readUiViewsConfig()); + System.out.println("SETTING UIFILTERSCONFIG"); + config.setFiltersConfig(config.readUiFiltersConfig()); + + filteredSearchHelper = new FilteredSearchHelper(config); + } + + @Test + public void testDoFilterDiscovery_validViewName() { + assertEquals(4, filteredSearchHelper.doFilterDiscovery("vnfSearch").getFilters().size()); + assertEquals(4, filteredSearchHelper.doFilterDiscovery("dataIntegrity").getFilters().size()); + } + + @Test + public void testDoFilterDiscovery_invalidViewName_nameGiven() { + assertEquals(0, filteredSearchHelper.doFilterDiscovery("InvalidViewName").getFilters().size()); + } + + @Test + public void testDoFilterDiscovery_invalidViewName_emptyString() { + assertEquals(0, filteredSearchHelper.doFilterDiscovery("").getFilters().size()); + } +}*/ diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersConfigTest.java new file mode 100644 index 0000000..54ebe99 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersConfigTest.java @@ -0,0 +1,47 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class FiltersConfigTest { + + private FiltersConfig filtersConfig; + private FiltersForViewsConfig viewsConfig; + private FiltersDetailsConfig filtersDetailsConfig; + + @Before + public void init() throws Exception { + filtersConfig = new FiltersConfig(); + viewsConfig = new FiltersForViewsConfig(); + filtersDetailsConfig = new FiltersDetailsConfig(); + + + } + + + @Test + public void updateValues() { + + filtersConfig.setViewsFileName(""); + assertNotNull(filtersConfig.getViewsFileName()); + filtersConfig.setFiltersFileName(""); + assertNotNull(filtersConfig.getFiltersFileName()); + filtersConfig.setViewsConfig(viewsConfig); + assertNotNull(filtersConfig.getViewsConfig()); + filtersConfig.setFiltersConfig(filtersDetailsConfig); + assertNotNull(filtersConfig.getFiltersConfig()); + assertNull(filtersConfig.getFilterById("")); + assertNull(filtersConfig.readUiViewsConfig()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersDetailsConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersDetailsConfigTest.java new file mode 100644 index 0000000..3bf4842 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersDetailsConfigTest.java @@ -0,0 +1,40 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class FiltersDetailsConfigTest { + + private FiltersDetailsConfig filtersDetailsConfig; + private ArrayList<UiFilterConfig> filters; + private FiltersDetailsConfig filtersDetailsConfigs; + + @Before + public void init() throws Exception { + filtersDetailsConfig = new FiltersDetailsConfig(); + filters = new ArrayList<UiFilterConfig>(); + filtersDetailsConfigs = new FiltersDetailsConfig(filters); + + } + + + @Test + public void updateValues() { + + filtersDetailsConfig.setFilters(filters); + assertNotNull(filtersDetailsConfig.getFilters()); + assertNotNull(filtersDetailsConfig.toString()); + + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersForViewsConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersForViewsConfigTest.java new file mode 100644 index 0000000..7740610 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersForViewsConfigTest.java @@ -0,0 +1,40 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class FiltersForViewsConfigTest { + + private FiltersForViewsConfig filtersForView; + private ArrayList<UiViewListItemConfig> views; + private FiltersForViewsConfig filtersForViews; + + @Before + public void init() throws Exception { + filtersForView = new FiltersForViewsConfig(); + views = new ArrayList<UiViewListItemConfig>(); + filtersForViews = new FiltersForViewsConfig(views); + + } + + + @Test + public void updateValues() { + + filtersForView.setViews(views); + assertNotNull(filtersForView.getViews()); + assertNotNull(filtersForView.toString()); + + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterConfigTest.java new file mode 100644 index 0000000..7cd539d --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterConfigTest.java @@ -0,0 +1,57 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + +public class UiFilterConfigTest { + + private UiFilterConfig uiFiltersConfig; + private UiFilterOptionsValuesConfig defaultValue; + private UiFilterDataSourceConfig dataSource; + private ArrayList<UiFilterOptionsValuesConfig> optionValues; + + + @Before + public void init() throws Exception { + defaultValue = new UiFilterOptionsValuesConfig("",""); + dataSource = new UiFilterDataSourceConfig(); + optionValues = new ArrayList<UiFilterOptionsValuesConfig>(); + uiFiltersConfig = new UiFilterConfig("","","","","","",defaultValue,"",optionValues,dataSource); + + + + } + + + @Test + public void updateValues() { + + uiFiltersConfig.setFilterId(""); + assertNotNull(uiFiltersConfig.getFilterId()); + uiFiltersConfig.setFilterName(""); + assertNotNull(uiFiltersConfig.getFilterName()); + uiFiltersConfig.setDisplayName(""); + assertNotNull(uiFiltersConfig.getDisplayName()); + uiFiltersConfig.setDataType(""); + assertNotNull(uiFiltersConfig.getDataType()); + uiFiltersConfig.setMultiSelect(""); + assertNotNull(uiFiltersConfig.getMultiSelect()); + uiFiltersConfig.setWatermark(""); + assertNotNull(uiFiltersConfig.getWatermark()); + uiFiltersConfig.setOptionsType(""); + assertNotNull(uiFiltersConfig.getOptionsType()); + uiFiltersConfig.setDataSource(dataSource); + assertNotNull(uiFiltersConfig.getDataSource()); + uiFiltersConfig.setOptionsValues(optionValues); + assertNotNull(uiFiltersConfig.getOptionsValues()); + uiFiltersConfig.setDefaultValue(defaultValue); + assertNotNull(uiFiltersConfig.getDefaultValue()); + assertNotNull(uiFiltersConfig.toString()); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterDataSourceConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterDataSourceConfigTest.java new file mode 100644 index 0000000..e4402cf --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterDataSourceConfigTest.java @@ -0,0 +1,44 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class UiFilterDataSourceConfigTest { + + private UiFilterDataSourceConfig uiFiltersDataSourceConfig; + private UiFilterDataSourceConfig uiFiltersDataSourceConfigs; + + + @Before + public void init() throws Exception { + + uiFiltersDataSourceConfig = new UiFilterDataSourceConfig(); + uiFiltersDataSourceConfigs = new UiFilterDataSourceConfig("","","",""); + + + + } + + + @Test + public void updateValues() { + + uiFiltersDataSourceConfig.setIndexName(""); + assertNotNull(uiFiltersDataSourceConfig.getIndexName()); + uiFiltersDataSourceConfig.setDocType(""); + assertNotNull(uiFiltersDataSourceConfig.getDocType()); + uiFiltersDataSourceConfig.setFieldName(""); + assertNotNull(uiFiltersDataSourceConfig.getFieldName()); + uiFiltersDataSourceConfig.setPathToField(""); + assertNotNull(uiFiltersDataSourceConfig.getPathToField()); + assertNotNull(uiFiltersDataSourceConfig.toString()); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterListItemConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterListItemConfigTest.java new file mode 100644 index 0000000..48e7955 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterListItemConfigTest.java @@ -0,0 +1,34 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class UiFilterListItemConfigTest { + + private UiFilterListItemConfig uiFilterLstItem; + private UiFilterOptionsValuesConfig defaultValue; + + + @Before + public void init() throws Exception { + defaultValue = new UiFilterOptionsValuesConfig("",""); + uiFilterLstItem = new UiFilterListItemConfig("",defaultValue); + + + + } + + + @Test + public void updateValues() { + + uiFilterLstItem.setFilterId(""); + assertNotNull(uiFilterLstItem.getFilterId()); + uiFilterLstItem.setDefaultValue(defaultValue); + assertNotNull(uiFilterLstItem.getDefaultValue()); + assertNotNull(uiFilterLstItem.toString()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterOptionsValuesConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterOptionsValuesConfigTest.java new file mode 100644 index 0000000..ca15771 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterOptionsValuesConfigTest.java @@ -0,0 +1,31 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class UiFilterOptionsValuesConfigTest { + + private UiFilterOptionsValuesConfig uiFilterOptionsValues; + + + @Before + public void init() throws Exception { + + uiFilterOptionsValues = new UiFilterOptionsValuesConfig("",""); + + } + + + @Test + public void updateValues() { + + uiFilterOptionsValues.setCode(""); + assertNotNull(uiFilterOptionsValues.getCode()); + uiFilterOptionsValues.setDecode(""); + assertNotNull(uiFilterOptionsValues.getDecode()); + assertNotNull(uiFilterOptionsValues.toString()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiViewListItemConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiViewListItemConfigTest.java new file mode 100644 index 0000000..39b919f --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiViewListItemConfigTest.java @@ -0,0 +1,38 @@ +package org.onap.aai.sparky.search.filters.config; + +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + +public class UiViewListItemConfigTest { + + private ArrayList<UiFilterListItemConfig> uiFilterLstItem; + private UiViewListItemConfig uiViewLstItem; + + + @Before + public void init() throws Exception { + + uiFilterLstItem = new ArrayList<UiFilterListItemConfig>(); + uiViewLstItem = new UiViewListItemConfig("",uiFilterLstItem); + + + + } + + + @Test + public void updateValues() { + + uiViewLstItem.setViewName(""); + assertNotNull(uiViewLstItem.getViewName()); + uiViewLstItem.setListOfFilters(uiFilterLstItem); + assertNotNull(uiViewLstItem.getFilters()); + assertNotNull(uiViewLstItem.toString()); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/DiscoverFiltersRequest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/DiscoverFiltersRequest.java new file mode 100644 index 0000000..336e3b1 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/DiscoverFiltersRequest.java @@ -0,0 +1,40 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search.filters.entity; + +public class DiscoverFiltersRequest { + + private String viewName; + + public String getViewName() { + return viewName; + } + + public void setViewName(String viewName) { + this.viewName = viewName; + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewConfiguration.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewConfiguration.java new file mode 100644 index 0000000..f6c352b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewConfiguration.java @@ -0,0 +1,68 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search.filters.entity; + +import java.util.ArrayList; +import java.util.List; + +public class ViewConfiguration { + + private String viewName; + private List<ViewFilter> viewFilters; + + public ViewConfiguration() { + viewFilters = new ArrayList<ViewFilter>(); + } + + public ViewConfiguration(String viewName) { + viewFilters = new ArrayList<ViewFilter>(); + this.setViewName(viewName); + } + + public String getViewName() { + return viewName; + } + + public void setViewName(String viewName) { + this.viewName = viewName; + } + + public List<ViewFilter> getViewFilters() { + return viewFilters; + } + + public void setViewFilters(List<ViewFilter> viewFilters) { + this.viewFilters = viewFilters; + } + + public void addViewFilter(ViewFilter viewFilter) { + if (viewFilters != null) { + if (!viewFilters.contains(viewFilter)) { + viewFilters.add(viewFilter); + } + } + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewFilter.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewFilter.java new file mode 100644 index 0000000..94832d5 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewFilter.java @@ -0,0 +1,57 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.search.filters.entity; + +import org.onap.aai.sparky.search.filters.config.UiFilterOptionsValuesConfig; + +public class ViewFilter { + + private String id; + private UiFilterOptionsValuesConfig defaultValue; + + public ViewFilter() {} + + public ViewFilter(String id, UiFilterOptionsValuesConfig defaultValue) { + this.id = id; + this.defaultValue = defaultValue; + } + + public String getId() { + return id; + } + + public void setId(String id) { + this.id = id; + } + + public UiFilterOptionsValuesConfig getDefaultValue() { + return defaultValue; + } + + public void setDefaultValue(UiFilterOptionsValuesConfig defaultValue) { + this.defaultValue = defaultValue; + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/SecurityContextFactoryImplTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/SecurityContextFactoryImplTest.java new file mode 100644 index 0000000..0c3a8ce --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/SecurityContextFactoryImplTest.java @@ -0,0 +1,143 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.security; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.FileInputStream; + +import javax.net.ssl.SSLContext; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.sparky.security.SecurityContextFactory; +import org.onap.aai.sparky.security.SecurityContextFactoryImpl; +import org.onap.aai.sparky.util.LogValidator; + +import ch.qos.logback.classic.Level; + +/** + * The Class SecurityContextFactoryImplTest. + */ +public class SecurityContextFactoryImplTest { + + private LogValidator logValidator; + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + logValidator = new LogValidator(); + logValidator.initializeLogger(Level.WARN); + } + + /** + * Basic construction test. + * + * @throws Exception the exception + */ + @Test + public void basicConstructionTest() throws Exception { + + SecurityContextFactory sslContextFactory = new SecurityContextFactoryImpl(); + + assertEquals("TLS", sslContextFactory.getSslAlgorithm()); + assertEquals("SunX509", sslContextFactory.getKeyManagerAlgortihm()); + assertEquals("PKCS12", sslContextFactory.getKeyStoreType()); + assertEquals(false, sslContextFactory.isServerCertificationChainValidationEnabled()); + assertEquals(null, sslContextFactory.getClientCertFileInputStream()); + } + + /** + * Validate secure context. + * + * @throws Exception the exception + */ + @Test + public void validateSecureContext() throws Exception { + + SecurityContextFactory sslContextFactory = new SecurityContextFactoryImpl(); + + SSLContext sslContext = sslContextFactory.getSecureContext(); + + assertNotNull(sslContext); + } + + /** + * Validate secure context with server cert chain validation. + * + * @throws Exception the exception + */ + @Test + public void validateSecureContext_withServerCertChainValidation() throws Exception { + + SecurityContextFactory sslContextFactory = new SecurityContextFactoryImpl(); + sslContextFactory.setServerCertificationChainValidationEnabled(true); + sslContextFactory.setTrustStoreFileName("filename"); + + sslContextFactory.setClientCertFileName(null); + + SSLContext sslContext = sslContextFactory.getSecureContext(); + + assertNotNull(sslContext); + } + + /** + * Validate accessors. + * + * @throws Exception the exception + */ + @Test + public void validateAccessors() throws Exception { + + SecurityContextFactory sslContextFactory = new SecurityContextFactoryImpl(); + + FileInputStream mockInputStream = Mockito.mock(FileInputStream.class); + + sslContextFactory.setSslAlgorithm("sslAlgorithm"); + sslContextFactory.setKeyManagerAlgortihm("keyManagerAlgorithm"); + sslContextFactory.setKeyStoreType("keyStoreType"); + sslContextFactory.setClientCertFileInputStream(mockInputStream); + sslContextFactory.setServerCertificationChainValidationEnabled(true); + sslContextFactory.setTrustStoreFileName("truststoreFileName"); + sslContextFactory.setClientCertPassword("password"); + + assertEquals("sslAlgorithm", sslContextFactory.getSslAlgorithm()); + assertEquals("keyManagerAlgorithm", sslContextFactory.getKeyManagerAlgortihm()); + assertEquals("keyStoreType", sslContextFactory.getKeyStoreType()); + assertEquals(mockInputStream, sslContextFactory.getClientCertFileInputStream()); + assertEquals(true, sslContextFactory.isServerCertificationChainValidationEnabled()); + assertEquals("truststoreFileName", sslContextFactory.getTrustStoreFileName()); + assertEquals("password", sslContextFactory.getClientCertPassword()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestPortalRestAPIServiceImpl.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestPortalRestAPIServiceImpl.java new file mode 100644 index 0000000..bdd9093 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestPortalRestAPIServiceImpl.java @@ -0,0 +1,283 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + * + +package org.onap.aai.sparky.security.portal; + +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; +import static org.hamcrest.Matchers.nullValue; +import static org.junit.Assert.assertThat; +import static org.mockito.Mockito.when; + +import java.io.File; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.LinkedHashSet; +import java.util.List; +import java.util.Set; + +import javax.servlet.http.HttpServletRequest; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.Mockito; +import org.onap.aai.sparky.security.portal.PortalRestAPIServiceImpl; +import org.onap.aai.sparky.security.portal.UserManager; +import org.onap.aai.sparky.security.portal.config.PortalAuthenticationConfig; +import org.onap.aai.sparky.security.portal.config.RolesConfig; +import org.openecomp.portalsdk.core.onboarding.exception.PortalAPIException; +import org.openecomp.portalsdk.core.restful.domain.EcompRole; +import org.openecomp.portalsdk.core.restful.domain.EcompUser; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.powermock.reflect.Whitebox; + +@PowerMockIgnore({ "javax.crypto.*" }) +@RunWith(PowerMockRunner.class) +@PrepareForTest({ PortalAuthenticationConfig.class, RolesConfig.class }) +public class TestPortalRestAPIServiceImpl { + + private static File testUsersFile; + private static final String LOGINID_1 = "200"; + private static final String LOGINID_2 = "201"; + private static final String VIEW_ROLE = "View"; + + enum TestData { + // @formatter:off + TEST_USERS ("src/test/resources/portal/test-users.config"), + PORTAL_AUTHENTICATION_PROPERTIES ("src/test/resources/portal/portal-authentication.properties"), + ROLES_CONFIG_FILE ("src/test/resources/portal/roles.config"); + + private String filename; + TestData(String filename) {this.filename = filename;} + public String getFilename() {return this.filename;} + // @formatter:on + } + + @Mock + private UserManager userManager = new UserManager(testUsersFile); + + @InjectMocks + private PortalRestAPIServiceImpl portalApi = new PortalRestAPIServiceImpl(); + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + testUsersFile = Paths.get(TestData.TEST_USERS.getFilename()).toFile(); + } + + @AfterClass + public static void tearDownAfterClass() throws Exception { + Files.deleteIfExists(testUsersFile.toPath()); + } + + @Before + public void setUp() throws Exception { + Whitebox.setInternalState(RolesConfig.class, "ROLES_CONFIG_FILE", + TestData.ROLES_CONFIG_FILE.getFilename()); + } + + @After + public void tearDown() throws Exception { + Files.deleteIfExists(testUsersFile.toPath()); + } + + @Test + public void testPushAndGetUser() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + + portalApi.pushUser(user); + EcompUser storedUser = portalApi.getUser(user.getLoginId()); + + assertThat(storedUser.getLoginId(), is(user.getLoginId())); + } + + @Test(expected = PortalAPIException.class) + public void testCannotPushUserTwice() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + + portalApi.pushUser(user); + portalApi.pushUser(user); + } + + @Test(expected = PortalAPIException.class) + public void testGetUnknownUser() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + portalApi.pushUser(user); + + portalApi.getUser("does-not-exist"); + } + + @Test + public void testGetUsers() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + + EcompUser user2 = new EcompUser(); + user2.setLoginId(LOGINID_2); + + portalApi.pushUser(user); + portalApi.pushUser(user2); + + List<EcompUser> users = portalApi.getUsers(); + + assertThat(users.size(), is(2)); + assertThat(users.get(0).getLoginId(), is(LOGINID_1)); + assertThat(users.get(1).getLoginId(), is(LOGINID_2)); + } + + @Test + public void testEditUser() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + user.setFirstName("Bob"); + + portalApi.pushUser(user); + + user.setFirstName("Jen"); + portalApi.editUser(LOGINID_1, user); + + assertThat(portalApi.getUser(LOGINID_1).getFirstName(), is("Jen")); + } + + @Test(expected = PortalAPIException.class) + public void testEditUnknowUser() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + portalApi.pushUser(user); + + portalApi.editUser("does-no-exist", new EcompUser()); + } + + @Test + public void testGetRoles() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + user.setRoles(new HashSet<>(portalApi.getAvailableRoles())); + + portalApi.pushUser(user); + + List<EcompRole> userRoles = portalApi.getUserRoles(LOGINID_1); + + assertThat(userRoles.size(), is(1)); + assertThat(userRoles.get(0).getId(), is(1L)); + assertThat(userRoles.get(0).getName(), is(VIEW_ROLE)); + } + + @Test + public void testPushUserRoles() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + portalApi.pushUser(user); + + EcompUser storedUser = portalApi.getUser(LOGINID_1); + assertThat(storedUser.getRoles(), nullValue()); + + portalApi.pushUserRole(LOGINID_1, UserManager.getRoles()); + + Set<EcompRole> storedUserRoles = portalApi.getUser(LOGINID_1).getRoles(); + ArrayList<EcompRole> rolesList = new ArrayList<>(storedUserRoles); + + assertThat(rolesList.size(), is(1)); + assertThat(rolesList.get(0).getId(), is(1L)); + assertThat(rolesList.get(0).getName(), is(VIEW_ROLE)); + } + + @Test + public void testCannotPushRoleTwice() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + portalApi.pushUser(user); + + EcompUser storedUser = portalApi.getUser(LOGINID_1); + assertThat(storedUser.getRoles(), nullValue()); + + portalApi.pushUserRole(LOGINID_1, UserManager.getRoles()); + portalApi.pushUserRole(LOGINID_1, UserManager.getRoles()); + + Set<EcompRole> storedUserRoles = portalApi.getUser(LOGINID_1).getRoles(); + ArrayList<EcompRole> rolesList = new ArrayList<>(storedUserRoles); + + assertThat(rolesList.size(), is(1)); + assertThat(rolesList.get(0).getId(), is(1L)); + assertThat(rolesList.get(0).getName(), is(VIEW_ROLE)); + } + + @Test + public void testDeleteUserRoles() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + user.setFirstName("Bob"); + List<EcompRole> availableRoles = portalApi.getAvailableRoles(); + user.setRoles(new LinkedHashSet<EcompRole>(availableRoles)); + + portalApi.pushUser(user); + + portalApi.pushUserRole(LOGINID_1, new ArrayList<EcompRole>()); + + EcompUser userWithNoRoles = portalApi.getUser(LOGINID_1); + + assertThat(userWithNoRoles.getRoles(), empty()); + } + + @Test + public void testPushNullRoles() throws Exception { + EcompUser user = new EcompUser(); + user.setLoginId(LOGINID_1); + user.setFirstName("Bob"); + List<EcompRole> availableRoles = portalApi.getAvailableRoles(); + user.setRoles(new LinkedHashSet<EcompRole>(availableRoles)); + + portalApi.pushUser(user); + portalApi.pushUserRole(LOGINID_1, null); + + EcompUser userWithNoRoles = portalApi.getUser(LOGINID_1); + + assertThat(userWithNoRoles.getRoles(), empty()); + } + + @Test + public void testIsAppAuthenticated() throws Exception { + Whitebox.setInternalState(PortalAuthenticationConfig.class, "AUTHENTICATION_CONFIG_FILE", + TestData.PORTAL_AUTHENTICATION_PROPERTIES.getFilename()); + + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + when(request.getHeader("username")).thenReturn("testuser"); + when(request.getHeader("password")).thenReturn("testpassword"); + + assertThat(portalApi.isAppAuthenticated(request), is(true)); + } +}*/
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestUserManager.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestUserManager.java new file mode 100644 index 0000000..c34854a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestUserManager.java @@ -0,0 +1,265 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.security.portal; + +import static org.hamcrest.Matchers.empty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.IOException; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.Arrays; +import java.util.List; +import java.util.concurrent.Callable; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; +import java.util.stream.Collectors; + +import org.junit.After; +import org.junit.AfterClass; +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.onap.aai.sparky.security.portal.UserManager; +import org.onap.aai.sparky.util.NodeUtils; +import org.openecomp.portalsdk.core.restful.domain.EcompUser; +import org.powermock.modules.junit4.PowerMockRunner; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import com.google.gson.Gson; + +@RunWith(PowerMockRunner.class) +// @PrepareForTest(RolesConfig.class) +public class TestUserManager { + + private static final String LOGINID_3 = "3"; + private static File noFile; + private static File concurrentUsers; + private static File concurrentEditUsers; + + private static final Gson GSON = new Gson(); + private static final String LOGINID_1 = "1"; + private static final String LOGINID_2 = "2"; + + private static Logger logger = LoggerFactory.getLogger(TestUserManager.class); + + enum TestData { + // @formatter:off + NO_FILE ("src/test/resources/portal/no-users.config"), + CONCURRENT_USERS ("src/test/resources/portal/concurrent-users.config"), + CONCURRENT_EDIT_USERS ("src/test/resources/portal/concurrent-edit-users.config"); +// ROLES_CONFIG_FILE ("src/test/resources/portal/roles.config"); + + private String filename; + TestData(String filename) {this.filename = filename;} + public String getFilename() {return this.filename;} + // @formatter:on + } + + @BeforeClass + public static void setUpBeforeClass() throws Exception { + noFile = Paths.get(TestData.NO_FILE.getFilename()).toFile(); + concurrentUsers = Paths.get(TestData.CONCURRENT_USERS.getFilename()).toFile(); + concurrentEditUsers = Paths.get(TestData.CONCURRENT_EDIT_USERS.getFilename()).toFile(); + } + + @AfterClass + public static void tearDownAfterClass() throws Exception { + Files.deleteIfExists(concurrentUsers.toPath()); + Files.deleteIfExists(concurrentEditUsers.toPath()); + } + + @Before + public void setUp() throws Exception { + EcompUser user1 = new EcompUser(); + user1.setLoginId(LOGINID_1); + + EcompUser user2 = new EcompUser(); + user2.setLoginId(LOGINID_2); + + List<EcompUser> users = Arrays.asList(user1, user2); + Files.write(concurrentEditUsers.toPath(), GSON.toJson(users).getBytes()); + + // Whitebox.setInternalState(RolesConfig.class, "ROLES_CONFIG_FILE", + // TestData.ROLES_CONFIG_FILE.getFilename()); + } + + @After + public void tearDown() throws Exception { + Files.deleteIfExists(concurrentUsers.toPath()); + Files.deleteIfExists(concurrentEditUsers.toPath()); + } + + @Test + public void testGetUsersNoFile() throws Exception { + UserManager userManager = new UserManager(noFile); + List<EcompUser> users = userManager.getUsers(); + + assertThat(users, empty()); + } + + @Test + public void testConcurrentPush() throws Exception { + Callable<EcompUser> pushTask = () -> { + return pushTask(concurrentUsers, String.valueOf(NodeUtils.getRandomTxnId())); + }; + + List<Callable<EcompUser>> callables = Arrays.asList(pushTask, pushTask, pushTask, pushTask, + pushTask); + + ExecutorService executor = Executors.newWorkStealingPool(); + executor.invokeAll(callables).stream().map(future -> { + try { + return future.get(); + } catch (Exception e) { + throw new IllegalStateException(e); + } + }); + + UserManager userManager = new UserManager(concurrentUsers); + assertThat(userManager.getUsers().size(), is(5)); + } + + /** + * Concurrent push/edit with sequential retry on failure. + * + * @throws Exception + */ + @Test + public void testConcurrentPushAndEdit() throws Exception { + Callable<EcompUser> pushTaskRandomId = () -> { + return pushTask(concurrentEditUsers, String.valueOf(NodeUtils.getRandomTxnId())); + }; + + Callable<EcompUser> pushTaskId3 = () -> { + return pushTask(concurrentEditUsers, LOGINID_3); + }; + + Callable<EcompUser> editTaskId1 = () -> { + return editTask(LOGINID_1, "Bob"); + }; + + Callable<EcompUser> editTaskId2 = () -> { + return editTask(LOGINID_2, "Jen"); + }; + + Callable<EcompUser> editTaskId3 = () -> { + return editTask(LOGINID_3, "Amy"); + }; + + List<Callable<EcompUser>> callables = Arrays.asList(pushTaskRandomId, pushTaskRandomId, + pushTaskId3, editTaskId1, pushTaskRandomId, pushTaskRandomId, editTaskId3, editTaskId2, + pushTaskRandomId); + + ExecutorService executor = Executors.newWorkStealingPool(); + List<EcompUser> userTasks = executor.invokeAll(callables).stream().map(future -> { + try { + return future.get(); + } catch (Exception e) { + throw new IllegalStateException(e); + } + }).collect(Collectors.toList()); + + assertThat(userTasks.size(), is(9)); + + assertUserPushEdit(concurrentEditUsers); + } + + /** + * Retry push/edit if assert fails following concurrent attempt. + * + * @param userFile + * @throws Exception + */ + private void assertUserPushEdit(File userFile) throws Exception { + UserManager userManager = new UserManager(userFile); + try { + assertThat(userManager.getUsers().size(), is(8)); + } catch (Throwable t) { + int size = userManager.getUsers().size(); + logger.error("Failed to push all users. Only created: " + size + " users. " + t.getMessage()); + pushTask(concurrentEditUsers, String.valueOf(NodeUtils.getRandomTxnId())); + assertThat(userManager.getUsers().size(), is(size + 1)); + } + + try { + assertThat(userManager.getUser(LOGINID_1).get().getFirstName(), is("Bob")); + } catch (Throwable t) { + logger.error("Failed to edit user. " + t.getMessage()); + retryEdit(userManager, LOGINID_1, "Bob"); + } + + try { + assertThat(userManager.getUser(LOGINID_2).get().getFirstName(), is("Jen")); + } catch (Throwable t) { + logger.error("Failed to edit user. " + t.getMessage()); + retryEdit(userManager, LOGINID_2, "Jen"); + } + + try { + assertThat(userManager.getUser(LOGINID_3).isPresent(), is(true)); + } catch (Throwable t) { + logger.error("Failed to push user. " + t.getMessage()); + pushTask(concurrentEditUsers, LOGINID_3); + assertThat(userManager.getUser(LOGINID_3).isPresent(), is(true)); + } + + try { + assertThat(userManager.getUser(LOGINID_3).get().getFirstName(), is("Amy")); + } catch (Throwable t) { + logger.error("Failed to edit user. " + t.getMessage()); + retryEdit(userManager, LOGINID_3, "Amy"); + } + } + + private void retryEdit(UserManager userManager, String loginId, String firstName) + throws IOException { + editTask(loginId, firstName); + assertThat(userManager.getUser(loginId).get().getFirstName(), is(firstName)); + } + + private EcompUser pushTask(File fileStore, String loginId) throws IOException { + UserManager userManager = new UserManager(fileStore); + EcompUser user = new EcompUser(); + user.setLoginId(loginId); + userManager.pushUser(user); + return user; + } + + private EcompUser editTask(String loginId, String firstName) throws IOException { + UserManager userManager = new UserManager(concurrentEditUsers); + EcompUser user = new EcompUser(); + user.setLoginId(loginId); + user.setFirstName(firstName); + userManager.editUser(loginId, user); + return user; + } + +}
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/config/SubscriptionConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/config/SubscriptionConfigTest.java new file mode 100644 index 0000000..6aaca1a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/config/SubscriptionConfigTest.java @@ -0,0 +1,54 @@ +package org.onap.aai.sparky.subscription.config; + + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + + +public class SubscriptionConfigTest { + + + + private SubscriptionConfig subscriptionConfig; + private ArrayList<String> annEntities; + + @Before + public void init() throws Exception { + subscriptionConfig = new SubscriptionConfig(); + annEntities = new ArrayList<String>(); + + } + + + @Test + public void updateValues() { + + subscriptionConfig.setSubscriptionTarget("portal"); + assertNotNull(subscriptionConfig.getSubscriptionTarget()); + subscriptionConfig.setSubscriptionOrigin("sparky"); + assertNotNull(subscriptionConfig.getSubscriptionOrigin()); + subscriptionConfig.setSubscriptionMessageType("subscribe"); + assertNotNull(subscriptionConfig.getSubscriptionMessageType()); + subscriptionConfig.setSubscriptionTopic("portal-dispalyNotification"); + assertNotNull(subscriptionConfig.getSubscriptionTopic()); + subscriptionConfig.setAnnEntitiyTypes(annEntities); + assertNotNull(subscriptionConfig.getAnnEntitiyTypes()); + subscriptionConfig.setLaunchOITarget("portal"); + assertNotNull(subscriptionConfig.getLaunchOITarget()); + subscriptionConfig.setLaunchOIOrigin("sparky"); + assertNotNull(subscriptionConfig.getLaunchOIOrigin()); + subscriptionConfig.setLaunchOIMessageType("publish"); + assertNotNull(subscriptionConfig.getLaunchOIMessageType()); + subscriptionConfig.setLaunchOITopic("portal-displayNotification"); + assertNotNull(subscriptionConfig.getLaunchOITopic()); + subscriptionConfig.setIsLaunchOIEnabled(true); + assertTrue(subscriptionConfig.getIsLaunchOIEnabled()); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/MessageTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/MessageTest.java new file mode 100644 index 0000000..bd3297e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/MessageTest.java @@ -0,0 +1,32 @@ +package org.onap.aai.sparky.subscription.payload.entity; + +import static org.junit.Assert.assertNotNull; + + +import org.junit.Before; +import org.junit.Test; + +public class MessageTest { + + private Message message; + private Payload payLoad; + + @Before + public void init() throws Exception { + message = new Message(); + payLoad = new Payload(); + + } + + + @Test + public void updateValues() { + + message.setApplicationName("Network Navigator"); + assertNotNull(message.getApplicationName()); + message.setPayload(payLoad); + assertNotNull(message.getPayload()); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ObjectInspectorPayloadTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ObjectInspectorPayloadTest.java new file mode 100644 index 0000000..1bbddcb --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ObjectInspectorPayloadTest.java @@ -0,0 +1,43 @@ +package org.onap.aai.sparky.subscription.payload.entity; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.io.IOException; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.subscription.config.SubscriptionConfig; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; + +public class ObjectInspectorPayloadTest { + + private ObjectInspectorPayload objectInspectorPayload; + private Message message; + + @Before + public void init() throws Exception { + objectInspectorPayload = new ObjectInspectorPayload(); + message = new Message(); + + } + + + @Test + public void updateValues() throws JsonParseException, JsonMappingException, IOException { + + objectInspectorPayload.setMessage(message); + assertNotNull(objectInspectorPayload.getMessage()); + objectInspectorPayload.setTopic("sparky"); + assertNotNull(objectInspectorPayload.getTopic()); + objectInspectorPayload.setMessageType("subscribe"); + assertNotNull(objectInspectorPayload.getMessageType()); + objectInspectorPayload.setOrigin("portal-dispalyNotification"); + assertNotNull(objectInspectorPayload.getOrigin()); + objectInspectorPayload.setTarget(""); + assertNotNull(objectInspectorPayload.getTarget()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ParamsTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ParamsTest.java new file mode 100644 index 0000000..eac6f74 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ParamsTest.java @@ -0,0 +1,30 @@ +package org.onap.aai.sparky.subscription.payload.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class ParamsTest { + + + + private Params params; + + + @Before + public void init() throws Exception { + params = new Params(); + } + + + @Test + public void updateValues() { + + params.setObjectName(""); + assertNotNull(params.getObjectName()); + params.setExternalClassId("222"); + assertNotNull(params.getExternalClassId()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/PayloadTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/PayloadTest.java new file mode 100644 index 0000000..95d43e9 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/PayloadTest.java @@ -0,0 +1,32 @@ +package org.onap.aai.sparky.subscription.payload.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class PayloadTest { + + + private Payload payload; + private Params params; + + @Before + public void init() throws Exception { + payload = new Payload(); + params = new Params(); + + } + + + @Test + public void updateValues() { + + payload.setAction("Launch-tab"); + assertNotNull(payload.getAction()); + payload.setParams(params); + assertNotNull(payload.getParams()); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AbstractEntitySynchronizerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AbstractEntitySynchronizerTest.java new file mode 100644 index 0000000..3bd4928 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AbstractEntitySynchronizerTest.java @@ -0,0 +1,463 @@ +package org.onap.aai.sparky.sync; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.regex.Pattern; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.cl.api.Logger; +import org.onap.aai.cl.eelf.LoggerFactory; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.SearchableEntityLookup; +import org.onap.aai.sparky.config.oxm.SearchableOxmEntityDescriptor; +import org.onap.aai.sparky.dal.ActiveInventoryAdapter; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.dal.NetworkTransaction; +import org.onap.aai.sparky.dal.rest.HttpMethod; +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; + + + +public class AbstractEntitySynchronizerTest { + + public class QuantumSynchronizer extends AbstractEntitySynchronizer { + + private boolean amIDone; + private SearchableEntityLookup searchableEntityLookup; + + protected QuantumSynchronizer(Logger logger, String syncName, int numSyncWorkers, int numActiveInventoryWorkers, + int numElasticsearchWorkers, String indexName, NetworkStatisticsConfig aaiStatConfig, + NetworkStatisticsConfig esStatConfig) throws Exception { + super(logger, syncName, numSyncWorkers, numActiveInventoryWorkers, numElasticsearchWorkers, indexName, + aaiStatConfig, esStatConfig); + + amIDone = false; + + } + + public void setSearchableEntityLookup(SearchableEntityLookup searchableEntityLookup) { + this.searchableEntityLookup = searchableEntityLookup; + } + + public void initCounters() { + if (this.searchableEntityLookup != null) { + this.aaiEntityStats + .intializeEntityCounters(searchableEntityLookup.getSearchableEntityDescriptors().keySet()); + this.esEntityStats + .intializeEntityCounters(searchableEntityLookup.getSearchableEntityDescriptors().keySet()); + + } + } + + public void setSyncDone(boolean done) { + this.amIDone = done; + } + + @Override + protected boolean isSyncDone() { + return amIDone; + } + + } + + private static Logger LOG = LoggerFactory.getInstance().getLogger(AbstractEntitySynchronizerTest.class); + private static SecureRandom secureRandom = new SecureRandom(); + + private QuantumSynchronizer quantumSync; + private NetworkStatisticsConfig aaiStatConfig; + private NetworkStatisticsConfig esStatConfig; + private ElasticSearchAdapter esAdapter; + private ActiveInventoryAdapter aaiAdapter; + private SearchableEntityLookup searchableEntityLookup; + + + @Before + public void init() throws Exception { + + aaiStatConfig = new NetworkStatisticsConfig(); + + aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + aaiStatConfig.setBytesHistogramMaxYAxis(1000000L); + aaiStatConfig.setBytesHistogramNumBins(20); + aaiStatConfig.setBytesHistogramNumDecimalPoints(2); + + aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000); + aaiStatConfig.setQueueLengthHistogramNumBins(20); + aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + aaiStatConfig.setTaskAgeHistogramNumBins(20); + aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L); + aaiStatConfig.setResponseTimeHistogramNumBins(20); + aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + aaiStatConfig.setTpsHistogramMaxYAxis(100); + aaiStatConfig.setTpsHistogramNumBins(20); + aaiStatConfig.setTpsHistogramNumDecimalPoints(2); + + esStatConfig = new NetworkStatisticsConfig(); + + esStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + esStatConfig.setBytesHistogramMaxYAxis(1000000L); + esStatConfig.setBytesHistogramNumBins(20); + esStatConfig.setBytesHistogramNumDecimalPoints(2); + + esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + esStatConfig.setQueueLengthHistogramMaxYAxis(20000); + esStatConfig.setQueueLengthHistogramNumBins(20); + esStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + esStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + esStatConfig.setTaskAgeHistogramNumBins(20); + esStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + esStatConfig.setResponseTimeHistogramMaxYAxis(10000L); + esStatConfig.setResponseTimeHistogramNumBins(20); + esStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + esStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + esStatConfig.setTpsHistogramMaxYAxis(100); + esStatConfig.setTpsHistogramNumBins(20); + esStatConfig.setTpsHistogramNumDecimalPoints(2); + + esAdapter = Mockito.mock(ElasticSearchAdapter.class); + aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + + } + + @Test + public void validateNetworkStatConfig() { + + // validate aaiStatConfig + + assertEquals(100, aaiStatConfig.getNumSamplesPerThreadForRunningAverage()); + + assertEquals("[Response Size In Bytes]",aaiStatConfig.getBytesHistogramLabel()); + assertEquals(1000000L,aaiStatConfig.getBytesHistogramMaxYAxis()); + assertEquals(20,aaiStatConfig.getBytesHistogramNumBins()); + assertEquals(2,aaiStatConfig.getBytesHistogramNumDecimalPoints()); + + assertEquals("[Queue Item Length]",aaiStatConfig.getQueueLengthHistogramLabel()); + assertEquals(20000,aaiStatConfig.getQueueLengthHistogramMaxYAxis()); + assertEquals(20,aaiStatConfig.getQueueLengthHistogramNumBins()); + assertEquals(2,aaiStatConfig.getQueueLengthHistogramNumDecimalPoints()); + + assertEquals("[Task Age In Ms]",aaiStatConfig.getTaskAgeHistogramLabel()); + assertEquals(600000L,aaiStatConfig.getTaskAgeHistogramMaxYAxis()); + assertEquals(20,aaiStatConfig.getTaskAgeHistogramNumBins()); + assertEquals(2,aaiStatConfig.getTaskAgeHistogramNumDecimalPoints()); + + assertEquals("[Response Time In Ms]",aaiStatConfig.getResponseTimeHistogramLabel()); + assertEquals(1000L,aaiStatConfig.getResponseTimeHistogramMaxYAxis()); + assertEquals(20,aaiStatConfig.getResponseTimeHistogramNumBins()); + assertEquals(2, aaiStatConfig.getResponseTimeHistogramNumDecimalPoints()); + + assertEquals("[Transactions Per Second]",aaiStatConfig.getTpsHistogramLabel()); + assertEquals(100,aaiStatConfig.getTpsHistogramMaxYAxis()); + assertEquals(20,aaiStatConfig.getTpsHistogramNumBins()); + assertEquals(2,aaiStatConfig.getTpsHistogramNumDecimalPoints()); + + // validate esStatConfig + + assertEquals(100, esStatConfig.getNumSamplesPerThreadForRunningAverage()); + + assertEquals("[Response Size In Bytes]",esStatConfig.getBytesHistogramLabel()); + assertEquals(1000000L,esStatConfig.getBytesHistogramMaxYAxis()); + assertEquals(20,esStatConfig.getBytesHistogramNumBins()); + assertEquals(2,esStatConfig.getBytesHistogramNumDecimalPoints()); + + assertEquals("[Queue Item Length]",esStatConfig.getQueueLengthHistogramLabel()); + assertEquals(20000,esStatConfig.getQueueLengthHistogramMaxYAxis()); + assertEquals(20,esStatConfig.getQueueLengthHistogramNumBins()); + assertEquals(2,esStatConfig.getQueueLengthHistogramNumDecimalPoints()); + + assertEquals("[Task Age In Ms]",esStatConfig.getTaskAgeHistogramLabel()); + assertEquals(600000L,esStatConfig.getTaskAgeHistogramMaxYAxis()); + assertEquals(20,esStatConfig.getTaskAgeHistogramNumBins()); + assertEquals(2,esStatConfig.getTaskAgeHistogramNumDecimalPoints()); + + assertEquals("[Response Time In Ms]",esStatConfig.getResponseTimeHistogramLabel()); + assertEquals(10000L,esStatConfig.getResponseTimeHistogramMaxYAxis()); + assertEquals(20,esStatConfig.getResponseTimeHistogramNumBins()); + assertEquals(2, esStatConfig.getResponseTimeHistogramNumDecimalPoints()); + + assertEquals("[Transactions Per Second]",esStatConfig.getTpsHistogramLabel()); + assertEquals(100,esStatConfig.getTpsHistogramMaxYAxis()); + assertEquals(20,esStatConfig.getTpsHistogramNumBins()); + assertEquals(2,esStatConfig.getTpsHistogramNumDecimalPoints()); + + } + + @Test + public void validateBasicConstruction() throws Exception { + + quantumSync = new QuantumSynchronizer(LOG, "quanumSynchronizer", 5, 5, 5, "quantum-search-index", aaiStatConfig, + esStatConfig); + + quantumSync.setAaiAdapter(aaiAdapter); + quantumSync.setElasticSearchAdapter(esAdapter); + + quantumSync.clearCache(); + + assertNotNull(quantumSync.getAaiAdapter()); + assertNotNull(quantumSync.getElasticSearchAdapter()); + assertEquals("quantum-search-index", quantumSync.getIndexName()); + + quantumSync.setIndexName("new-search-index-name"); + assertEquals("new-search-index-name", quantumSync.getIndexName()); + + quantumSync.shutdownExecutors(); + } + + private static String REST_STAT_LINE_FORMAT = ".*%s.*1XX:.*%d.*2XX:.*%d.*3XX:.*%d.*4XX:.*%d.*5XX:.*%d.*6XX:.*%d.*"; + private static String ENTITY_STATS_LINE_FORMAT = ".*%s.*TOTAL:.*%d.*FOUND:.*%d.*NO_PAYLOAD:.*%d.*NOT_FOUND:.*%d.*NUM_RETRIES:.*%d.*ERROR:.*%d.*"; + + private boolean reportContainsRestStatistics(String testString, HttpMethod httpMethod, long oneXX, long twoXX, + long threeXX, long fourXX, long fiveXX, long sixXX) { + + Pattern pattern = Pattern.compile(String.format(REST_STAT_LINE_FORMAT, httpMethod.toString(), oneXX, twoXX, + threeXX, fourXX, fiveXX, sixXX)); + + String lines[] = testString.split("\\r?\\n"); + + /* + * if we get a match on any of the lines in the report, then we + * succeeded + */ + + for (String line : lines) { + if (pattern.matcher(line).matches()) { + return true; + } + } + + return false; + } + + private boolean reportContainsEntityStatistics(String testString, String entityType, long total, long found, + long noPayload, long notFound, long numRetries, long numErrors) { + + Pattern pattern = Pattern.compile(String.format(ENTITY_STATS_LINE_FORMAT, entityType, total, found, + noPayload, notFound, numRetries, numErrors)); + + String lines[] = testString.split("\\r?\\n"); + + /* + * if we get a match on any of the lines in the report, then we + * succeeded + */ + + for (String line : lines) { + if (pattern.matcher(line).matches()) { + return true; + } + } + + return false; + } + + + @Test + public void validateStatisticTrackingAndReporting() throws Exception { + + quantumSync = new QuantumSynchronizer(LOG, "quanumSynchronizer", 5, 5, 5, "quantum-search-index", aaiStatConfig, + esStatConfig); + + quantumSync.setAaiAdapter(aaiAdapter); + quantumSync.setElasticSearchAdapter(esAdapter); + + searchableEntityLookup = new SearchableEntityLookup(); + + Map<String,SearchableOxmEntityDescriptor> searchableDescriptors = new HashMap<String,SearchableOxmEntityDescriptor>(); + + SearchableOxmEntityDescriptor complexDescriptor = new SearchableOxmEntityDescriptor(); + complexDescriptor.setEntityName("complex"); + List<String> pkeyNames = new ArrayList<String>(); + pkeyNames.add("physical-location-id"); + + complexDescriptor.setPrimaryKeyAttributeNames(pkeyNames); + complexDescriptor.setSearchableAttributes(pkeyNames); + + searchableDescriptors.put("complex", complexDescriptor); + + searchableEntityLookup.setSearchableEntityDescriptors(searchableDescriptors); + + quantumSync.setSearchableEntityLookup(searchableEntityLookup); + quantumSync.initCounters(); + + int randomMaxTimesToPegCounters = secureRandom.nextInt(1000); + + NetworkTransaction txn = null; + OperationResult opResult = null; + + + /* + * The result of this block is that for all HttpMethod types [ PUT, POST, GET, etc ] we'll peg a complex entity + * type counter a random number of times (set before the for loop, and for each status code category 1XX -> 6XX. + */ + + // GET, PUT, POST, DELETE, PATCH, HEAD + for (HttpMethod httpMethod : HttpMethod.values()) { + + // for randomMaxTimesToPegCounters + for (int numTimesToPegCounter = 0; numTimesToPegCounter < randomMaxTimesToPegCounters; numTimesToPegCounter++) { + txn = new NetworkTransaction(); + txn.setOperationType(httpMethod); + txn.setEntityType("complex"); + + /* + * set the txn optime to a random value between 0 and 10000 ms. + * Over thousands of counter statistics the random sample + * averages should be approximately uniform, but is highly + * dependent on the pseudo-RNG. + */ + txn.setOpTimeInMs(secureRandom.nextInt(10000)); + + // 1XX, 2XX, 3XX, 4XX, 5XX, 6XX + for ( int resultCode = 100; resultCode < 700; resultCode += 100) { + opResult = new OperationResult(); + opResult.setResultCode(resultCode); + + txn.setOperationResult(opResult); + + // peg both AAI and ES statistics + + quantumSync.updateActiveInventoryCounters(txn); + quantumSync.updateActiveInventoryCounters(httpMethod, "complex", opResult); + + quantumSync.updateElasticSearchCounters(txn); + quantumSync.updateElasticSearchCounters(httpMethod, "complex", opResult); + + } + } + } + + for (int numTimesToPegCounter = 0; numTimesToPegCounter < randomMaxTimesToPegCounters; numTimesToPegCounter++) { + quantumSync.incActiveInventoryWorkOnHandCounter(); + quantumSync.incElasticSearchWorkOnHandCounter(); + } + + assertEquals( randomMaxTimesToPegCounters, quantumSync.aaiWorkOnHand.get()); + assertEquals( randomMaxTimesToPegCounters, quantumSync.esWorkOnHand.get()); + + /* + * now we'll generate various reports and try to validate the output + */ + + String aaiStatsReport = quantumSync.getActiveInventoryStatisticsReport(); + + /* + * We double the expected validation check number because we peg each + * counter in each category twice (with different APIs for the same + * entity. + */ + + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.DELETE, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.PUT, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.POST, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.GET, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + long total = (randomMaxTimesToPegCounters*2)*6; + long found = randomMaxTimesToPegCounters*2; + long noPayload = (randomMaxTimesToPegCounters*2)*6; + long notFound = 0; + long numRetries = 0; + long numErrors = (randomMaxTimesToPegCounters*2)*5; + + assertTrue(reportContainsEntityStatistics(aaiStatsReport, "complex", total, found, + noPayload, notFound, numRetries, numErrors)); + + String esStatsReport = quantumSync.getElasticSearchStatisticsReport(); + + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.DELETE, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.PUT, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.POST, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.GET, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2, + randomMaxTimesToPegCounters * 2, randomMaxTimesToPegCounters * 2)); + + + assertNotNull(quantumSync.getStatReport(10000L, false)); + assertNotNull(quantumSync.getStatReport(20000L, true)); + + for (int numTimesToPegCounter = 0; numTimesToPegCounter < randomMaxTimesToPegCounters; numTimesToPegCounter++) { + quantumSync.decActiveInventoryWorkOnHandCounter(); + quantumSync.decElasticSearchWorkOnHandCounter(); + } + + assertEquals( 0, quantumSync.aaiWorkOnHand.get()); + assertEquals( 0, quantumSync.esWorkOnHand.get()); + + /* + * Validate stat reports display zero stats for complex + */ + + quantumSync.resetCounters(); + + aaiStatsReport = quantumSync.getActiveInventoryStatisticsReport(); + + /* + * We double the expected validation check number because we peg each + * counter in each category twice (with different APIs for the same + * entity. + */ + + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.DELETE, 0, 0, 0, 0, 0, 0)); + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.PUT, 0, 0, 0, 0, 0, 0)); + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.POST, 0, 0, 0, 0, 0, 0)); + assertTrue(reportContainsRestStatistics(aaiStatsReport, HttpMethod.GET, 0, 0, 0, 0, 0, 0)); + + assertTrue(reportContainsEntityStatistics(aaiStatsReport, "complex", 0, 0, 0, 0, 0, 0)); + + esStatsReport = quantumSync.getElasticSearchStatisticsReport(); + + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.DELETE, 0, 0, 0, 0, 0, 0)); + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.PUT, 0, 0, 0, 0, 0, 0)); + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.POST, 0, 0, 0, 0, 0, 0)); + assertTrue(reportContainsRestStatistics(esStatsReport, HttpMethod.GET, 0, 0, 0, 0, 0, 0)); + + quantumSync.shutdownExecutors(); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AggregationSynchronizerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AggregationSynchronizerTest.java new file mode 100644 index 0000000..65e6e70 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AggregationSynchronizerTest.java @@ -0,0 +1,345 @@ +package org.onap.aai.sparky.sync; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import javax.ws.rs.core.MediaType; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.aggregation.sync.AggregationSynchronizer; +import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.dal.ActiveInventoryAdapter; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; +import org.onap.aai.sparky.sync.enumeration.OperationState; +import org.onap.aai.sparky.sync.enumeration.SynchronizerState; +import org.onap.aai.sparky.util.TestResourceLoader; + +public class AggregationSynchronizerTest { + + //private static Logger LOG = LoggerFactory.getInstance().getLogger(AggregationSynchronizerTest.class); + private static SecureRandom secureRandom = new SecureRandom(); + private AggregationSynchronizer aggregationSynchronizer; + + private ElasticSearchSchemaConfig esSchemaConfig; + private NetworkStatisticsConfig aaiStatConfig; + private NetworkStatisticsConfig esStatConfig; + private OxmEntityLookup oxmEntityLookup; + private ElasticSearchAdapter esAdapter; + private ActiveInventoryAdapter aaiAdapter; + + + + @Before + public void init() throws Exception { + + esSchemaConfig = new ElasticSearchSchemaConfig(); + esSchemaConfig.setIndexDocType("default"); + esSchemaConfig.setIndexMappingsFileName(null); + esSchemaConfig.setIndexName("aggregation-index-name"); + esSchemaConfig.setIndexSettingsFileName(null); + + + aaiStatConfig = new NetworkStatisticsConfig(); + + aaiStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + aaiStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + aaiStatConfig.setBytesHistogramMaxYAxis(1000000L); + aaiStatConfig.setBytesHistogramNumBins(20); + aaiStatConfig.setBytesHistogramNumDecimalPoints(2); + + aaiStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + aaiStatConfig.setQueueLengthHistogramMaxYAxis(20000); + aaiStatConfig.setQueueLengthHistogramNumBins(20); + aaiStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + aaiStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + aaiStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + aaiStatConfig.setTaskAgeHistogramNumBins(20); + aaiStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + aaiStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + aaiStatConfig.setResponseTimeHistogramMaxYAxis(1000L); + aaiStatConfig.setResponseTimeHistogramNumBins(20); + aaiStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + aaiStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + aaiStatConfig.setTpsHistogramMaxYAxis(100); + aaiStatConfig.setTpsHistogramNumBins(20); + aaiStatConfig.setTpsHistogramNumDecimalPoints(2); + + esStatConfig = new NetworkStatisticsConfig(); + + esStatConfig.setNumSamplesPerThreadForRunningAverage(100); + + esStatConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + esStatConfig.setBytesHistogramMaxYAxis(1000000L); + esStatConfig.setBytesHistogramNumBins(20); + esStatConfig.setBytesHistogramNumDecimalPoints(2); + + esStatConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + esStatConfig.setQueueLengthHistogramMaxYAxis(20000); + esStatConfig.setQueueLengthHistogramNumBins(20); + esStatConfig.setQueueLengthHistogramNumDecimalPoints(2); + + esStatConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + esStatConfig.setTaskAgeHistogramMaxYAxis(600000L); + esStatConfig.setTaskAgeHistogramNumBins(20); + esStatConfig.setTaskAgeHistogramNumDecimalPoints(2); + + esStatConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + esStatConfig.setResponseTimeHistogramMaxYAxis(10000L); + esStatConfig.setResponseTimeHistogramNumBins(20); + esStatConfig.setResponseTimeHistogramNumDecimalPoints(2); + + esStatConfig.setTpsHistogramLabel("[Transactions Per Second]"); + esStatConfig.setTpsHistogramMaxYAxis(100); + esStatConfig.setTpsHistogramNumBins(20); + esStatConfig.setTpsHistogramNumDecimalPoints(2); + + oxmEntityLookup = new OxmEntityLookup(); + + esAdapter = Mockito.mock(ElasticSearchAdapter.class); + aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + + Map<String,OxmEntityDescriptor> oxmEntityDescriptors = new HashMap<String,OxmEntityDescriptor>(); + + OxmEntityDescriptor complexDescriptor = new OxmEntityDescriptor(); + complexDescriptor.setEntityName("complex"); + List<String> pkeyNames = new ArrayList<String>(); + pkeyNames.add("physical-location-id"); + + complexDescriptor.setPrimaryKeyAttributeNames(pkeyNames); + + oxmEntityDescriptors.put("complex", complexDescriptor); + + oxmEntityLookup.setEntityDescriptors(oxmEntityDescriptors); + + + + } + + @Test + public void validateBasicConstruction() throws Exception { + + aggregationSynchronizer = new AggregationSynchronizer("complex", esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup); + + aggregationSynchronizer.setAaiAdapter(aaiAdapter); + aggregationSynchronizer.setElasticSearchAdapter(esAdapter); + + assertNotNull(aggregationSynchronizer.getAaiAdapter()); + assertNotNull(aggregationSynchronizer.getElasticSearchAdapter()); + + } + + @Test + public void validateSmallSync() throws Exception { + + aggregationSynchronizer = new AggregationSynchronizer("complex", esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup); + + aggregationSynchronizer.setAaiAdapter(aaiAdapter); + aggregationSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_complex_nodesQuery_response.json"); + + OperationResult complexSelfLinks = new OperationResult(); + + complexSelfLinks.setResultCode(200); + complexSelfLinks.setResult(nodesQueryResponse); + + Mockito.when( aaiAdapter.getSelfLinksByEntityType("complex")).thenReturn(complexSelfLinks); + + for (int x = 1; x <= 5; x++) { + + Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("complex" + x), Mockito.anyString())) + .thenReturn("https://server.proxy:8443/aai/v11/cloud-infrastructure/complexes/complex" + x); + + Mockito.when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("complex" + x), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/complex" + x + "_fullDepth_aaiEntityRetrieval.json"))); + + } + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())).thenReturn( + "http://localhost:9200/myindex/mytype/doc1", "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3", "http://localhost:9200/myindex/mytype/doc4", + "http://localhost:9200/myindex/mytype/doc5"); + + /* + * Our initial gets from elastic search should be record-not-found + */ + Mockito.when( esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(404,null)); + + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(200, null)); + + OperationState syncState = aggregationSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertEquals(SynchronizerState.IDLE, aggregationSynchronizer.getState()); + assertNotNull(aggregationSynchronizer.getStatReport(false)); + assertNotNull(aggregationSynchronizer.getStatReport(true)); + + aggregationSynchronizer.clearCache(); + aggregationSynchronizer.shutdown(); + + + } + + @Test + public void validateSmallSyncWithRetries() throws Exception { + + aggregationSynchronizer = new AggregationSynchronizer("complex", esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup); + + aggregationSynchronizer.setAaiAdapter(aaiAdapter); + aggregationSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_complex_nodesQuery_response.json"); + + OperationResult complexSelfLinks = new OperationResult(); + + complexSelfLinks.setResultCode(200); + complexSelfLinks.setResult(nodesQueryResponse); + + Mockito.when( aaiAdapter.getSelfLinksByEntityType("complex")).thenReturn(complexSelfLinks); + + for (int x = 1; x <= 5; x++) { + + Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("complex" + x), Mockito.anyString())) + .thenReturn("https://server.proxy:8443/aai/v11/cloud-infrastructure/complexes/complex" + x); + + Mockito.when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("complex" + x), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/complex" + x + "_fullDepth_aaiEntityRetrieval.json"))); + + } + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())).thenReturn( + "http://localhost:9200/myindex/mytype/doc1", "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3", "http://localhost:9200/myindex/mytype/doc4", + "http://localhost:9200/myindex/mytype/doc5"); + + /* + * Our initial gets from elastic search should be record-not-found + */ + Mockito.when( esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(404,null)); + Mockito.when( esAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(404,null)); + + + // 409 is the elastic search version conflict code, which will result in the entries being added + // to our retry queue and re-attempted a couple times. + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(409, null)); + + OperationState syncState = aggregationSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertEquals(SynchronizerState.IDLE, aggregationSynchronizer.getState()); + assertNotNull(aggregationSynchronizer.getStatReport(false)); + assertNotNull(aggregationSynchronizer.getStatReport(true)); + + aggregationSynchronizer.clearCache(); + aggregationSynchronizer.shutdown(); + + } + + @Test + public void validateSmallSyncWithDocumentElementMerges() throws Exception { + + aggregationSynchronizer = new AggregationSynchronizer("complex", esSchemaConfig, 5, 5, 5, aaiStatConfig, + esStatConfig, oxmEntityLookup); + + aggregationSynchronizer.setAaiAdapter(aaiAdapter); + aggregationSynchronizer.setElasticSearchAdapter(esAdapter); + + String nodesQueryResponse = TestResourceLoader + .getTestResourceDataJson("/sync/aai/activeInventory_complex_nodesQuery_response.json"); + + OperationResult complexSelfLinks = new OperationResult(); + + complexSelfLinks.setResultCode(200); + complexSelfLinks.setResult(nodesQueryResponse); + + Mockito.when( aaiAdapter.getSelfLinksByEntityType("complex")).thenReturn(complexSelfLinks); + + for (int x = 1; x <= 5; x++) { + + Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains("complex" + x), Mockito.anyString())) + .thenReturn("https://server.proxy:8443/aai/v11/cloud-infrastructure/complexes/complex" + x); + + Mockito.when(aaiAdapter.queryActiveInventoryWithRetries(Matchers.contains("complex" + x), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/complex" + x + "_fullDepth_aaiEntityRetrieval.json"))); + + } + + Mockito.when(esAdapter.buildElasticSearchGetDocUrl(Mockito.anyString(), Mockito.anyString())).thenReturn( + "http://localhost:9200/myindex/mytype/doc1", "http://localhost:9200/myindex/mytype/doc2", + "http://localhost:9200/myindex/mytype/doc3", "http://localhost:9200/myindex/mytype/doc4", + "http://localhost:9200/myindex/mytype/doc5"); + + /* + * Our initial gets from elastic search return 200 ok with a found entity document requiring a doc update + */ + Mockito.when(esAdapter.doGet(Matchers.contains("doc1"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch1.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc2"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch2.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc3"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch3.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc4"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch4.json"))); + + Mockito.when(esAdapter.doGet(Matchers.contains("doc5"), Mockito.any())).thenReturn(new OperationResult(200, + TestResourceLoader.getTestResourceDataJson("/sync/ElasticSearch/docEntityFromElasticSearch5.json"))); + + Mockito.when(esAdapter.doPut(Matchers.contains("doc"), Mockito.any(), Mockito.any())) + .thenReturn(new OperationResult(200, null)); + + OperationState syncState = aggregationSynchronizer.doSync(); + assertEquals(OperationState.OK, syncState); + + assertEquals(SynchronizerState.IDLE, aggregationSynchronizer.getState()); + assertNotNull(aggregationSynchronizer.getStatReport(false)); + assertNotNull(aggregationSynchronizer.getStatReport(true)); + + aggregationSynchronizer.clearCache(); + aggregationSynchronizer.shutdown(); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/ElasticSearchIndexCleanerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/ElasticSearchIndexCleanerTest.java new file mode 100644 index 0000000..30394de --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/ElasticSearchIndexCleanerTest.java @@ -0,0 +1,122 @@ +package org.onap.aai.sparky.sync; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.sync.enumeration.OperationState; +import org.onap.aai.sparky.util.TestResourceLoader; + +public class ElasticSearchIndexCleanerTest { + + private ElasticSearchIndexCleaner esIndexCleaner; + + private ElasticSearchAdapter esAdapter; + private ElasticSearchEndpointConfig esRestEndpointConfig; + private ElasticSearchSchemaConfig esSchemaConfig; + + @Before + public void init() throws Exception { + + esAdapter = Mockito.mock( ElasticSearchAdapter.class); + esRestEndpointConfig = new ElasticSearchEndpointConfig(); + esSchemaConfig = new ElasticSearchSchemaConfig(); + + esRestEndpointConfig.setScrollContextBatchRequestSize(5000); + esRestEndpointConfig.setEsIpAddress("127.0.0.1"); + esRestEndpointConfig.setEsServerPort("9200"); + esRestEndpointConfig.setScrollContextTimeToLiveInMinutes(5); + + } + + @Test + public void validateBasicConstruction() throws Exception { + esIndexCleaner = new ElasticSearchIndexCleaner(esAdapter, esRestEndpointConfig, esSchemaConfig); + } + + @Test + public void validatePreOperationCollection() throws Exception { + + String beforeSyncScrollApiResponse = TestResourceLoader.getTestResourceDataJson( + "/sync/ElasticSearch/BeforeSync_ElasticSearch_ScrollApi_Successful.json"); + + OperationResult scrollApiOpResult = new OperationResult(); + scrollApiOpResult.setResultCode(200); + scrollApiOpResult.setResult(beforeSyncScrollApiResponse); + + Mockito.when(esAdapter.doPost(Mockito.anyString(), Mockito.anyString(), Mockito.anyObject())) + .thenReturn(scrollApiOpResult); + + esIndexCleaner = new ElasticSearchIndexCleaner(esAdapter, esRestEndpointConfig, esSchemaConfig); + OperationState opState = esIndexCleaner.populatePreOperationCollection(); + + assertEquals(OperationState.OK, opState); + + } + + @Test + public void validatePostOperationCollection() throws Exception { + + String afterSyncScrollApiResponse = TestResourceLoader.getTestResourceDataJson( + "/sync/ElasticSearch/AfterSync_ElasticSearch_ScrollApi_Successful.json"); + + OperationResult scrollApiOpResult = new OperationResult(); + scrollApiOpResult.setResultCode(200); + scrollApiOpResult.setResult(afterSyncScrollApiResponse); + + Mockito.when(esAdapter.doPost(Mockito.anyString(), Mockito.anyString(), Mockito.anyObject())) + .thenReturn(scrollApiOpResult); + + esIndexCleaner = new ElasticSearchIndexCleaner(esAdapter, esRestEndpointConfig, esSchemaConfig); + OperationState opState = esIndexCleaner.populatePostOperationCollection(); + + assertEquals(OperationState.OK, opState); + + } + + + @Test + public void validatePerformCleanup() throws Exception { + + String beforeSyncScrollApiResponse = TestResourceLoader.getTestResourceDataJson( + "/sync/ElasticSearch/BeforeSync_ElasticSearch_ScrollApi_Successful.json"); + + OperationResult beforeScrollApiOpResult = new OperationResult(); + beforeScrollApiOpResult.setResultCode(200); + beforeScrollApiOpResult.setResult(beforeSyncScrollApiResponse); + + String afterSyncScrollApiResponse = TestResourceLoader.getTestResourceDataJson( + "/sync/ElasticSearch/AfterSync_ElasticSearch_ScrollApi_Successful.json"); + + OperationResult afterScrollApiOpResult = new OperationResult(); + afterScrollApiOpResult.setResultCode(200); + afterScrollApiOpResult.setResult(afterSyncScrollApiResponse); + + Mockito.when(esAdapter.doPost(Mockito.anyString(), Mockito.anyString(), Mockito.anyObject())) + .thenReturn(beforeScrollApiOpResult,afterScrollApiOpResult); + + esIndexCleaner = new ElasticSearchIndexCleaner(esAdapter, esRestEndpointConfig, esSchemaConfig); + + OperationState beforeOpState = esIndexCleaner.populatePreOperationCollection(); + OperationState afterOpState = esIndexCleaner.populatePostOperationCollection(); + + assertEquals(OperationState.OK, beforeOpState); + assertEquals(OperationState.OK, afterOpState); + + /* + * Now we can start the test work + */ + + OperationState cleanupState = esIndexCleaner.performCleanup(); + assertEquals(OperationState.OK, cleanupState); + + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/SyncControllerImplTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/SyncControllerImplTest.java new file mode 100644 index 0000000..a02d5e4 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/SyncControllerImplTest.java @@ -0,0 +1,81 @@ +package org.onap.aai.sparky.sync; + +import static org.junit.Assert.*; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.sparky.sync.IndexCleaner; +import org.onap.aai.sparky.sync.IndexSynchronizer; +import org.onap.aai.sparky.sync.IndexValidator; +import org.onap.aai.sparky.sync.SyncControllerImpl; +import org.onap.aai.sparky.sync.SyncControllerImpl.SyncActions; +import org.onap.aai.sparky.sync.config.SyncControllerConfig; +import org.onap.aai.sparky.sync.enumeration.SynchronizerState; + +public class SyncControllerImplTest { + + private SyncControllerConfig syncControllerConfig; + + private IndexSynchronizer mockSynchronizer = Mockito.mock(IndexSynchronizer.class); + private IndexValidator mockValidator = Mockito.mock(IndexValidator.class); + private IndexCleaner mockCleaner = Mockito.mock(IndexCleaner.class); + + @Before + public void init() throws Exception { + + syncControllerConfig = new SyncControllerConfig(); + + syncControllerConfig.setSyncTaskDelayInMs(0); + syncControllerConfig.setSyncTaskFrequencyInDays(2); + syncControllerConfig.setTargetSyncStartTimeStamp("05:00:00 UTC+00:00"); + syncControllerConfig.setControllerName("Base-Sync-Controller-Impl"); + + syncControllerConfig.setPeriodicSyncEnabled(true); + syncControllerConfig.setRunOnceSyncEnabled(true); + + } + + + @Test + public void validateBasicConstruction() throws Exception { + + SyncControllerImpl syncController = new SyncControllerImpl(syncControllerConfig); + + assertTrue(syncController.isPeriodicSyncEnabled()); + assertTrue(syncController.isRunOnceSyncEnabled()); + assertEquals(0, syncController.getDelayInMs()); + + } + + @Test + public void validateSmallSync() throws Exception { + + SyncControllerImpl syncController = new SyncControllerImpl(syncControllerConfig); + + Mockito.when( mockSynchronizer.getIndexName() ).thenReturn("mock-sync-index"); + Mockito.when( mockCleaner.getIndexName()).thenReturn("mock-sync-index"); + Mockito.when( mockValidator.getIndexName()).thenReturn("mock-sync-index"); + + Mockito.when(mockSynchronizer.getStatReport(Boolean.TRUE)).thenReturn("mock-sync-index stat report"); + Mockito.when(mockValidator.exists()).thenReturn(false); + Mockito.when(mockSynchronizer.getState()).thenReturn(SynchronizerState.PERFORMING_SYNCHRONIZATION, + SynchronizerState.PERFORMING_SYNCHRONIZATION, SynchronizerState.PERFORMING_SYNCHRONIZATION, + SynchronizerState.PERFORMING_SYNCHRONIZATION, SynchronizerState.PERFORMING_SYNCHRONIZATION, + SynchronizerState.IDLE); + + syncController.registerEntitySynchronizer(mockSynchronizer); + syncController.registerIndexValidator(mockValidator); + syncController.registerIndexCleaner(mockCleaner); + + + + + syncController.performAction(SyncActions.SYNCHRONIZE); + + + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchEndpointConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchEndpointConfigTest.java new file mode 100644 index 0000000..35dd0bd --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchEndpointConfigTest.java @@ -0,0 +1,39 @@ +package org.onap.aai.sparky.sync.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + + + + +import org.junit.Before; +import org.junit.Test; + + +public class ElasticSearchEndpointConfigTest { + + private ElasticSearchEndpointConfig elasticSearchEndpointConfig; + + @Before + public void init() throws Exception { + elasticSearchEndpointConfig = new ElasticSearchEndpointConfig(); + + } + + + @Test + public void updateValues() { + + elasticSearchEndpointConfig.setEsIpAddress("10.247.25.26"); + assertNotNull(elasticSearchEndpointConfig.getEsIpAddress()); + elasticSearchEndpointConfig.setEsServerPort("6585"); + assertNotNull(elasticSearchEndpointConfig.getEsServerPort()); + elasticSearchEndpointConfig.setScrollContextTimeToLiveInMinutes(3); + assertEquals(3,elasticSearchEndpointConfig.getScrollContextTimeToLiveInMinutes()); + elasticSearchEndpointConfig.setScrollContextBatchRequestSize(3); + assertEquals(3,elasticSearchEndpointConfig.getScrollContextBatchRequestSize()); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchSchemaConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchSchemaConfigTest.java new file mode 100644 index 0000000..88e96b0 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchSchemaConfigTest.java @@ -0,0 +1,47 @@ +package org.onap.aai.sparky.sync.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import org.junit.Before; +import org.junit.Test; + +public class ElasticSearchSchemaConfigTest { + +private ElasticSearchSchemaConfig elasticSchemaConfig; + + @Before + public void init() throws Exception { + elasticSchemaConfig = new ElasticSearchSchemaConfig(); + + } + + + @Test + public void updateValues() { + + elasticSchemaConfig.setIndexName("entitysearchindex-localhost"); + assertNotNull(elasticSchemaConfig.getIndexName()); + elasticSchemaConfig.setIndexDocType("default"); + assertNotNull(elasticSchemaConfig.getIndexDocType()); + elasticSchemaConfig.setIndexSettingsFileName("/etc/es_settings.json"); + assertNotNull(elasticSchemaConfig.getIndexSettingsFileName()); + elasticSchemaConfig.setIndexMappingsFileName("/etc/es_mappings.json"); + assertNotNull(elasticSchemaConfig.getIndexMappingsFileName()); + assertNotNull(elasticSchemaConfig.toString()); + elasticSchemaConfig.setIndexName(null); + assertNull(elasticSchemaConfig.getIndexName()); + elasticSchemaConfig.setIndexDocType(null); + assertNull(elasticSchemaConfig.getIndexDocType()); + elasticSchemaConfig.setIndexSettingsFileName(null); + assertNull(elasticSchemaConfig.getIndexSettingsFileName()); + elasticSchemaConfig.setIndexMappingsFileName(null); + assertNull(elasticSchemaConfig.getIndexMappingsFileName()); + assertNotNull(elasticSchemaConfig.toString()); + + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/NetworkStatisticsConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/NetworkStatisticsConfigTest.java new file mode 100644 index 0000000..4e97c6d --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/NetworkStatisticsConfigTest.java @@ -0,0 +1,74 @@ +package org.onap.aai.sparky.sync.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + + +import org.junit.Before; +import org.junit.Test; + +public class NetworkStatisticsConfigTest { + + private NetworkStatisticsConfig networkStatsConfig; + + @Before + public void init() throws Exception { + networkStatsConfig = new NetworkStatisticsConfig(); + + } + + + @Test + public void updateValues() { + + + + networkStatsConfig.setNumSamplesPerThreadForRunningAverage(300); + assertEquals(300,networkStatsConfig.getNumSamplesPerThreadForRunningAverage()); + networkStatsConfig.setBytesHistogramMaxYAxis(25000); + assertEquals(25000,networkStatsConfig.getBytesHistogramMaxYAxis()); + networkStatsConfig.setBytesHistogramLabel("[Response Size In Bytes]"); + assertNotNull(networkStatsConfig.getBytesHistogramLabel()); + networkStatsConfig.setQueueLengthHistogramLabel("[Queue Item Length]"); + assertNotNull(networkStatsConfig.getQueueLengthHistogramLabel()); + networkStatsConfig.setTaskAgeHistogramLabel("[Task Age In Ms]"); + assertNotNull(networkStatsConfig.getTaskAgeHistogramLabel()); + networkStatsConfig.setResponseTimeHistogramLabel("[Response Time In Ms]"); + assertNotNull(networkStatsConfig.getResponseTimeHistogramLabel()); + networkStatsConfig.setBytesHistogramNumBins(30); + assertEquals(30,networkStatsConfig.getBytesHistogramNumBins()); + networkStatsConfig.setBytesHistogramNumDecimalPoints(5); + assertEquals(5,networkStatsConfig.getBytesHistogramNumDecimalPoints()); + networkStatsConfig.setQueueLengthHistogramMaxYAxis(30000); + assertEquals(30000,networkStatsConfig.getQueueLengthHistogramMaxYAxis()); + networkStatsConfig.setQueueLengthHistogramNumBins(25); + assertEquals(25,networkStatsConfig.getQueueLengthHistogramNumBins()); + networkStatsConfig.setQueueLengthHistogramNumDecimalPoints(3); + assertEquals(3,networkStatsConfig.getQueueLengthHistogramNumDecimalPoints()); + networkStatsConfig.setTaskAgeHistogramMaxYAxis(2500000); + assertEquals(2500000,networkStatsConfig.getTaskAgeHistogramMaxYAxis()); + networkStatsConfig.setTaskAgeHistogramNumBins(3); + assertEquals(3,networkStatsConfig.getTaskAgeHistogramNumBins()); + networkStatsConfig.setTaskAgeHistogramNumDecimalPoints(25); + assertEquals(25,networkStatsConfig.getTaskAgeHistogramNumDecimalPoints()); + networkStatsConfig.setTpsHistogramLabel("[Transactions Per Second]"); + assertNotNull(networkStatsConfig.getTpsHistogramLabel()); + networkStatsConfig.setResponseTimeHistogramMaxYAxis(3); + assertEquals(3,networkStatsConfig.getResponseTimeHistogramMaxYAxis()); + networkStatsConfig.setResponseTimeHistogramNumBins(25); + assertEquals(25,networkStatsConfig.getResponseTimeHistogramNumBins()); + networkStatsConfig.setResponseTimeHistogramNumDecimalPoints(3); + assertEquals(3,networkStatsConfig.getResponseTimeHistogramNumDecimalPoints()); + networkStatsConfig.setTpsHistogramMaxYAxis(25); + assertEquals(25,networkStatsConfig.getTpsHistogramMaxYAxis()); + networkStatsConfig.setTpsHistogramNumBins(3); + assertEquals(3,networkStatsConfig.getTpsHistogramNumBins()); + networkStatsConfig.setTpsHistogramNumDecimalPoints(25); + assertEquals(25,networkStatsConfig.getTpsHistogramNumDecimalPoints()); + + + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/SyncControllerConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/SyncControllerConfigTest.java new file mode 100644 index 0000000..5aa4650 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/SyncControllerConfigTest.java @@ -0,0 +1,64 @@ +package org.onap.aai.sparky.sync.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + + +import org.junit.Before; +import org.junit.Test; + + +public class SyncControllerConfigTest { + + private SyncControllerConfig syncControllerConfig; + + @Before + public void init() throws Exception { + syncControllerConfig = new SyncControllerConfig(); + + + } + + + @Test + public void updateValues() { + + + + + + syncControllerConfig.setNumInternalSyncWorkers(3); + assertEquals(3,syncControllerConfig.getNumInternalSyncWorkers()); + syncControllerConfig.setNumSyncElasticWorkers(5); + assertEquals(5,syncControllerConfig.getNumSyncElasticWorkers()); + syncControllerConfig.setNumSyncActiveInventoryWorkers(6); + assertEquals(6,syncControllerConfig.getNumSyncActiveInventoryWorkers()); + syncControllerConfig.setTargetSyncStartTimeStamp("05:00:00 UTC+00:00"); + assertNotNull(syncControllerConfig.getTargetSyncStartTimeStamp()); + syncControllerConfig.setControllerName("Historical-Entity-Sync-Controller"); + assertNotNull(syncControllerConfig.getControllerName()); + syncControllerConfig.setEnabled(true); + assertTrue(syncControllerConfig.isEnabled()); + syncControllerConfig.setSyncTaskDelayInMs(8); + assertEquals(8,syncControllerConfig.getSyncTaskDelayInMs()); + syncControllerConfig.setSyncTaskFrequencyInDays(3); + assertEquals(3,syncControllerConfig.getSyncTaskFrequencyInDays()); + syncControllerConfig.setNumSyncControllerWorkers(25); + assertEquals(25,syncControllerConfig.getNumSyncControllerWorkers()); + syncControllerConfig.setRunOnceSyncEnabled(true); + assertTrue(syncControllerConfig.isRunOnceSyncEnabled()); + syncControllerConfig.setPeriodicSyncEnabled(true); + assertTrue(syncControllerConfig.isPeriodicSyncEnabled()); + assertNotNull(syncControllerConfig.getSyncFrequencyInMs()); + assertNotNull(syncControllerConfig.getTargetSyncTime()); + assertNotNull(syncControllerConfig.getNextSyncTime()); + syncControllerConfig.setTimeZoneOfSyncStartTimeStamp("UTC+00:00"); + assertNotNull(syncControllerConfig.getTimeZoneOfSyncStartTimeStamp()); + + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/AsyncRateControlTester.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/AsyncRateControlTester.java new file mode 100644 index 0000000..00bec1e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/AsyncRateControlTester.java @@ -0,0 +1,242 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.synchronizer; + +import java.util.concurrent.atomic.AtomicInteger; + +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +/** + * The Class AsyncRateControlTester. + */ +public class AsyncRateControlTester { + + private static Logger logger = LoggerFactory.getLogger(AsyncRateControlTester.class); + + private long startTimeInMs; + + private AtomicInteger counter; + + protected boolean syncInProgress; + + /** + * Instantiates a new async rate control tester. + * + * @throws Exception the exception + */ + public AsyncRateControlTester() throws Exception { + + NetworkStatisticsConfig tpc = new NetworkStatisticsConfig(); + + tpc.setNumSamplesPerThreadForRunningAverage(100); + + tpc.setBytesHistogramLabel("bytesHistoLabel"); + tpc.setBytesHistogramMaxYAxis(1000000); + tpc.setBytesHistogramNumBins(20); + tpc.setBytesHistogramNumDecimalPoints(2); + + tpc.setQueueLengthHistogramLabel("queueHistoLabel"); + tpc.setQueueLengthHistogramMaxYAxis(1000000); + tpc.setQueueLengthHistogramNumBins(20); + tpc.setQueueLengthHistogramNumDecimalPoints(2); + + // ZeroDelayProcessor zdp = new ZeroDelayProcessor(LinkProcessorType.AAI, tpc); + // zdp.setStatCollector(this.aaiStatCollector); + /* + * zdp.setTaskProcessorConfig(tpc); + * + * this.resolver.registerProcessor(zdp); this.resolver.registerEventListener(this); this.counter + * = new AtomicInteger(0); this.syncInProgress = false; } + * + * @Override public void handleEvent(AsyncEvent event) { + * + * if(event.getEventType() == AsyncEventType.RESOLVER_IDLE) { + * + * if(syncInProgress) { long duration = System.currentTimeMillis() - startTimeInMs; + * System.out.println(getStatReport(duration)); syncInProgress = false; } + * + * // shutdown(); } else if(event.getEventType() == AsyncEventType.TRANSACTION_PROCESSED) { + * + * this.syncInProgress = true; + * + * ExternalResource resource = (ExternalResource)event.getPayload(); + * + * //aaiStatCollector.updateCounters(resource); + * + * counter.incrementAndGet(); + * + * } + * + * }; + * + * public void shutdown() { resolver.shutdown(); } + * + * private int getCounterValue(AtomicInteger counter) { + * + * if(counter == null) { return 0; } + * + * return counter.get(); } + * + * private void addActiveInventoryStatReport(StringBuilder sb) { + * + * if(sb == null) { return; } + * + * sb.append("\n\n ").append(LinkProcessorType.AAI.name()); + * + * sb.append("\n\n ").append("REST Operational Stats:"); + * + * /* Map<String, AtomicInteger> procOperationalCounters = + * aaiStatCollector.getActiveInventoryOperationalCounters(); + * + * if(procOperationalCounters != null) { + * + * int _1XX = + * getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.GET_1XX)); int _2XX + * = getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.GET_2XX)); int + * _3XX = getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.GET_3XX)); + * int _4XX = + * getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.GET_4XX)); int _5XX + * = getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.GET_5XX)); int + * _6XX = getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.GET_6XX)); + * + * sb.append("\n ").append(String.format( + * "%-12s 1XX: %-12d 2XX: %-12d 3XX: %-12d 4XX: %-12d 5XX: %-12d 6XX: %-12d ", HttpMethod.GET, + * _1XX, _2XX, _3XX, _4XX, _5XX, _6XX)); } + */ + + // sb.append("\n\n ").append("Entity Stats:"); + + /* + * sort entities, then sort nested op codes + */ + + /* + * TreeMap<String, HashMap<String, AtomicInteger>> activeInventoryEntitySortedTreeMap = new + * TreeMap<String, HashMap<String, AtomicInteger>>( new Comparator<String>() { + * + * public int compare(String o1, String o2) { return + * o1.toLowerCase().compareTo(o2.toLowerCase()); } }); + */ + + /* + * activeInventoryEntitySortedTreeMap.putAll(aaiStatCollector.getActiveInventoryEntityCounters() + * ); + * + * for(String counterEntityKey : activeInventoryEntitySortedTreeMap.keySet()) { + * + * HashMap<String, AtomicInteger> entityCounters = + * activeInventoryEntitySortedTreeMap.get(counterEntityKey); + * + * AtomicInteger total = entityCounters.get(ActiveInventoryStatCollector.TOTAL); AtomicInteger + * found = entityCounters.get(ActiveInventoryStatCollector.FOUND); AtomicInteger notFound = + * entityCounters.get(ActiveInventoryStatCollector.NOT_FOUND); AtomicInteger error = + * entityCounters.get(ActiveInventoryStatCollector.ERROR); + * + * int totalValue = (total == null) ? 0 : total.get(); int foundValue = (found == null) ? 0 : + * found.get(); int notFoundValue = (found == null) ? 0 : notFound.get(); int errorValue = + * (error == null) ? 0 : error.get(); + * + * sb.append("\n ").append(String.format( + * "%-30s TOTAL: %-12d FOUND: %-12d NOT_FOUND: %-12d ERROR: %-12d", counterEntityKey, + * totalValue, foundValue, notFoundValue, errorValue)); + * + * } + */ + + // sb.append("\n\n ").append("Task Processor Stats:"); + + // int totalRetries = + // getCounterValue(procOperationalCounters.get(ActiveInventoryStatCollector.NUM_RETRIES)); + // int currentQueueLength = resolver.getCurrentQueueLength(LinkProcessorType.AAI.name()); + + /* + * sb.append("\n " + * ).append(resolver.getProcessorTaskAgeStats(LinkProcessorType.AAI.name(), false, " " + * )); sb.append("\n " + * ).append(resolver.getProcessorResponseStats(LinkProcessorType.AAI.name(), false, " " + * )); sb.append("\n") + * .append(resolver.getQueueItemLengthHistogram(LinkProcessorType.AAI.name(), false, + * " ")); sb.append("\n") + * .append(resolver.getResponseByteSizeHistogram(LinkProcessorType.AAI.name(), false, + * " ")); sb.append("\n " + * ).append("TPS=").append(resolver.getTPS(LinkProcessorType.AAI.name())).append(", NumRetries=" + * ).append(totalRetries) .append(", CurrentQueueLength=").append(currentQueueLength); + */ + /* + * } + * + * private String getStatReport(long syncOpTimeInMs) { + * + * StringBuilder sb = new StringBuilder(128); + * + * sb.append("\n").append("Async Resolver Statistics: ( Sync Operation Duration = " + + * NodeUtils.getDurationBreakdown(syncOpTimeInMs) + " )"); + * + * addActiveInventoryStatReport(sb); + * + * return sb.toString(); + * + * } + * + * public void loadResolver(int numItems) { + * + * if(numItems <= 0) { return; } + * + * startTimeInMs = System.currentTimeMillis(); + * + * DummyPerformanceTask dpt = null; + * + * for(int i = 0; i < numItems; i++) { + * + * dpt = new DummyPerformanceTask(); dpt.setLinkProcessorType(LinkProcessorType.AAI); + * dpt.setResourceEntityType("DummyPerformanceEntity"); dpt.setOperationType(HttpMethod.GET); + * + * resolver.resolve(dpt); + * + * } + * + * } + * + * public static void main(String[] args) throws Exception { + * + * System.getProperties().setProperty("AJSC_HOME", "x:\\aaiui\\"); + * + * System.out.println("Available processors = " + Runtime.getRuntime().availableProcessors()); + * + * AsyncRateControlTester arcTester = new AsyncRateControlTester(); + * + * // give us time to instrument the jvm with jvisualvm // Thread.sleep(30000); + * Thread.sleep(5000); + * + * arcTester.loadResolver(1000); + * + * + * } + */ + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/GizmoEntitySummarizer.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/GizmoEntitySummarizer.java new file mode 100644 index 0000000..5ea5280 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/GizmoEntitySummarizer.java @@ -0,0 +1,251 @@ +package org.onap.aai.sparky.synchronizer; + +import static java.util.concurrent.CompletableFuture.supplyAsync; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Map; +import java.util.Map.Entry; +import java.util.TreeMap; +import java.util.concurrent.CountDownLatch; +import java.util.concurrent.ExecutorService; +import java.util.function.Supplier; + +import org.onap.aai.cl.api.Logger; +import org.onap.aai.cl.eelf.LoggerFactory; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.restclient.enums.RestAuthenticationMode; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.dal.GizmoAdapter; +import org.onap.aai.sparky.dal.exception.ElasticSearchOperationException; +import org.onap.aai.sparky.dal.rest.RestClientConstructionException; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; +import org.onap.aai.sparky.logging.AaiUiMsgs; +import org.onap.aai.sparky.util.NodeUtils; +import org.onap.aai.sparky.util.OxmModelAndProcessorHelper; + +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.node.ArrayNode; + +public class GizmoEntitySummarizer { + + protected ObjectMapper mapper; + protected OxmModelLoader oxmModelLoader; + private static final Logger logger = LoggerFactory.getInstance().getLogger(GizmoEntitySummarizer.class); + protected ExecutorService gizmoExecutor; + protected GizmoAdapter gizmoAdapter; + protected OxmModelAndProcessorHelper oxmHelper; + + /* + * We need to add another concept to the OxmModelLoader which is to generate + * a list of entity containers from the OXM JaxbContext + */ + + public GizmoEntitySummarizer() + throws ElasticSearchOperationException, IOException, RestClientConstructionException { + + OxmModelAndProcessorHelper.API_VERSION_OVERRIDE = 11; + + this.gizmoExecutor = NodeUtils.createNamedExecutor("GIZMO-WORKER", 5, logger); + + oxmHelper = OxmModelAndProcessorHelper.getInstance(); + this.oxmModelLoader = oxmHelper.getModelLoader(); + + this.mapper = new ObjectMapper(); + + RestEndpointConfig gizmoConfig = new RestEndpointConfig(); + + gizmoConfig.setEndpointIpAddress("10.147.138.153"); + gizmoConfig.setEndpointServerPort("9520"); + gizmoConfig.setNumRequestRetries(5); + gizmoConfig.setRestAuthenticationMode(RestAuthenticationMode.SSL_CERT); + gizmoConfig.setConnectTimeoutInMs(60000); + gizmoConfig.setReadTimeoutInMs(30000); + gizmoConfig.setCertFileName("client-cert-onap.p12"); + gizmoConfig.setCertPassword("OBF:1y0q1uvc1uum1uvg1pil1pjl1uuq1uvk1uuu1y10"); + gizmoConfig.setTruststoreFileName("synchronizer.jks"); + gizmoConfig.setValidateServerCertChain(false); + gizmoConfig.setValidateServerHostname(false); + + gizmoAdapter = new GizmoAdapter(oxmModelLoader, gizmoConfig); + + gizmoAdapter.setInventoryBasePath("/services/inventory/v12/"); + gizmoAdapter.setRelationshipsBasePath("/services/inventory/relationships/v12/"); + + } + + private Map<String, Integer> getNumEntitiesPerType() { + + Collection<String> containerTypes = oxmHelper.getOxmEntityContainerLookup().getEntityContainers(); + Collection<String> links = new ArrayList<String>(); + Map<String, Integer> entityTypeCounts = new TreeMap<String, Integer>(); + + final CountDownLatch latch = new CountDownLatch(containerTypes.size()); + + for (String entityType : containerTypes) { + + supplyAsync(new Supplier<Void>() { + + @Override + public Void get() { + + OperationResult typeLinksResult = null; + try { + typeLinksResult = gizmoAdapter.queryGizmoWithRetries( + gizmoAdapter.getFullInventoryUrl(entityType), "application/json", 1); + + if (typeLinksResult != null) { + + if (typeLinksResult.wasSuccessful() && typeLinksResult.getResult() != null) { + + JsonNode rootNode = mapper.readValue(typeLinksResult.getResult(), JsonNode.class); + + if (rootNode.isArray()) { + ArrayNode arrayNode = (ArrayNode) rootNode; + entityTypeCounts.put(entityType, new Integer(arrayNode.size())); + } else { + entityTypeCounts.put(entityType, new Integer(-1)); + } + + } else { + // -1 + entityTypeCounts.put(entityType, new Integer(-1)); + } + + } + + } catch (Exception exc) { + entityTypeCounts.put(entityType, new Integer(-1)); + } + + return null; + } + + }, gizmoExecutor).whenComplete((result, error) -> { + + latch.countDown(); + + if (error != null) { + logger.error(AaiUiMsgs.ERROR_GENERIC, + "An error occurred getting data from AAI. Error = " + error.getMessage()); + } + + }); + + } + + // System.out.println("self links size = " + selflinks.size()); + + try { + latch.await(); + } catch (InterruptedException e) { + + } + + return entityTypeCounts; + } + + private Map<String, Integer> getNumRelationshipsPerType() { + + Map<String, Integer> entityTypeCounts = new TreeMap<String, Integer>(); + + final CountDownLatch latch = new CountDownLatch(1); + + supplyAsync(new Supplier<Void>() { + + @Override + public Void get() { + + OperationResult typeLinksResult = null; + try { + typeLinksResult = gizmoAdapter.queryGizmoWithRetries(gizmoAdapter.getFullRelationshipUrl("has"), + "application/json", 1); + + if (typeLinksResult != null) { + + if (typeLinksResult.wasSuccessful() && typeLinksResult.getResult() != null) { + + JsonNode rootNode = mapper.readValue(typeLinksResult.getResult(), JsonNode.class); + + if (rootNode.isArray()) { + ArrayNode arrayNode = (ArrayNode) rootNode; + entityTypeCounts.put("has", new Integer(arrayNode.size())); + } else { + entityTypeCounts.put("has", new Integer(-1)); + } + + } else { + // -1 + entityTypeCounts.put("has", new Integer(-1)); + } + + } else { + entityTypeCounts.put("has", new Integer(-1)); + } + + } catch (Exception exc) { + entityTypeCounts.put("has", new Integer(-1)); + } + + return null; + } + + }, gizmoExecutor).whenComplete((result, error) -> { + + latch.countDown(); + + if (error != null) { + logger.error(AaiUiMsgs.ERROR_GENERIC, + "An error occurred getting data from AAI. Error = " + error.getMessage()); + } + + }); + + // System.out.println("self links size = " + selflinks.size()); + + try { + latch.await(); + } catch (InterruptedException e) { + + } + + return entityTypeCounts; + } + + public void shutdown() { + this.gizmoExecutor.shutdown(); + } + + public static void main(String[] args) + throws ElasticSearchOperationException, IOException, RestClientConstructionException { + + System.setProperty("CONFIG_HOME", "X:\\2018_dev\\OSEAAI\\gizmo_integration\\onap_sparky-be\\appconfig-local\\"); + GizmoEntitySummarizer gizmoSummarizer = new GizmoEntitySummarizer(); + + Map<String, Integer> entityCounts = gizmoSummarizer.getNumEntitiesPerType(); + Map<String, Integer> relationshipCounts = gizmoSummarizer.getNumRelationshipsPerType(); + gizmoSummarizer.shutdown(); + + System.out.println("Gizmo Entities:"); + + for (Entry<String, Integer> entry : entityCounts.entrySet()) { + String key = entry.getKey(); + Integer value = entry.getValue(); + + System.out.printf("\t%s : %d\n", key, value); + } + + System.out.println("\nGizmo Relationships:"); + + for (Entry<String, Integer> entry : relationshipCounts.entrySet()) { + String key = entry.getKey(); + Integer value = entry.getValue(); + + System.out.printf("\t%s : %d\n", key, value); + } + + } + +}
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexDocumentTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexDocumentTest.java new file mode 100644 index 0000000..0451ec5 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexDocumentTest.java @@ -0,0 +1,104 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.synchronizer; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.util.LogValidator; + +import ch.qos.logback.classic.Level; + + +/** + * The Class IndexDocumentTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class IndexDocumentTest { + + private LogValidator logValidator; + + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + logValidator = new LogValidator(); + logValidator.initializeLogger(Level.WARN); + } + + /** + * Validate basic construction. + * + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws IOException Signals that an I/O exception has occurred. + */ + @Test + public void validateBasicConstruction() throws NoSuchAlgorithmException, IOException { + + /* + * String testDate = "2016-12-21 00:00:00.00"; OxmEntityDescriptor d = new + * OxmEntityDescriptor(); d.setEntityName("service-instance"); + * d.setPrimaryKeyAttributeName(Arrays.asList("service-instance-id")); + * d.setSearchableAttributes(Arrays.asList("service-instance-id")); + * + * Mockito.when(oxmModelLoader.getEntityDescriptor(anyString())).thenReturn(d); + * + * SearchableEntity id1 = new SearchableEntity(oxmModelLoader); + * + * id1.setEntityType("service-instance"); id1.setEntityPrimaryKeyValue("DUP2"); + * id1.addSearchTagWithIdx("DUP2", String.valueOf(1)); + * + * id1.deriveFields(); id1.setEntityTimeStamp(testDate); ObjectMapper mapper = new + * ObjectMapper(); + * + * String objStr = id1.getIndexDocumentJson(); + * + * JsonNode indexDocNode = mapper.readTree(objStr); + * + * /// + * + * ObjectNode expectedNode = mapper.createObjectNode(); expectedNode.put("entityType", + * "service-instance"); expectedNode.put("entityPrimaryKeyValue", "DUP2"); + * expectedNode.put("searchTagIDs", "1"); expectedNode.put("searchTags", "DUP2"); + * expectedNode.put("crossEntityReferenceValues", ""); expectedNode.put("lastmodTimestamp", + * testDate); + * + * assertTrue(NodeUtils.isEqual(expectedNode, indexDocNode)); // Test if the timestamp is + * calculated when the node is being created + * assertTrue(NodeUtils.getNodeFieldAsText(indexDocNode, "lastmodTimestamp") != null); + */ + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexableCrossEntityReferenceTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexableCrossEntityReferenceTest.java new file mode 100644 index 0000000..a7c34d0 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexableCrossEntityReferenceTest.java @@ -0,0 +1,72 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.synchronizer; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.sync.entity.IndexableCrossEntityReference; + +public class IndexableCrossEntityReferenceTest { + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + + } + + /** + * Validate basic construction. + * + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws IOException Signals that an I/O exception has occurred. + */ + @Test + public void validateBasicConstruction() throws NoSuchAlgorithmException, IOException { + + IndexableCrossEntityReference icer = new IndexableCrossEntityReference(); + + icer.setId("MyId"); + icer.setEntityType("Scott"); + icer.setEntityPrimaryKeyValue("woot"); + icer.setLink("me.link.yeeeeeaahhhh"); + + icer.addCrossEntityReferenceValue("meow"); + icer.addCrossEntityReferenceValue("kitty-goes"); + icer.addCrossEntityReferenceValue("kitty-goes-meow"); + + icer.deriveFields(); + + System.out.println(icer.getAsJson()); + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerBuilder.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerBuilder.java new file mode 100644 index 0000000..84d7fd2 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerBuilder.java @@ -0,0 +1,512 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.synchronizer; + +/** + * The Class SyncControllerBuilder. + */ +public class SyncControllerBuilder { + + + /* + * We'll have to revisit this class, as the sync controllers are wired up pretty differently now + */ + + /** + * Test elastic search update api. + */ +/* public void testElasticSearchUpdateApi() { + try { + + RestClientBuilder clientBuilder = new RestClientBuilder(); + clientBuilder.setUseHttps(false); + + RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder); + + ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig(); + ElasticSearchDataProvider elasticSearchDataProvider = + new ElasticSearchAdapter(nonCachingRestProvider, esConfig); + + String payload = + "{ \"entityType\": \"complex\", \"pkey\": \"MORRISTOWN0075\", \"location\": { \"lat\": \"40.793414\", \"lon\": \"-74.480432\" }, \"selfLink\": \"https://aai-int1.test.att.com:8443/aai/v8/cloud-infrastructure/complexes/complex/MORRISTOWN0075?nodes-only\" }\n"; + + String updateRequest = elasticSearchDataProvider.buildBulkImportOperationRequest( + "topographysearchindex-localhost", "default", + "1e2a6ba9e09d5e1bcb016b3a0b8d50273b42828e47957bd2a2f3ce1854744f5f", "6", payload); + + OperationResult or = + elasticSearchDataProvider.doBulkOperation("http://localhost:9200/_bulk", updateRequest); + + System.out.println(or.toString()); + + /* + * String BULK_IMPORT_INDEX_TEMPLATE = + * "{\"index\":{\"_index\":\"%s\",\"_type\":\"%s\",\"_id\":\"%s\", \"_version\":\"%s\"}}\n"; + * + * StringBuilder updateRequestPayload = new StringBuilder(128); + * updateRequestPayload.append(String.format(BULK_IMPORT_INDEX_TEMPLATE, + * "topographysearchindex-localhost", "default", + * "1e2a6ba9e09d5e1bcb016b3a0b8d50273b42828e47957bd2a2f3ce1854744f5f", "5")); + * + * + * updateRequestPayload.append(payload); + * + * OperationResult or = nonCachingRestProvider.doRestfulOperation(HttpMethod.PUT, + * "http://localhost:9200/_bulk", updateRequestPayload.toString(), + * RestfulDataAccessor.APPLICATION_X_WWW_FORM_URL_ENCODED, + * RestfulDataAccessor.APPLICATION_JSON); + */ + + +/* + } catch (Exception exc) { + exc.printStackTrace(); + System.out.println("Error: failed to sync with message = " + exc.getMessage()); + } + } + + /** + * Do historical entity sync. + *//* + public void doHistoricalEntitySync() { + try { + SyncController syncController = new SyncControllerImpl("historicalEntityTestController"); + + ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + + RestClientBuilder clientBuilder = new RestClientBuilder(); + clientBuilder.setUseHttps(false); + + RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder); + + ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig(); + + ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig); + + + IndexIntegrityValidator entityCounterHistoryValidator = + new IndexIntegrityValidator(nonCachingRestProvider, esConfig.getEntityCountHistoryIndex(), + esConfig.getType(), esConfig.getIpAddress(), esConfig.getHttpPort(), + esConfig.buildElasticSearchEntityCountHistoryTableConfig()); + + syncController.registerIndexValidator(entityCounterHistoryValidator); + + + ////// + + + + HistoricalEntitySummarizer historicalSummarizer = + new HistoricalEntitySummarizer(esConfig.getEntityCountHistoryIndex()); + historicalSummarizer.setAaiDataProvider(aaiAdapter); + historicalSummarizer.setEsDataProvider(esAdapter); + syncController.registerEntitySynchronizer(historicalSummarizer); + + //// + + /* + * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new + * RestClientBuilder()); + * + * entitySearchIndexValidator.setIndexName("topographysearchindex-localhost"); + * entitySearchIndexValidator.setIndexType("default"); + * entitySearchIndexValidator.setIndexSettings(""); + * entitySearchIndexValidator.setIndexSettings(""); + * + * syncController.registerIndexValidator(entitySearchIndexValidator); + */ + + //// + + /* + * IndexCleaner index1Cleaner = new ElasticSearchIndexCleaner(nonCachingRestProvider, + * "topographysearchindex-localhost", "default", "127.0.0.1", "9200", 5, 5000); + */ + + // syncController.registerIndexCleaner(index1Cleaner); + + /// +/* + for (int x = 0; x < 10; x++) { + + syncController.performAction(SyncActions.SYNCHRONIZE); + + while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) { + + System.out.println("sync controller state = " + syncController.getState()); + + Thread.sleep(1000); + } + } + + syncController.shutdown(); + + } catch (Exception exc) { + exc.printStackTrace(); + System.out.println("Error: failed to sync with message = " + exc.getMessage()); + } + } + + /** + * Do geo entity sync. + *//* + public void doGeoEntitySync() { + try { + + ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + + RestClientBuilder clientBuilder = new RestClientBuilder(); + clientBuilder.setUseHttps(false); + + RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder); + ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig(); + + ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig); + + IndexIntegrityValidator entitySearchIndexValidator = + new IndexIntegrityValidator(nonCachingRestProvider, esConfig.getIndexName(), + esConfig.getType(), esConfig.getIpAddress(), esConfig.getHttpPort(), + esConfig.buildElasticSearchTableConfig()); + + SyncController syncController = new SyncControllerImpl("geoEntitySyncTestController"); + syncController.registerIndexValidator(entitySearchIndexValidator); + + + ////// + + GeoSynchronizer geoSync = new GeoSynchronizer("topographysearchindex-localhost"); + geoSync.setAaiDataProvider(aaiAdapter); + geoSync.setEsDataProvider(esAdapter); + syncController.registerEntitySynchronizer(geoSync); + + //// + + /* + * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new + * RestClientBuilder()); + * + * entitySearchIndexValidator.setIndexName("topographysearchindex-localhost"); + * entitySearchIndexValidator.setIndexType("default"); + * entitySearchIndexValidator.setIndexSettings(""); + * entitySearchIndexValidator.setIndexSettings(""); + * + * syncController.registerIndexValidator(entitySearchIndexValidator); + */ + + //// + + /* + * IndexCleaner index1Cleaner = new ElasticSearchIndexCleaner(nonCachingRestProvider, + * "topographysearchindex-localhost", "default", "127.0.0.1", "9200", 5, 5000); + */ + + // syncController.registerIndexCleaner(index1Cleaner); + + /// +/* + syncController.performAction(SyncActions.SYNCHRONIZE); + + while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) { + Thread.sleep(1000); + } + + syncController.shutdown(); + + } catch (Exception exc) { + exc.printStackTrace(); + System.out.println("Error: failed to sync with message = " + exc.getMessage()); + } + } + + /** + * Do searchable entitysync. + *//* + public void doSearchableEntitysync() { + try { + + + ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + + RestClientBuilder clientBuilder = new RestClientBuilder(); + clientBuilder.setUseHttps(false); + + RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder); + ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig(); + + ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig); + + ////// + + SyncController syncController = new SyncControllerImpl("searchtableEntityTestController"); + + ViewInspectEntitySynchronizer ses = + new ViewInspectEntitySynchronizer("entitysearchindex-localhost"); + ses.setAaiDataProvider(aaiAdapter); + ses.setEsDataProvider(esAdapter); + syncController.registerEntitySynchronizer(ses); + + //// + + /* + * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new + * RestClientBuilder()); + * + * entitySearchIndexValidator.setIndexName("esi-sync2-localhost"); + * entitySearchIndexValidator.setIndexType("default"); + * + * syncController.registerIndexValidator(entitySearchIndexValidator); + */ + + //// + + /* + * IndexCleaner index1Cleaner = new ElasticSearchIndexCleaner(nonCachingRestProvider, + * "entitysearchindex-localhost", "default", "127.0.0.1", "9200", 5, 5000); + * + * syncController.registerIndexCleaner(index1Cleaner); + */ + + /// +/* + syncController.performAction(SyncActions.SYNCHRONIZE); + + while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) { + Thread.sleep(1000); + } + + syncController.shutdown(); + + } catch (Exception exc) { + exc.printStackTrace(); + System.out.println("Error: failed to sync with message = " + exc.getMessage()); + } + } + + /** + * Do cross entity reference sync. + *//* + public void doCrossEntityReferenceSync() { + try { + + ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + + RestClientBuilder clientBuilder = new RestClientBuilder(); + clientBuilder.setUseHttps(false); + + RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder); + ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig(); + + ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider,esConfig); + + SyncController syncController = new SyncControllerImpl("crossEntityRefSyncController"); + + CrossEntityReferenceSynchronizer cers = + new CrossEntityReferenceSynchronizer("entitysearchindex-localhost", ActiveInventoryConfig.getConfig()); + cers.setAaiDataProvider(aaiAdapter); + cers.setEsDataProvider(esAdapter); + syncController.registerEntitySynchronizer(cers); + + ViewInspectEntitySynchronizer ses = + new ViewInspectEntitySynchronizer("entitysearchindex-localhost"); + ses.setAaiDataProvider(aaiAdapter); + ses.setEsDataProvider(esAdapter); + syncController.registerEntitySynchronizer(ses); + + ElasticSearchConfig config = ElasticSearchConfig.getConfig(); + + IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator( + nonCachingRestProvider, config.getIndexName(), config.getType(), config.getIpAddress(), + config.getHttpPort(), config.buildElasticSearchTableConfig()); + + syncController.registerIndexValidator(entitySearchIndexValidator); + + //// + + IndexCleaner index1Cleaner = + new ElasticSearchIndexCleaner(nonCachingRestProvider, config.getIndexName(), + config.getType(), config.getIpAddress(), config.getHttpPort(), 5, 5000); + + syncController.registerIndexCleaner(index1Cleaner); + + /// + + syncController.performAction(SyncActions.SYNCHRONIZE); + + while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) { + Thread.sleep(1000); + } + + syncController.shutdown(); + + } catch (Exception exc) { + exc.printStackTrace(); + System.out.println("Error: Failed to sync with message = " + exc.getMessage()); + } + } + + /** + * Do suggestion entitysync. + *//* + public void doSuggestionEntitySync() { + try { + ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + + RestClientBuilder clientBuilder = new RestClientBuilder(); + clientBuilder.setUseHttps(false); + + RestfulDataAccessor nonCachingRestProvider = new RestfulDataAccessor(clientBuilder); + ElasticSearchConfig esConfig = ElasticSearchConfig.getConfig(); + + ElasticSearchAdapter esAdapter = new ElasticSearchAdapter(nonCachingRestProvider, esConfig); + + SyncController syncController = new SyncControllerImpl("suggestionEntityTestController"); + + AutosuggestionSynchronizer ses = + new AutosuggestionSynchronizer("entityautosuggestindex-localhost"); + ses.setAaiDataProvider(aaiAdapter); + ses.setEsDataProvider(esAdapter); + syncController.registerEntitySynchronizer(ses); + + syncController.performAction(SyncActions.SYNCHRONIZE); + + while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) { + Thread.sleep(1000); + } + + syncController.shutdown(); + + } catch (Exception exc) { + exc.printStackTrace(); + System.out.println("Error: failed to sync with message = " + exc.getMessage()); + } + } + + /* + * Do no op sync. + *//* + public void doNoOpSync() { + try { + SyncController syncController = new SyncControllerImpl("noopSyncTestController"); + + /* + * ActiveInventoryAdapter aaiAdapter = new ActiveInventoryAdapter(new RestClientBuilder()); + * + * aaiAdapter.setCacheEnabled(true); + * + * /*InMemoryEntityCache aaiInMemoryCache = new InMemoryEntityCache(); + * aaiAdapter.setEntityCache(aaiInMemoryCache); + */ + + /* + * PersistentEntityCache aaiDiskCache = new PersistentEntityCache(); + * aaiAdapter.setEntityCache(aaiDiskCache); + * + * ElasticSearchConfig config = ElasticSearchConfig.getConfig(); OXMModelLoader loader = + * OXMModelLoader.getInstance(); SyncAdapter syncAdapter = new SyncAdapter(new + * RestClientBuilder(), config, loader); + * + * ////// + * + * SearchableEntitySynchronizer ses = new SearchableEntitySynchronizer(); + * ses.setAaiDataProvider(aaiAdapter); ses.setEsDataProvider(syncAdapter); + * syncController.registerEntitySynchronizer(ses); + * + * //// + * + * IndexIntegrityValidator entitySearchIndexValidator = new IndexIntegrityValidator(new + * RestClientBuilder()); + * + * entitySearchIndexValidator.setIndexName("esi-sync2-localhost"); + * entitySearchIndexValidator.setIndexType("default"); + * entitySearchIndexValidator.setIndexSettings(""); + * entitySearchIndexValidator.setIndexSettings(""); + * + * syncController.registerIndexValidator(entitySearchIndexValidator); + * + * //// + * + * ElasticSearchEntityPurger p1 = new ElasticSearchEntityPurger(new RestClientBuilder()); + * p1.setIndexName("esi-blal-blah"); + * + * ElasticSearchEntityPurger p2 = new ElasticSearchEntityPurger(new RestClientBuilder()); + * p2.setIndexName("esi-topo-blah"); + */ + /// +/* + syncController.performAction(SyncActions.SYNCHRONIZE); + + while (syncController.getState() == SynchronizerState.PERFORMING_SYNCHRONIZATION) { + Thread.sleep(1000); + } + + syncController.shutdown(); + + } catch (Exception exc) { + System.out.println("Error: failed to sync with message = " + exc.getMessage()); + } + } + + + /** + * The main method. + * + * @param args the arguments + *//* + public static void main(String[] args) { + //boolean runSearchableEntitySync = false; + //boolean runGeoEntitySync = true; + + //System.setProperty("AJSC_HOME", "e:\\dev"); + // System.getProperties().setProperty("AJSC_HOME", + // "c:\\rpo\\tier-support-ui\\target\\swm\\package\\nix\\" + // + "dist_files\\opt\\app\\ajsc-tier-support-ui"); + + System.setProperty("CONFIG_HOME", "appconfig-local"); + System.setProperty("AJSC_HOME", "x:\\1710_extensibility\\"); + + SyncControllerBuilder syncBuilder = new SyncControllerBuilder(); + + /* + * if (runSearchableEntitySync) syncBuilder.doSearchableEntitysync(); + */ +/* + syncBuilder.doSearchableEntitysync(); + // syncBuilder.doCrossEntityReferenceSync(); + // syncBuilder.doHistoricalEntitySync(); + // syncBuilder.doGeoEntitySync(); + //syncBuilder.doSuggestionEntitySync(); + //syncBuilder.doMasterEntitySync(); + + // syncBuilder.testElasticSearchUpdateAPI(); + + /* + * if (runGeoEntitySync) { syncBuilder.doGeoEntitySync(); } + */ + + + + //} +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerServiceTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerServiceTest.java new file mode 100644 index 0000000..d4d62ba --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerServiceTest.java @@ -0,0 +1,34 @@ +package org.onap.aai.sparky.synchronizer; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.sync.SyncControllerRegistry; +import org.onap.aai.sparky.sync.SyncControllerService; + +public class SyncControllerServiceTest { + + private TestSyncController alpha; + private SyncControllerService syncService; + private SyncControllerRegistry syncControllerRegistry; + + @Before + public void init() { + alpha = new TestSyncController("alpha"); + syncControllerRegistry = new SyncControllerRegistry(); + syncService = new SyncControllerService(syncControllerRegistry, 5,5); + + } + + @Test + public void validateControllerRegistration() { + + syncControllerRegistry.registerSyncController( alpha ); + + syncService.startSync(); + + syncService.shutdown(); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/TestSyncController.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/TestSyncController.java new file mode 100644 index 0000000..c61f78b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/TestSyncController.java @@ -0,0 +1,177 @@ +package org.onap.aai.sparky.synchronizer; + +import java.util.Calendar; +import java.util.Date; +import java.util.concurrent.Semaphore; + +import org.onap.aai.sparky.sync.IndexCleaner; +import org.onap.aai.sparky.sync.IndexSynchronizer; +import org.onap.aai.sparky.sync.IndexValidator; +import org.onap.aai.sparky.sync.SyncController; +import org.onap.aai.sparky.sync.SyncControllerImpl.SyncActions; +import org.onap.aai.sparky.sync.enumeration.OperationState; +import org.onap.aai.sparky.sync.enumeration.SynchronizerState; + +public class TestSyncController implements SyncController { + + private String controllerName; + private boolean periodic; + private SynchronizerState internalState; + private Semaphore gate; + + public TestSyncController(String name) { + this.controllerName = name; + this.internalState = SynchronizerState.IDLE; + this.gate = new Semaphore(1); + } + + + @Override + public String getControllerName() { + return this.controllerName; + } + + @Override + public OperationState performAction(SyncActions requestedAction) { + + if (gate.tryAcquire()) { + + internalState = SynchronizerState.PERFORMING_SYNCHRONIZATION; + + // System.out.println("performaAction = " + requestedAction); + + System.out.println("Sync started with thread = " + Thread.currentThread().getName() + + " at date = " + new Date(Calendar.getInstance().getTimeInMillis())); + + try { + Thread.sleep(10000L); + } catch (InterruptedException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + + System.out.println("Sync done with thread = " + Thread.currentThread().getName() + + " at date = " + new Date(Calendar.getInstance().getTimeInMillis())); + internalState = SynchronizerState.IDLE; + + System.out.println("Next Sync at = " + Thread.currentThread().getName() + + " at date = " + new Date(Calendar.getInstance().getTimeInMillis() + 30000L)); + + + gate.release(); + + return OperationState.OK; + } else { + return OperationState.IGNORED_SYNC_NOT_IDLE; + } + } + + @Override + public void registerEntitySynchronizer(IndexSynchronizer entitySynchronizer) { + // TODO Auto-generated method stub + + } + + @Override + public void registerIndexValidator(IndexValidator indexValidator) { + // TODO Auto-generated method stub + + } + + @Override + public void registerIndexCleaner(IndexCleaner indexCleaner) { + // TODO Auto-generated method stub + + } + + @Override + public void shutdown() { + // TODO Auto-generated method stub + // System.out.println("shutdown"); + } + + @Override + public SynchronizerState getState() { + // System.out.println("getState()"); + return SynchronizerState.IDLE; + } + + @Override + public long getDelayInMs() { + // TODO Auto-generated method stub + return 1000L; + } + + @Override + public void setDelayInMs(long delayInMs) { + // TODO Auto-generated method stub + + } + + @Override + public long getSyncFrequencyInMs() { + // TODO Auto-generated method stub + return 30000L; + } + + @Override + public void setSyncFrequencyInMs(long syncFrequencyInMs) { + // TODO Auto-generated method stub + + } + + @Override + public Date getSyncStartTime() { +// System.out.println("getSyncStateTime()"); + // TODO Auto-generated method stub + return null; + } + + @Override + public void setSyncStartTime(Date syncStartTime) { + // TODO Auto-generated method stub + + } + + @Override + public Date getLastExecutionDate() { + // TODO Auto-generated method stub + return null; + } + + @Override + public void setLastExecutionDate(Date lastExecutionDate) { + // TODO Auto-generated method stub + + } + + + @Override + public Calendar getCreationTime() { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getNextSyncTime() { + // TODO Auto-generated method stub + return null; + } + + + @Override + public boolean isPeriodicSyncEnabled() { + // TODO Auto-generated method stub + return false; + } + + + @Override + public boolean isRunOnceSyncEnabled() { + // TODO Auto-generated method stub + return false; + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/AggregationSuggestionEntityTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/AggregationSuggestionEntityTest.java new file mode 100644 index 0000000..ba3f38f --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/AggregationSuggestionEntityTest.java @@ -0,0 +1,75 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.synchronizer.entity; + +import static org.junit.Assert.assertTrue; + +import java.io.File; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Scanner; + +import org.junit.Test; +import org.onap.aai.sparky.search.filters.config.FiltersConfig; +import org.onap.aai.sparky.sync.entity.AggregationSuggestionEntity; + +public class AggregationSuggestionEntityTest { + public String getResourceFileContents(String filePath) { + StringBuilder result = new StringBuilder(""); + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource(filePath).getFile()); + + try (Scanner scanner = new Scanner(file)) { + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + result.append(line).append("\n"); + } + scanner.close(); + } catch (IOException e) { + e.printStackTrace(); + } + + return result.toString(); + } + + @Test + public void testGetIndexDocumentJson() { + FiltersConfig filtersConfig = new FiltersConfig(); + AggregationSuggestionEntity aggregationSuggestionEntity = new AggregationSuggestionEntity(filtersConfig); + + List<String> filterIds = new ArrayList<>(Arrays.asList("1", "2", "7", "8")); + aggregationSuggestionEntity.setFilterIds(filterIds); + + String expectedFilterListPayload = getResourceFileContents( + "filters/AggregationSuggestionEntity_getIndexDocumentJson_expected.json"); + + assertTrue( + aggregationSuggestionEntity.getAsJson().contains(expectedFilterListPayload.trim())); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/SuggestionSearchEntityTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/SuggestionSearchEntityTest.java new file mode 100644 index 0000000..0f145f5 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/SuggestionSearchEntityTest.java @@ -0,0 +1,187 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.synchronizer.entity; + +import java.io.IOException; +import java.util.ArrayList; + +import org.junit.BeforeClass; +import org.onap.aai.sparky.search.filters.config.FiltersConfig; +import org.onap.aai.sparky.sync.entity.SuggestionSearchEntity; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class SuggestionSearchEntityTest { + private SuggestionSearchEntity suggestionSearchEntity; + ObjectMapper mapper = new ObjectMapper(); + private static FiltersConfig config = null; + + @BeforeClass + public static void init() throws IOException { + config = new FiltersConfig(); + config.setViewsFileName("src/test/resources/filters/aaiui_views.json"); + config.setFiltersFileName("src/test/resources/filters/aaiui_filters.json"); + config.setViewsConfig(config.readUiViewsConfig()); + config.setFiltersConfig(config.readUiFiltersConfig()); + + } + + public JsonNode getTestNodeForVnf_withProvAndOrchStatus() throws JsonProcessingException, IOException{ + String str = "{" + + "\"vnf-id\": \"1\"," + + "\"vnf-name\": \"2\"," + + "\"vnf-type\": \"3\"," + + "\"orchestration-status\": \"o1\"," + + "\"prov-status\": \"p1\"" + + "}"; + + return mapper.readTree(str); + } + + public JsonNode getTestNodeForVnf_withOrchStatus() throws JsonProcessingException, IOException{ + String str = "{" + + "\"vnf-id\": \"1\"," + + "\"vnf-name\": \"2\"," + + "\"vnf-type\": \"3\"," + + "\"orchestration-status\": \"o1\"" + + "}"; + + return mapper.readTree(str); + } + + public JsonNode getFilterListForOrchestrationStatusOnly(String orcStat) throws JsonProcessingException, IOException{ + String str = "{\"filterList\":[{\"filterId\":\"2\"},{\"filterId\":\"1\",\"filterValue\":" + + orcStat + "}]}"; + return mapper.readTree(str); + } + + public String getStrFilterListForOrchestrationStatusOnly(String orcStat) + throws JsonProcessingException, IOException{ + String str = "{\"filterList\":[{\"filterId\":\"2\"},{\"filterId\":\"1\",\"filterValue\":" + + orcStat + "}," + + "{\"filterId\":\"7\"}," + + "{\"filterId\":\"8\"}" + + "]}"; + return str; + } + + public String getStrFilterListForOrcStatAndProvStat(String orcStat, String provStat) + throws JsonProcessingException, IOException{ + String str = "{\"filterList\"" + + ":[{\"filterId\":\"2\"," + + "\"filterValue\":" + provStat + + "},{\"filterId\":\"1\",\"filterValue\":" + + orcStat + "}," + + "{\"filterId\":\"7\"}," + + "{\"filterId\":\"8\"}" + + "]}"; + return str; + } + + public ArrayList<String> getSingleElementOrcStatUniqueList(){ + ArrayList<String> list = new ArrayList<String>(); + list.add("orchestration-status"); + return list; + } + + public ArrayList<String> getTwoElementUniqueList(){ + ArrayList<String> list = new ArrayList<String>(); + list.add("prov-status"); + list.add("orchestration-status"); + return list; + } + + // Testing the filters payload (for ES) when only one suggestible attribute is present + // Use case: testing a single-element set from the power set of all attributes + /*@Test + public void test_params_for_suggestions_with_orcStat_o1(){ + suggestionSearchEntity = new SuggestionSearchEntity(SuggestionEntityLookup.getInstance(), config); + suggestionSearchEntity.setEntityType("generic-vnf"); + JsonNode node = null; + try{ + node = getTestNodeForVnf_withOrchStatus(); + suggestionSearchEntity.setFilterBasedPayloadFromResponse(node, + suggestionSearchEntity.getEntityType(), this.getSingleElementOrcStatUniqueList()); + JSONObject json = suggestionSearchEntity.getPayload(); + JSONObject exectedFilterPayload = new JSONObject( + this.getStrFilterListForOrchestrationStatusOnly("o1")); + + final JsonNode tree1 = mapper.readTree(json.toString()); + final JsonNode tree2 = mapper.readTree(exectedFilterPayload.toString()); + + assertTrue("Filter list not equal. Found: " + json + ". Expected: " + exectedFilterPayload, + tree1.equals(tree2)); + + Map<String, String> inputOutput = suggestionSearchEntity.getInputOutputData(); + Map<String, String> expectedInputOutput = new HashMap<String, String>(); + expectedInputOutput.put("orchestration-status", "o1"); + final JsonNode tree3 = mapper.readTree(mapper.writeValueAsString(inputOutput)); + final JsonNode tree4 = mapper.readTree(mapper.writeValueAsString(expectedInputOutput)); + + assertTrue("inputs for suggestions are not equal", tree3.equals(tree4)); + + } catch (Exception e){ + fail("Failed to get test node."); + } + }*/ + + //Testing the filters payload (for ES) when multiple suggestible attributes are present + // Use case: testing a 2-element set from the power set of all attributes + /*@Test + public void test_params_for_suggestions_with_orcStat_o1_provStat_p1(){ + suggestionSearchEntity = new SuggestionSearchEntity(); + suggestionSearchEntity.setEntityType("generic-vnf"); + JsonNode node = null; + try{ + node = getTestNodeForVnf_withProvAndOrchStatus(); + suggestionSearchEntity.setFilterBasedPayloadFromResponse(node, + suggestionSearchEntity.getEntityType(), this.getTwoElementUniqueList()); + JSONObject json = suggestionSearchEntity.getPayload(); + JSONObject exectedFilterPayload = new JSONObject( + this.getStrFilterListForOrcStatAndProvStat("o1", "p1")); + + final JsonNode tree1 = mapper.readTree(json.toString()); + final JsonNode tree2 = mapper.readTree(exectedFilterPayload.toString()); + + assertTrue("Filter list not equal. Found: " + json + ". Expected: " + exectedFilterPayload, + tree1.equals(tree2)); + + Map<String, String> inputOutput = suggestionSearchEntity.getInputOutputData(); + Map<String, String> expectedInputOutput = new HashMap<String, String>(); + expectedInputOutput.put("orchestration-status", "o1"); + expectedInputOutput.put("prov-status", "p1"); + final JsonNode tree3 = mapper.readTree(mapper.writeValueAsString(inputOutput)); + final JsonNode tree4 = mapper.readTree(mapper.writeValueAsString(expectedInputOutput)); + + assertTrue("inputs for suggestions are not equal", tree3.equals(tree4)); + + } catch (Exception e){ + fail("Failed to get node."); + } + }*/ +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/task/PerformActiveInventoryRetrievalTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/task/PerformActiveInventoryRetrievalTest.java new file mode 100644 index 0000000..60586bd --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/task/PerformActiveInventoryRetrievalTest.java @@ -0,0 +1,93 @@ +package org.onap.aai.sparky.synchronizer.task; + +import org.junit.BeforeClass; +import org.onap.aai.sparky.sync.task.PerformActiveInventoryRetrieval; +/* + * + * TODO-> RestClientBuilder is no longer being use neither is RestAuthenticationMode class + * need to be rewritten to use ONAP RestAuthenticationMode + */ +/* +public class PerformActiveInventoryRetrievalTest { + + private PerformActiveInventoryRetrieval sut; + + @BeforeClass + public static void initBeforeClass() throws Exception { + /* Mock aai.properties values which are used by repairSelfLink(), which is used both to build this + * test's expected URI and also used by PerformActiveInventoryRetrieval.get() which is the method under test + * + ActiveInventoryRestConfig aaiRestConfig = new ActiveInventoryRestConfig(null); + ActiveInventoryConfig.getConfig().setAaiRestConfig(aaiRestConfig); + ActiveInventoryConfig.getConfig().getAaiRestConfig().setHost("localhost"); + ActiveInventoryConfig.getConfig().getAaiRestConfig().setPort("8443"); + ActiveInventoryConfig.getConfig().getAaiRestConfig().setAuthenticationMode(RestAuthenticationMode.SSL_CERT); + } + + +/* @Test + public void testGet_relativeURI() throws Exception { + String uriToProcess = "/my/relative/uri"; // URI to perform test with + + Use uriToProcess + repairSelfLink() method to build the URI that we expect to see: + "https://localhost:8443/my/relative/uri" + String expectedURI = ActiveInventoryConfig.getConfig().repairSelfLink(uriToProcess); + + // Set up PerformActiveInventoryRetrieval dependencies + ActiveInventoryDataProvider aaiProvider = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + NetworkTransaction txn = new NetworkTransaction(); + txn.setLink(uriToProcess); + + sut = new PerformActiveInventoryRetrieval(txn, aaiProvider); + sut.setContextMap(new HashMap<>()); + + // Call method under test which should add the missing scheme/host/port to the relative path given in this test + sut.get(); + + assertEquals(expectedURI, txn.getOperationResult().getRequestLink()); + } + + @Test + public void testGet_relativeURIWithSchemaAndAuthority() throws Exception { + String uriToProcess = "https://localhost:8443/my/relative/uri"; // URI to perform test with + + Use uriToProcess + repairSelfLink() method to build the URI that we expect to see: + "https://localhost:8443/my/relative/uri" + String expectedURI = ActiveInventoryConfig.getConfig().repairSelfLink(uriToProcess); + + // Set up PerformActiveInventoryRetrieval dependencies + ActiveInventoryDataProvider aaiProvider = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + NetworkTransaction txn = new NetworkTransaction(); + txn.setLink(uriToProcess); + + sut = new PerformActiveInventoryRetrieval(txn, aaiProvider); + sut.setContextMap(new HashMap<>()); + + // Call method under test which shouldn't change the absolute path given in this test + sut.get(); + + assertEquals(expectedURI, txn.getOperationResult().getRequestLink()); + } + + @Test + public void testGet_emptyURI() throws Exception { + String uriToProcess = ""; // URI to perform test with + + Use uriToProcess + repairSelfLink() method to build the URI that we expect to see: + "https://localhost:8443" + String expectedURI = ActiveInventoryConfig.getConfig().repairSelfLink(uriToProcess); + + // Set up PerformActiveInventoryRetrieval dependencies + ActiveInventoryDataProvider aaiProvider = new ActiveInventoryAdapter(new OxmModelLoader(), new RestClientBuilder()); + NetworkTransaction txn = new NetworkTransaction(); + txn.setLink(uriToProcess); + + sut = new PerformActiveInventoryRetrieval(txn, aaiProvider); + sut.setContextMap(new HashMap<>()); + + // Call method under test which should add the missing scheme/host/port to the empty URI given in this test + sut.get(); + + assertEquals(expectedURI, txn.getOperationResult().getRequestLink()); + } +}*/ diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/CaptureLoggerAppender.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/CaptureLoggerAppender.java new file mode 100644 index 0000000..443328e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/CaptureLoggerAppender.java @@ -0,0 +1,247 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.util; + +import java.util.ArrayList; +import java.util.Deque; +import java.util.List; +import java.util.concurrent.ConcurrentLinkedDeque; + +import ch.qos.logback.classic.spi.LoggingEvent; +import ch.qos.logback.core.Appender; +import ch.qos.logback.core.Context; +import ch.qos.logback.core.LogbackException; +import ch.qos.logback.core.filter.Filter; +import ch.qos.logback.core.spi.FilterReply; +import ch.qos.logback.core.status.Status; + +/** + * A test class used to provide a concrete log stub of the Log4j API interface. The goal is to + * transparently capture logging paths so we can add log validation during the junit validation + * without post-analyzing on-disk logs. + * + * @author DAVEA + * + */ +@SuppressWarnings("rawtypes") +public class CaptureLoggerAppender implements Appender { + + private Deque<LoggingEvent> capturedLogs; + + /** + * Instantiates a new capture logger appender. + */ + public CaptureLoggerAppender() { + capturedLogs = new ConcurrentLinkedDeque<LoggingEvent>(); + } + + /** + * Drain all logs. + * + * @return the list + */ + public List<LoggingEvent> drainAllLogs() { + List<LoggingEvent> loggingEvents = new ArrayList<LoggingEvent>(); + + LoggingEvent event = null; + + while (capturedLogs.peek() != null) { + event = capturedLogs.pop(); + loggingEvents.add(event); + } + + return loggingEvents; + } + + /** + * Clears the capture logs double-ended queue and returns the size of the queue before it was + * cleared. + * + * @return int numCapturedLogs + */ + public int clearAllLogs() { + int numCapturedLogs = capturedLogs.size(); + capturedLogs.clear(); + return numCapturedLogs; + } + + + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.LifeCycle#start() + */ + @Override + public void start() {} + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.LifeCycle#stop() + */ + @Override + public void stop() {} + + @Override + public boolean isStarted() { + // TODO Auto-generated method stub + System.out.println("isStarted"); + return false; + } + + @Override + public void setContext(Context context) { + // TODO Auto-generated method stub + System.out.println("setContext"); + + } + + @Override + public Context getContext() { + // TODO Auto-generated method stub + System.out.println("getContext"); + return null; + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addStatus(ch.qos.logback.core.status.Status) + */ + @Override + public void addStatus(Status status) { + // TODO Auto-generated method stub + System.out.println("addStatus"); + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addInfo(java.lang.String) + */ + @Override + public void addInfo(String msg) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addInfo(java.lang.String, java.lang.Throwable) + */ + @Override + public void addInfo(String msg, Throwable ex) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addWarn(java.lang.String) + */ + @Override + public void addWarn(String msg) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addWarn(java.lang.String, java.lang.Throwable) + */ + @Override + public void addWarn(String msg, Throwable ex) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addError(java.lang.String) + */ + @Override + public void addError(String msg) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.ContextAware#addError(java.lang.String, java.lang.Throwable) + */ + @Override + public void addError(String msg, Throwable ex) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.FilterAttachable#addFilter(ch.qos.logback.core.filter.Filter) + */ + @Override + public void addFilter(Filter newFilter) { + // TODO Auto-generated method stub + + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.FilterAttachable#clearAllFilters() + */ + @Override + public void clearAllFilters() { + // TODO Auto-generated method stub + + } + + @Override + public List getCopyOfAttachedFiltersList() { + // TODO Auto-generated method stub + return null; + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.spi.FilterAttachable#getFilterChainDecision(java.lang.Object) + */ + @Override + public FilterReply getFilterChainDecision(Object event) { + // TODO Auto-generated method stub + return null; + } + + @Override + public String getName() { + // TODO Auto-generated method stub + System.out.println("getName"); + return "MOCK"; + } + + /* (non-Javadoc) + * @see ch.qos.logback.core.Appender#doAppend(java.lang.Object) + */ + @Override + public void doAppend(Object event) throws LogbackException { + // TODO Auto-generated method stub + // System.out.println("doAppend(), event = " + event); + // System.out.println("event class = " + event.getClass().getSimpleName()); + capturedLogs.add((LoggingEvent) event); + } + + @Override + public void setName(String name) { + // TODO Auto-generated method stub + System.out.println("setName() name = " + name); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/ExceptionHelper.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/ExceptionHelper.java new file mode 100644 index 0000000..f05aed8 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/ExceptionHelper.java @@ -0,0 +1,62 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.util; + +/** + * The Class ExceptionHelper. + */ +public class ExceptionHelper { + + /** + * Extract stack trace elements. + * + * @param maxNumberOfElementsToCapture the max number of elements to capture + * @param exc the exc + * @return the string + */ + public static String extractStackTraceElements(int maxNumberOfElementsToCapture, Exception exc) { + StringBuilder sb = new StringBuilder(128); + + StackTraceElement[] stackTraceElements = exc.getStackTrace(); + + if (stackTraceElements != null) { + + /* + * We want to avoid an index out-of-bounds error, so we will make sure to only extract the + * number of frames from the stack trace that actually exist. + */ + + int numFramesToExtract = Math.min(maxNumberOfElementsToCapture, stackTraceElements.length); + + for (int x = 0; x < numFramesToExtract; x++) { + sb.append(stackTraceElements[x]).append("\n"); + } + + } + + return sb.toString(); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/HttpServletHelper.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/HttpServletHelper.java new file mode 100644 index 0000000..081c93e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/HttpServletHelper.java @@ -0,0 +1,162 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.util; + +import static org.junit.Assert.fail; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.PrintWriter; +import java.io.StringReader; +import java.nio.charset.StandardCharsets; +import java.util.Collections; +import java.util.Map; + +import javax.servlet.ReadListener; +import javax.servlet.ServletInputStream; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + +import org.mockito.Mockito; + +/** + * The Class HttpServletHelper. + */ +public class HttpServletHelper { + + public static HttpServletRequest getMockHttpServletRequest() { + return Mockito.mock(HttpServletRequest.class); + } + + /** + * Sets the request payload. + * + * @param request the request + * @param mimeType the mime type + * @param payloadContent the payload content + */ + public static void setRequestPayload(HttpServletRequest request, String mimeType, + String payloadContent) { + + try { + Mockito.when(request.getContentType()).thenReturn(mimeType); + + + final ByteArrayInputStream bais = + new ByteArrayInputStream(payloadContent.getBytes(StandardCharsets.UTF_8)); + + ServletInputStream servletInputStream = new ServletInputStream() { + + @Override + public int read() throws IOException { + return bais.read(); + } + + @Override + public boolean isFinished() { + return true; + } + + @Override + public boolean isReady() { + return true; + } + + @Override + public void setReadListener(ReadListener readListener) { + // TODO Auto-generated method stub + + } + }; + + Mockito.when(request.getInputStream()).thenReturn(servletInputStream); + + Mockito.when(request.getReader()).thenReturn(new BufferedReader(new StringReader(payloadContent))); + + } catch (IOException ioe) { + fail(ExceptionHelper.extractStackTraceElements(5, ioe)); + } + + } + + /** + * Gets the mock http servlet response. + * + * @param printWriter the print writer + * @return the mock http servlet response + */ + public static HttpServletResponse getMockHttpServletResponse(PrintWriter printWriter) { + HttpServletResponse commonResponse = Mockito.mock(HttpServletResponse.class); + + /* + * Use the StringWriter wrapped in a PrintWriter to redirect output stream to an in-memory + * buffer instead of an on-disk file. + */ + + try { + Mockito.when(commonResponse.getWriter()).thenReturn(printWriter); + } catch (IOException ioe) { + fail(ExceptionHelper.extractStackTraceElements(5, ioe)); + } + + return commonResponse; + } + + /** + * Assign request uri. + * + * @param req the req + * @param requestUri the request uri + */ + public static void assignRequestUri(HttpServletRequest req, String requestUri) { + Mockito.when(req.getRequestURI()).thenReturn(requestUri); + } + + /** + * Assign request parameter name map. + * + * @param req the req + * @param paramNameValueMap the param name value map + */ + public static void assignRequestParameterNameMap(HttpServletRequest req, + Map<String, String> paramNameValueMap) { + if (paramNameValueMap != null) { + Mockito.when(req.getParameterNames()) + .thenReturn(Collections.enumeration(paramNameValueMap.keySet())); + + for (String key : paramNameValueMap.keySet()) { + Mockito.when(req.getParameter(key)).thenReturn(paramNameValueMap.get(key)); + } + + } + } + + public static void assignRequestHeader(HttpServletRequest req, String headerName, String headerValue) { + Mockito.when(req.getHeader(headerName)).thenReturn(headerValue); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/LogValidator.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/LogValidator.java new file mode 100644 index 0000000..a138846 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/LogValidator.java @@ -0,0 +1,85 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.util; + +import java.util.List; + +import org.slf4j.LoggerFactory; + +import ch.qos.logback.classic.Level; +import ch.qos.logback.classic.spi.LoggingEvent; + +/** + * The Class LogValidator. + */ +public class LogValidator { + + protected CaptureLoggerAppender logger = null; + + /** + * Initialize logger. + * + * @param level the level + */ + @SuppressWarnings("unchecked") + public void initializeLogger(Level level) { + ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory + .getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME); + root.detachAndStopAllAppenders(); + logger = new CaptureLoggerAppender(); + root.setLevel(level); + root.addAppender(logger); + } + + public CaptureLoggerAppender getLogger() { + return logger; + } + + /** + * Dump and count logs. + * + * @param logToConsole the log to console + * @return the int + */ + public int dumpAndCountLogs(boolean logToConsole) { + + List<LoggingEvent> logs = logger.drainAllLogs(); + + if (logs == null) { + return 0; + } + + if (logToConsole) { + for (LoggingEvent e : logs) { + System.out.println(e); + } + } + + return logs.size(); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/OxmModelAndProcessorHelper.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/OxmModelAndProcessorHelper.java new file mode 100644 index 0000000..cebb494 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/OxmModelAndProcessorHelper.java @@ -0,0 +1,143 @@ +package org.onap.aai.sparky.util; + +import java.io.IOException; +import java.util.HashSet; +import java.util.Set; + +import org.onap.aai.sparky.config.SparkyResourceLoader; +import org.onap.aai.sparky.config.oxm.CrossEntityReferenceLookup; +import org.onap.aai.sparky.config.oxm.GeoEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmEntityContainerLookup; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.config.oxm.OxmModelProcessor; +import org.onap.aai.sparky.config.oxm.SearchableEntityLookup; +import org.onap.aai.sparky.config.oxm.SuggestionEntityLookup; +import org.onap.aai.sparky.search.filters.config.FiltersConfig; +import org.springframework.core.io.DefaultResourceLoader; + +public class OxmModelAndProcessorHelper { + + public static int API_VERSION_OVERRIDE = -1; + + private OxmModelLoader modelLoader; + private Set<OxmModelProcessor> processors; + + private CrossEntityReferenceLookup crossEntityReferenceLookup; + private GeoEntityLookup geoEntityLookup; + private OxmEntityLookup oxmEntityLookup; + private SearchableEntityLookup searchableEntityLookup; + private SuggestionEntityLookup suggestionEntityLookup; + private OxmEntityContainerLookup oxmEntityContainerLookup; + private FiltersConfig filtersConfig; + + private static OxmModelAndProcessorHelper instance = null; + + private OxmModelAndProcessorHelper() throws IOException { + + SparkyResourceLoader resourceLoader = new SparkyResourceLoader(); + resourceLoader.setResourceLoader(new DefaultResourceLoader()); + + this.filtersConfig = new FiltersConfig(); + this.filtersConfig.initializeFiltersDetailsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.FILTERS_JSON_FILE, false)); + this.filtersConfig.initializeFiltersForViewsConfig(resourceLoader.getResourceAsFile(SparkyTestConstants.VIEWS_JSON_FILE, false)); + + this.crossEntityReferenceLookup = new CrossEntityReferenceLookup(); + this.geoEntityLookup = new GeoEntityLookup(); + this.oxmEntityLookup = new OxmEntityLookup(); + this.searchableEntityLookup = new SearchableEntityLookup(); + this.suggestionEntityLookup = new SuggestionEntityLookup(filtersConfig); + this.oxmEntityContainerLookup = new OxmEntityContainerLookup(); + + this.processors = new HashSet<OxmModelProcessor>(); + processors.add(crossEntityReferenceLookup); + processors.add(geoEntityLookup); + processors.add(oxmEntityLookup); + processors.add(searchableEntityLookup); + processors.add(suggestionEntityLookup); + processors.add(oxmEntityContainerLookup); + + this.modelLoader = new OxmModelLoader(API_VERSION_OVERRIDE, processors); + modelLoader.loadLatestOxmModel(); + } + + public static OxmModelAndProcessorHelper getInstance() throws IOException { + if (instance == null) { + instance = new OxmModelAndProcessorHelper(); + } + return instance; + } + + public OxmModelLoader getModelLoader() { + return modelLoader; + } + + public void setModelLoader(OxmModelLoader modelLoader) { + this.modelLoader = modelLoader; + } + + public Set<OxmModelProcessor> getProcessors() { + return processors; + } + + public void setProcessors(Set<OxmModelProcessor> processors) { + this.processors = processors; + } + + public CrossEntityReferenceLookup getCrossEntityReferenceLookup() { + return crossEntityReferenceLookup; + } + + public void setCrossEntityReferenceLookup(CrossEntityReferenceLookup crossEntityReferenceLookup) { + this.crossEntityReferenceLookup = crossEntityReferenceLookup; + } + + public GeoEntityLookup getGeoEntityLookup() { + return geoEntityLookup; + } + + public void setGeoEntityLookup(GeoEntityLookup geoEntityLookup) { + this.geoEntityLookup = geoEntityLookup; + } + + public OxmEntityLookup getOxmEntityLookup() { + return oxmEntityLookup; + } + + public void setOxmEntityLookup(OxmEntityLookup oxmEntityLookup) { + this.oxmEntityLookup = oxmEntityLookup; + } + + public SearchableEntityLookup getSearchableEntityLookup() { + return searchableEntityLookup; + } + + public void setSearchableEntityLookup(SearchableEntityLookup searchableEntityLookup) { + this.searchableEntityLookup = searchableEntityLookup; + } + + public SuggestionEntityLookup getSuggestionEntityLookup() { + return suggestionEntityLookup; + } + + public void setSuggestionEntityLookup(SuggestionEntityLookup suggestionEntityLookup) { + this.suggestionEntityLookup = suggestionEntityLookup; + } + + public FiltersConfig getFiltersConfig() { + return filtersConfig; + } + + public void setFiltersConfig(FiltersConfig filtersConfig) { + this.filtersConfig = filtersConfig; + } + + public OxmEntityContainerLookup getOxmEntityContainerLookup() { + return oxmEntityContainerLookup; + } + + public void setOxmEntityContainerLookup(OxmEntityContainerLookup oxmEntityContainerLookup) { + this.oxmEntityContainerLookup = oxmEntityContainerLookup; + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SparkyTestConstants.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SparkyTestConstants.java new file mode 100644 index 0000000..ffb27fa --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SparkyTestConstants.java @@ -0,0 +1,19 @@ +package org.onap.aai.sparky.util; + +import java.nio.file.Path; +import java.nio.file.Paths; + +public class SparkyTestConstants { + + /** Default to unix file separator if system property file.separator is null */ + public static final String FILESEP = + (System.getProperty("file.separator") == null) ? "/" : System.getProperty("file.separator"); + + private static Path currentRelativePath = Paths.get(""); + public static final String PATH_TO_TEST_RESOURCES = currentRelativePath.toAbsolutePath().toString() + + FILESEP + "src" + FILESEP + "test" + FILESEP + "resources"; + + public static final String PATH_TO_FILTERS_CONFIG = PATH_TO_TEST_RESOURCES + FILESEP + "filters"; + public static final String FILTERS_JSON_FILE = PATH_TO_FILTERS_CONFIG + FILESEP + "aaiui_filters.json"; + public static final String VIEWS_JSON_FILE = PATH_TO_FILTERS_CONFIG + FILESEP + "aaiui_views.json"; +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/StringCollectionContainsMatcher.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/StringCollectionContainsMatcher.java new file mode 100644 index 0000000..e8b3258 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/StringCollectionContainsMatcher.java @@ -0,0 +1,39 @@ +package org.onap.aai.sparky.util; + +import java.util.List; + +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; + +public class StringCollectionContainsMatcher extends BaseMatcher<List<String>> { + + private String valueToCheck; + + @SuppressWarnings({"unused", "unchecked"}) + public StringCollectionContainsMatcher(String valToCheck) { + this.valueToCheck = valToCheck; + } + + @Override + public boolean matches(Object arg0) { + + @SuppressWarnings("unchecked") + List<String> argumentList = (List<String>) arg0; + + for ( String listItem : argumentList ) { + + if ( listItem.contains(valueToCheck)) { + return true; + } + } + + return false; + } + + @Override + public void describeTo(Description arg0) { + // TODO Auto-generated method stub + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SuggestionsPermutationTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SuggestionsPermutationTest.java new file mode 100644 index 0000000..6aa23b7 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SuggestionsPermutationTest.java @@ -0,0 +1,130 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.util; + +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashSet; +import java.util.List; + +import org.junit.Test; +import org.onap.aai.sparky.util.SuggestionsPermutation; + +public class SuggestionsPermutationTest { + + @Test + public void testGetUniqueListForSuggestions() { + List<String> inputList = new ArrayList<String>(); + inputList.add("str1"); + inputList.add("str2"); + inputList.add("str3"); + + List<List<String>> expectedListOfLists = new ArrayList<List<String>>(); + expectedListOfLists.add((new ArrayList<String>(){{add("str1");}})); + expectedListOfLists.add((new ArrayList<String>(){{add("str2");}})); + expectedListOfLists.add((new ArrayList<String>(){{add("str3");}})); + expectedListOfLists.add((new ArrayList<String>(){{add("str1");add("str2");}})); + expectedListOfLists.add((new ArrayList<String>(){{add("str1");add("str3");}})); + expectedListOfLists.add((new ArrayList<String>(){{add("str2");add("str3");}})); + expectedListOfLists.add((new ArrayList<String>(){{add("str1");add("str2");add("str3");}})); + + int expectedCount = expectedListOfLists.size(); + int actualCount = 0; + ArrayList<ArrayList<String>> actualListOfLists = SuggestionsPermutation.getNonEmptyUniqueLists(inputList); + + for (List<String> list: expectedListOfLists){ + for (ArrayList<String> actualList: actualListOfLists) { + if (new HashSet(list).equals (new HashSet(actualList)) ){ + actualCount++; + } + } + } + + assertTrue("Missing entries in the unique list of lists for input: " + inputList.toString() + + ". Found: "+ actualListOfLists.toString() + + " expected: " + expectedListOfLists.toString(), actualCount == expectedCount); + } + + @Test + public void testGetListPermutations() { + List<String> inputList = new ArrayList<String>(); + inputList.add("str1"); + inputList.add("str2"); + inputList.add("str3"); + + List<List<String>> expectedPermutations = new ArrayList<List<String>>(); + expectedPermutations.add((new ArrayList<String>(){{add("str1");add("str2");add("str3");}})); + expectedPermutations.add((new ArrayList<String>(){{add("str2");add("str1");add("str3");}})); + expectedPermutations.add((new ArrayList<String>(){{add("str2");add("str3");add("str1");}})); + expectedPermutations.add((new ArrayList<String>(){{add("str1");add("str3");add("str2");}})); + expectedPermutations.add((new ArrayList<String>(){{add("str3");add("str1");add("str2");}})); + expectedPermutations.add((new ArrayList<String>(){{add("str3");add("str2");add("str1");}})); + + int expectedCount = expectedPermutations.size(); + int actualCount = 0; + List<List<String>> actualPermutations = SuggestionsPermutation.getListPermutations(inputList); + + for (List<String> list: expectedPermutations){ + for (List<String> actualList: actualPermutations) { + if (list.toString().equals(actualList.toString()) ){ + actualCount++; + } + } + } + + assertTrue("Missing entries in the permutation of list: " + + inputList.toString() + ". Found: "+ actualPermutations.toString() + + " expected: " + expectedPermutations.toString(), actualCount == expectedCount); + } + + @Test + public void isValidSuggestionInputPermutation_verbose_successPath() { + + List<String> x = new ArrayList<>(Arrays.asList("A", "B", "C", "D")); + + ArrayList<ArrayList<String>> uniqueLists = SuggestionsPermutation.getNonEmptyUniqueLists(x); + + assertTrue(uniqueLists.get(0).toString().equals("[A, B, C, D]")); + assertTrue(uniqueLists.get(1).toString().equals("[B, C, D]")); + assertTrue(uniqueLists.get(2).toString().equals("[A, C, D]")); + assertTrue(uniqueLists.get(3).toString().equals("[C, D]")); + assertTrue(uniqueLists.get(4).toString().equals("[A, B, D]")); + assertTrue(uniqueLists.get(5).toString().equals("[B, D]")); + assertTrue(uniqueLists.get(6).toString().equals("[A, D]")); + assertTrue(uniqueLists.get(7).toString().equals("[D]")); + assertTrue(uniqueLists.get(8).toString().equals("[A, B, C]")); + assertTrue(uniqueLists.get(9).toString().equals("[B, C]")); + assertTrue(uniqueLists.get(10).toString().equals("[A, C]")); + assertTrue(uniqueLists.get(11).toString().equals("[C]")); + assertTrue(uniqueLists.get(12).toString().equals("[A, B]")); + assertTrue(uniqueLists.get(13).toString().equals("[B]")); + assertTrue(uniqueLists.get(14).toString().equals("[A]")); + assertTrue(uniqueLists.size() == 15); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TestResourceLoader.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TestResourceLoader.java new file mode 100644 index 0000000..7b1b198 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TestResourceLoader.java @@ -0,0 +1,31 @@ +package org.onap.aai.sparky.util; + +import java.io.File; +import java.io.FileNotFoundException; +import java.io.IOException; +import java.net.URL; +import java.nio.file.Files; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; + +public class TestResourceLoader { + + public static String getTestResourceDataJson(String resourcePath) + throws JsonParseException, JsonMappingException, IOException { + + // will look for resource using "src/test/resources" as the base folder + URL url = TestResourceLoader.class.getResource(resourcePath); + File file = new File(url.getFile()); + + byte[] payload = Files.readAllBytes(file.toPath()); + + if (payload.length == 0) { + throw new FileNotFoundException("Could not load '" + resourcePath + "' test data"); + } + + return new String(payload); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TreeWalkerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TreeWalkerTest.java new file mode 100644 index 0000000..f6947cf --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TreeWalkerTest.java @@ -0,0 +1,563 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.util; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.util.NodeUtils; +import org.onap.aai.sparky.util.TreeWalker; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +/** + * The Class TreeWalkerTest. + */ +public class TreeWalkerTest { + + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception { + } + + /** + * Validate json node conversion null input. + */ + @Test + public void validateJsonNodeConversionNullInput() { + + TreeWalker walker = new TreeWalker(); + + try { + JsonNode convertedNode = walker.convertJsonToNode(null); + assertNull("Converted node should have be null", convertedNode); + + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expeted + } + + } + + /** + * Validate json node conversion empty non json input. + */ + @Test + public void validateJsonNodeConversionEmptyNonJsonInput() { + + TreeWalker walker = new TreeWalker(); + + try { + JsonNode convertedNode = walker.convertJsonToNode(""); + assertNull("Converted node should have be null", convertedNode); + + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expeted + } + + } + + /** + * Validate json node conversion empty json input. + */ + @Test + public void validateJsonNodeConversionEmptyJsonInput() { + + TreeWalker walker = new TreeWalker(); + + try { + JsonNode convertedNode = walker.convertJsonToNode("{}"); + assertNotNull("Converted node should not be null", convertedNode); + + ObjectMapper objectMapper = new ObjectMapper(); + String convertedNodeAsStr = objectMapper.writeValueAsString(convertedNode); + + assertEquals("{}", convertedNodeAsStr); + + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expeted + } + + } + + /** + * Validate walk tree null input. + */ + @Test + public void validateWalkTreeNullInput() { + + TreeWalker walker = new TreeWalker(); + + List<String> paths = new ArrayList<String>(); + walker.walkTree(paths, null); + assertEquals(0, paths.size()); + + } + + /** + * Validate walk tree empty node. + */ + @Test + public void validateWalkTreeEmptyNode() { + + try { + TreeWalker walker = new TreeWalker(); + List<String> paths = new ArrayList<String>(); + walker.walkTree(paths, walker.convertJsonToNode("{}")); + assertEquals(0, paths.size()); + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expected + } + + } + + /** + * Validate walk tree one parent node. + */ + @Test + public void validateWalkTreeOneParentNode() { + + try { + TreeWalker walker = new TreeWalker(); + List<String> paths = new ArrayList<String>(); + walker.walkTree(paths, walker.convertJsonToNode("{ \"root\" : { } }")); + assertEquals(1, paths.size()); + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expected + } + + } + + /** + * Validate walk tree one parent node with object array. + */ + @Test + public void validateWalkTreeOneParentNodeWithObjectArray() { + + try { + String jsonStr = + "{\"Employee\":[{\"id\":\"101\",\"name\":\"Pushkar\",\"salary\":\"5000\"}," + + "{\"id\":\"102\",\"name\":\"Rahul\",\"salary\":\"4000\"}," + + "{\"id\":\"103\",\"name\":\"tanveer\",\"salary\":\"56678\"}]}"; + TreeWalker walker = new TreeWalker(); + List<String> paths = new ArrayList<String>(); + walker.walkTree(paths, walker.convertJsonToNode(jsonStr)); + assertEquals(9, paths.size()); + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expected + } + + } + + /** + * Validate walk tree one parent node with value array. + */ + @Test + public void validateWalkTreeOneParentNodeWithValueArray() { + + try { + String jsonStr = "{ \"colors\" : [ \"yellow\", \"blue\", \"red\" ] }"; + TreeWalker walker = new TreeWalker(); + List<String> paths = new ArrayList<String>(); + walker.walkTree(paths, walker.convertJsonToNode(jsonStr)); + + assertEquals(3, paths.size()); + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expected + } + + } + + /** + * Test walk for complex entity type aai entity node descriptors. + */ + @Test + public void testWalkForComplexEntityType_AaiEntityNodeDescriptors() { + + try { + String jsonStr = + "{ \"generalNodeClass\": { \"class\": \"aai-entity-node general-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\", " + + " \"svgAttributes\": { \"r\": \"10\" " + + "} }, { \"type\": \"text\", " + + "\"class\": \"id-type-label\", \"displayKey\": \"itemType\", " + + " \"shapeAttributes\": { \"offset\": { " + + " \"x\": \"0\", \"y\": \"30\" } " + + " } }, { \"type\": \"text\", " + + " \"class\": \"id-value-label\", \"displayKey\":" + + " \"itemNameValue\", \"shapeAttributes\": { " + + " \"offset\": { \"x\": \"0\", " + + " \"y\": \"40\" } } } ] " + + " }, \"searchedNodeClass\": { \"class\": \"aai-entity-node search-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": { " + + " \"r\": \"20\" } }, { " + + " \"type\": \"circle\", \"class\": \"inner\", " + + " \"svgAttributes\": { \"r\": \"10\" }" + + " }, { \"type\": \"text\", " + + "\"class\": \"id-type-label\", \"displayKey\": \"itemType\", " + + " \"shapeAttributes\": { \"offset\": { " + + " \"x\": \"0\", \"y\": \"30\" }" + + " } }, { \"type\": \"text\", " + + " \"class\": \"id-value-label\", " + + "\"displayKey\": \"itemNameValue\", \"shapeAttributes\": {" + + " \"offset\": { \"x\": \"0\"," + + " \"y\": \"40\" } }" + + " } ] }, \"selectedSearchedNodeClass\": { " + + "\"class\": \"aai-entity-node selected-search-node\", \"visualElements\": [" + + " { \"type\": \"circle\", " + + "\"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\"," + + " \"svgAttributes\": { \"r\": \"10\" " + + " } }, { \"type\": \"text\", " + + " \"class\": \"id-type-label\", \"displayKey\": \"itemType\"," + + " \"shapeAttributes\": { \"offset\": {" + + " \"x\": \"0\", \"y\": \"30\"" + + " } } }, { " + + " \"type\": \"text\", \"class\": \"id-value-label\", " + + " \"displayKey\": \"itemNameValue\", \"shapeAttributes\": {" + + " \"offset\": { \"x\": \"0\", " + + " \"y\": \"40\" } } } ]" + + " }, \"selectedNodeClass\": { \"class\":" + + " \"aai-entity-node selected-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\"," + + " \"svgAttributes\": { \"r\": \"10\" " + + " } }, { \"type\": \"text\", " + + " \"class\": \"id-type-label\", \"displayKey\": \"itemType\"," + + " \"shapeAttributes\": { \"offset\": " + + "{ " + + " \"x\": \"0\", \"y\": \"30\" } " + + " } }, { \"type\": \"text\"," + + " \"class\": \"id-value-label\", \"displayKey\":" + + " \"itemNameValue\", \"shapeAttributes\": { " + + "\"offset\": { \"x\": \"0\", " + + "\"y\": \"40\" } } } ] }}"; + TreeWalker walker = new TreeWalker(); + List<String> paths = new ArrayList<String>(); + walker.walkTree(paths, walker.convertJsonToNode(jsonStr)); + + assertEquals(68, paths.size()); + + /* + * Example of expected value + * + * generalNodeClass.class=aai-entity-node general-node + * generalNodeClass.visualElements.type=circle generalNodeClass.visualElements.class=outer + * generalNodeClass.visualElements.svgAttributes.r=20 + * generalNodeClass.visualElements.type=circle generalNodeClass.visualElements.class=inner + * generalNodeClass.visualElements.svgAttributes.r=10 + * generalNodeClass.visualElements.type=text + * generalNodeClass.visualElements.class=id-type-label + * generalNodeClass.visualElements.displayKey=itemType + * generalNodeClass.visualElements.shapeAttributes.offset.x=0 + * generalNodeClass.visualElements.shapeAttributes.offset.y=30 + * generalNodeClass.visualElements.type=text + * generalNodeClass.visualElements.class=id-value-label + * generalNodeClass.visualElements.displayKey=itemNameValue + * generalNodeClass.visualElements.shapeAttributes.offset.x=0 + * generalNodeClass.visualElements.shapeAttributes.offset.y=40 + * searchedNodeClass.class=aai-entity-node search-node + * searchedNodeClass.visualElements.type=circle searchedNodeClass.visualElements.class=outer + * searchedNodeClass.visualElements.svgAttributes.r=20 + * searchedNodeClass.visualElements.type=circle searchedNodeClass.visualElements.class=inner + * searchedNodeClass.visualElements.svgAttributes.r=10 + * searchedNodeClass.visualElements.type=text + * searchedNodeClass.visualElements.class=id-type-label + * searchedNodeClass.visualElements.displayKey=itemType + * searchedNodeClass.visualElements.shapeAttributes.offset.x=0 + * searchedNodeClass.visualElements.shapeAttributes.offset.y=30 + * searchedNodeClass.visualElements.type=text + * searchedNodeClass.visualElements.class=id-value-label + * searchedNodeClass.visualElements.displayKey=itemNameValue + * searchedNodeClass.visualElements.shapeAttributes.offset.x=0 + * searchedNodeClass.visualElements.shapeAttributes.offset.y=40 + * selectedSearchedNodeClass.class=aai-entity-node selected-search-node + * selectedSearchedNodeClass.visualElements.type=circle + * selectedSearchedNodeClass.visualElements.class=outer + * selectedSearchedNodeClass.visualElements.svgAttributes.r=20 + * selectedSearchedNodeClass.visualElements.type=circle + * selectedSearchedNodeClass.visualElements.class=inner + * selectedSearchedNodeClass.visualElements.svgAttributes.r=10 + * selectedSearchedNodeClass.visualElements.type=text + * selectedSearchedNodeClass.visualElements.class=id-type-label + * selectedSearchedNodeClass.visualElements.displayKey=itemType + * selectedSearchedNodeClass.visualElements.shapeAttributes.offset.x=0 + * selectedSearchedNodeClass.visualElements.shapeAttributes.offset.y=30 + * selectedSearchedNodeClass.visualElements.type=text + * selectedSearchedNodeClass.visualElements.class=id-value-label + * selectedSearchedNodeClass.visualElements.displayKey=itemNameValue + * selectedSearchedNodeClass.visualElements.shapeAttributes.offset.x=0 + * selectedSearchedNodeClass.visualElements.shapeAttributes.offset.y=40 + * selectedNodeClass.class=aai-entity-node selected-node + * selectedNodeClass.visualElements.type=circle selectedNodeClass.visualElements.class=outer + * selectedNodeClass.visualElements.svgAttributes.r=20 + * selectedNodeClass.visualElements.type=circle selectedNodeClass.visualElements.class=inner + * selectedNodeClass.visualElements.svgAttributes.r=10 + * selectedNodeClass.visualElements.type=text + * selectedNodeClass.visualElements.class=id-type-label + * selectedNodeClass.visualElements.displayKey=itemType + * selectedNodeClass.visualElements.shapeAttributes.offset.x=0 + * selectedNodeClass.visualElements.shapeAttributes.offset.y=30 + * selectedNodeClass.visualElements.type=text + * selectedNodeClass.visualElements.class=id-value-label + * selectedNodeClass.visualElements.displayKey=itemNameValue + * selectedNodeClass.visualElements.shapeAttributes.offset.x=0 + * selectedNodeClass.visualElements.shapeAttributes.offset.y=40 + */ + + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expected + } + + } + + /** + * Test complex object inversion equality. + */ + @Test + public void testComplexObjectInversionEquality() { + + /** + * Dave Adams (1-Nov-2016): + * + * Ok.. I agree...weird title of the test-case. This test is focused on the isEqual equality + * test within the NodeUtils helper class which compares the sorted structural paths of two Json + * Object representations. I attempted to normalize unordered structures to produce an equality + * result, as there doesn't seem to be any natural equality test between two JsonNode objects + * that I could find to date. + * + * Basically, this test is confirming that if the same object values are present in different + * orders, they are effectively the same Json Object representation, and pass, at least my + * structural value equality test. + * + * I reordered the aaiEntityNodeDescriptors top level class types, and change the order of the + * x,y coordinates to be y,x. Same values different order. Once again, the expectation is that + * both representations are objectively equal, they just have different json representations. + */ + + try { + String n1Str = + "{ \"generalNodeClass\": { \"class\": \"aai-entity-node general-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\"," + + " \"svgAttributes\": { \"r\": \"10\"" + + " } }, { \"type\": \"text\"," + + " \"class\": \"id-type-label\", \"displayKey\":" + + " \"itemType\", \"shapeAttributes\": { \"offset\":" + + " { \"x\": \"0\", \"y\": \"30\"" + + " } } }, {" + + " \"type\": \"text\", \"class\": \"id-value-label\"," + + " \"displayKey\": \"itemNameValue\"," + + " \"shapeAttributes\": { \"offset\":" + + " { \"x\": \"0\", \"y\": \"40\"" + + " } } } ] }," + + " \"searchedNodeClass\": { \"class\": \"aai-entity-node search-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\"," + + " \"svgAttributes\": { \"r\": \"10\"" + + " } }, { \"type\": \"text\"," + + " \"class\": \"id-type-label\", \"displayKey\":" + + " \"itemType\", \"shapeAttributes\": { \"offset\": {" + + " \"x\": \"0\", \"y\": \"30\"" + + " } } }, {" + + " \"type\": \"text\", \"class\": \"id-value-label\"," + + " \"displayKey\": \"itemNameValue\"," + + " \"shapeAttributes\": { \"offset\": {" + + " \"x\": \"0\", \"y\": \"40\"" + + " } } } ] }," + + " \"selectedSearchedNodeClass\": { \"class\":" + + " \"aai-entity-node selected-search-node\", \"visualElements\": [" + + " { \"type\": \"circle\", \"class\":" + + " \"outer\", \"svgAttributes\": { \"r\": \"20\"" + + " } }, { \"type\": \"circle\"," + + " \"class\": \"inner\", \"svgAttributes\": {" + + " \"r\": \"10\" } }, {" + + " \"type\": \"text\", \"class\": \"id-type-label\"," + + " \"displayKey\": \"itemType\", \"shapeAttributes\": {" + + " \"offset\": { \"x\": \"0\"," + + " \"y\": \"30\" } }" + + " }, { \"type\": \"text\"," + + " \"class\": \"id-value-label\"," + + " \"displayKey\": \"itemNameValue\"," + + " \"shapeAttributes\": { \"offset\": {" + + " \"x\": \"0\", \"y\": \"40\"" + + " } } } ] }," + + " \"selectedNodeClass\": { \"class\": \"aai-entity-node selected-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\"," + + " \"svgAttributes\": { \"r\": \"10\"" + + " } }, { \"type\": \"text\"," + + " \"class\": \"id-type-label\", \"displayKey\":" + + " \"itemType\", \"shapeAttributes\": {" + + " \"offset\": { \"x\": \"0\"," + + " \"y\": \"30\" }" + + " } }, { \"type\": \"text\"," + + " \"class\": \"id-value-label\", \"displayKey\":" + + " \"itemNameValue\", \"shapeAttributes\": {" + + " \"offset\": { \"x\": \"0\"," + + " \"y\": \"40\" } }" + + " } ] }}"; + String n2Str = + "{ \"searchedNodeClass\": { \"class\": \"aai-entity-node search-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }," + + " { \"type\": \"circle\"," + + " \"class\": \"inner\", \"svgAttributes\": {" + + " \"r\": \"10\" } }, {" + + " \"type\": \"text\", \"class\": \"id-type-label\"," + + " \"displayKey\": \"itemType\", \"shapeAttributes\": {" + + " \"offset\": { \"y\": \"30\"," + + " \"x\": \"0\" } }" + + " }, { \"type\": \"text\"," + + " \"class\": \"id-value-label\"," + + " \"displayKey\": \"itemNameValue\"," + + " \"shapeAttributes\": { \"offset\": {" + + " \"y\": \"40\", \"x\": \"0\"" + + " } } } ] }," + + " \"selectedSearchedNodeClass\": { \"class\":" + + " \"aai-entity-node selected-search-node\", \"visualElements\": [" + + " { \"type\": \"circle\", \"class\":" + + " \"outer\", \"svgAttributes\": { \"r\": \"20\"" + + " } }, { \"type\": \"circle\"," + + " \"class\": \"inner\", \"svgAttributes\": {" + + " \"r\": \"10\" } }, {" + + " \"type\": \"text\", \"class\": \"id-type-label\"," + + " \"displayKey\": \"itemType\", \"shapeAttributes\": {" + + " \"offset\": { \"y\": \"30\"," + + " \"x\": \"0\" } }" + + " }, { \"type\": \"text\"," + + " \"class\": \"id-value-label\"," + + " \"displayKey\": \"itemNameValue\"," + + " \"shapeAttributes\": { \"offset\": {" + + " \"y\": \"40\", \"x\": \"0\"" + + " } } } ] }," + + " \"selectedNodeClass\": { \"class\": \"aai-entity-node selected-node\"," + + " \"visualElements\": [ { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }, {" + + " \"type\": \"circle\", \"class\": \"inner\"," + + " \"svgAttributes\": { \"r\": \"10\"" + + " } }, { \"type\": \"text\"," + + " \"class\": \"id-type-label\"," + + " \"displayKey\": \"itemType\", \"shapeAttributes\": {" + + " \"offset\": { \"y\": \"30\"," + + " \"x\": \"0\" } }" + + " }, { \"type\": \"text\"," + + " \"class\": \"id-value-label\"," + + " \"displayKey\": \"itemNameValue\"," + + " \"shapeAttributes\": { \"offset\": {" + + " \"y\": \"40\", \"x\": \"0\"" + + " } } } ] }," + + " \"generalNodeClass\": { \"class\":" + + " \"aai-entity-node general-node\", \"visualElements\": [" + + " { \"type\": \"circle\"," + + " \"class\": \"outer\", \"svgAttributes\": {" + + " \"r\": \"20\" } }," + + " { \"type\": \"circle\"," + + " \"class\": \"inner\", \"svgAttributes\": {" + + " \"r\": \"10\" } }," + + " { \"type\": \"text\"," + + " \"class\": \"id-type-label\", \"displayKey\":" + + " \"itemType\", \"shapeAttributes\": {" + + " \"offset\": { \"y\": \"30\"," + + " \"x\": \"0\" }" + + " } }, {" + + " \"type\": \"text\"," + + " \"class\": \"id-value-label\", \"displayKey\":" + + " \"itemNameValue\", \"shapeAttributes\": {" + + " \"offset\": { \"y\": \"40\"," + + " \"x\": \"0\" }" + + " } } ] }}"; + + TreeWalker walker = new TreeWalker(); + List<String> n1Paths = new ArrayList<String>(); + List<String> n2Paths = new ArrayList<String>(); + + JsonNode n1 = walker.convertJsonToNode(n1Str); + JsonNode n2 = walker.convertJsonToNode(n2Str); + walker.walkTree(n1Paths, n1); + walker.walkTree(n2Paths, n2); + + assertEquals(68, n1Paths.size()); + assertEquals(68, n2Paths.size()); + + assertTrue(NodeUtils.isEqual(n1, n2)); + + } catch (JsonProcessingException exc) { + // expected + } catch (IOException exc) { + // expected + } + + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationContextTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationContextTest.java new file mode 100644 index 0000000..5c027da --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationContextTest.java @@ -0,0 +1,5 @@ +package org.onap.aai.sparky.viewandinspect; + +public class BaseVisualizationContextTest { + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationServiceTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationServiceTest.java new file mode 100644 index 0000000..e51c629 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationServiceTest.java @@ -0,0 +1,75 @@ +package org.onap.aai.sparky.viewandinspect; + +import static org.junit.Assert.assertEquals; + +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.dal.ActiveInventoryAdapter; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.dal.GizmoAdapter; +import org.onap.aai.sparky.subscription.config.SubscriptionConfig; +import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.util.OxmModelAndProcessorHelper; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; +import org.onap.aai.sparky.viewandinspect.entity.QueryRequest; +import org.onap.aai.sparky.viewandinspect.services.BaseVisualizationService; +import org.onap.aai.sparky.viewandinspect.util.SchemaVisualizationTestDataBuilder; + +public class BaseVisualizationServiceTest { + private ActiveInventoryAdapter mockAaiAdapter; + private ElasticSearchAdapter mockEsAdapter; + private VisualizationConfigs visualizationConfigs; + private SubscriptionConfig subConfig; + private ElasticSearchEndpointConfig endpointEConfig; + private ElasticSearchSchemaConfig schemaEConfig; + private OxmEntityLookup oxmEntityLookup; + private GizmoAdapter mockGizmoAdapter; + + private BaseVisualizationService baseVisService; + + @Before + public void init() throws Exception { + this.mockAaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + this.mockAaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + this.mockEsAdapter = Mockito.mock(ElasticSearchAdapter.class); + this.mockGizmoAdapter = Mockito.mock(GizmoAdapter.class); + this.visualizationConfigs = new VisualizationConfigs(); + this.subConfig = new SubscriptionConfig(); + this.endpointEConfig = new ElasticSearchEndpointConfig(); + this.schemaEConfig = new ElasticSearchSchemaConfig(); + this.oxmEntityLookup = OxmModelAndProcessorHelper.getInstance().getOxmEntityLookup(); + + OxmModelLoader modelLoader = OxmModelAndProcessorHelper.getInstance().getModelLoader(); + + this.baseVisService = new BaseVisualizationService(modelLoader, visualizationConfigs, + mockAaiAdapter, mockGizmoAdapter, mockEsAdapter, endpointEConfig, schemaEConfig, 1, + oxmEntityLookup, subConfig); + } + + @Test + public void testAnalyzeQueryRequestBody() { + QueryRequest validResquest = baseVisService.analyzeQueryRequestBody(SchemaVisualizationTestDataBuilder.getQueryRequest()); + assertEquals(SchemaVisualizationTestDataBuilder.ROOT_NODE_HASH_ID, validResquest.getHashId()); + + QueryRequest nullRequest = baseVisService.analyzeQueryRequestBody("This String should make the request return null eh!"); + assertEquals(null, nullRequest); + } + + @Test + public void testBuildVisualizationUsingGenericQuery() { + + initializeMocksForBuildVisualizationUsingGenericQueryTest(); + + QueryRequest rootNodeQuery = baseVisService.analyzeQueryRequestBody(SchemaVisualizationTestDataBuilder.getQueryRequest()); + + } + + private void initializeMocksForBuildVisualizationUsingGenericQueryTest() { + Mockito.when(mockAaiAdapter.queryActiveInventoryWithRetries(Mockito.anyString(), Mockito.anyString(), Mockito.anyInt())).thenReturn(null); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessorTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessorTest.java new file mode 100644 index 0000000..83e3ee0 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessorTest.java @@ -0,0 +1,78 @@ +package org.onap.aai.sparky.viewandinspect; + +import static org.junit.Assert.assertEquals; + +import java.io.IOException; + +import javax.servlet.http.HttpServletRequest; + +import org.apache.camel.CamelContext; +import org.apache.camel.Exchange; +import org.apache.camel.Message; +import org.apache.camel.impl.DefaultCamelContext; +import org.apache.camel.impl.DefaultExchange; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.sparky.util.HttpServletHelper; +import org.onap.aai.sparky.viewandinspect.entity.QueryRequest; +import org.onap.aai.sparky.viewandinspect.services.VisualizationService; +import org.onap.aai.sparky.viewandinspect.util.SchemaVisualizationTestDataBuilder; + +import com.fasterxml.jackson.annotation.JsonInclude.Include; +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class SchemaVisualizationProcessorTest { + + SchemaVisualizationProcessor schemaVisProcessor; + VisualizationService mockVisualizationService; + + private Exchange exchange; + private CamelContext camelContext; + private Message mockRequestMessage; + + @Before + public void init() throws Exception { + schemaVisProcessor = new SchemaVisualizationProcessor(); + + mockVisualizationService = Mockito.mock(VisualizationService.class); + + camelContext = new DefaultCamelContext(); + exchange = new DefaultExchange(camelContext); + + mockRequestMessage = Mockito.mock(Message.class); + + exchange.setIn(mockRequestMessage); + + } + + @Test + public void testProcessVisualizationRequest() throws JsonParseException, JsonMappingException, IOException { + + String queryRequest = SchemaVisualizationTestDataBuilder.getQueryRequest(); + HttpServletRequest request = Mockito.mock(HttpServletRequest.class); + HttpServletHelper.setRequestPayload(request, "application/json", queryRequest); + + Mockito.when(request.getRequestURI()).thenReturn("fakeUri"); + Mockito.when(request.getLocalPort()).thenReturn(8001); + Mockito.when(mockRequestMessage.getBody(Mockito.eq(HttpServletRequest.class))).thenReturn(request); + Mockito.when(mockRequestMessage.getBody(Mockito.eq(String.class))).thenReturn(queryRequest); + + ObjectMapper nonEmptyMapper = new ObjectMapper(); + nonEmptyMapper.setSerializationInclusion(Include.NON_EMPTY); + QueryRequest queryBody = nonEmptyMapper.readValue(queryRequest, QueryRequest.class); + + Mockito.when(mockVisualizationService.analyzeQueryRequestBody(Mockito.anyString())).thenReturn(queryBody); + Mockito.when(mockVisualizationService.buildVisualizationUsingGenericQuery(Mockito.anyObject())).thenReturn(SchemaVisualizationTestDataBuilder.getSchemaVisResult()); + + schemaVisProcessor.setVisualizationService(mockVisualizationService); + schemaVisProcessor.processVisualizationRequest(exchange); + + assertEquals("{}", exchange.getOut().getBody(String.class)); + assertEquals(200, exchange.getOut().getHeader(Exchange.HTTP_RESPONSE_CODE)); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchAdapterTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchAdapterTest.java new file mode 100644 index 0000000..5ddf07e --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchAdapterTest.java @@ -0,0 +1,87 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect; +/* +import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.anyString; +import static org.mockito.Matchers.same; +import static org.mockito.Mockito.doReturn; +import static org.mockito.Mockito.mock; + +import org.junit.Before; +import org.onap.aai.sparky.dal.rest.RestClientBuilder; + +import com.sun.jersey.api.client.Client; +import com.sun.jersey.api.client.ClientResponse; +import com.sun.jersey.api.client.WebResource; +import com.sun.jersey.api.client.WebResource.Builder; + + +/** + * The Class SearchAdapterTest. + * + * + *TODO -> rewrite the test as it no longer uses RestClientBuilder +public class SearchAdapterTest { + + private RestClientBuilder clientBuilderMock; + private Client mockClient; + private ClientResponse mockClientResponse; + private WebResource mockWebResource; + private Builder mockBuilder; + + + + /** + * Inits the. + * + * @throws Exception the exception + * + @Before + public void init() throws Exception { + + /* + * common collaborator mocking setup + * + + clientBuilderMock = mock(RestClientBuilder.class); + mockClient = mock(Client.class); + mockClientResponse = mock(ClientResponse.class); + mockWebResource = mock(WebResource.class); + mockBuilder = mock(Builder.class); + + doReturn(mockClient).when(clientBuilderMock).getClient(); + doReturn(mockWebResource).when(mockClient).resource(anyString()); + doReturn(mockBuilder).when(mockWebResource).accept(anyString()); + doReturn(mockBuilder).when(mockBuilder).header(anyString(), anyObject()); + + doReturn(mockClientResponse).when(mockBuilder).get(same(ClientResponse.class)); + doReturn(mockClientResponse).when(mockBuilder).put(same(ClientResponse.class), anyObject()); + doReturn(mockClientResponse).when(mockBuilder).post(same(ClientResponse.class), anyObject()); + doReturn(mockClientResponse).when(mockBuilder).delete(same(ClientResponse.class)); + } + +}*/
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchResponseTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchResponseTest.java new file mode 100644 index 0000000..7975c13 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchResponseTest.java @@ -0,0 +1,92 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect; + +import java.util.ArrayList; +import java.util.List; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.search.SearchResponse; +import org.onap.aai.sparky.viewandinspect.entity.EntityEntry; + +/** + * The Class SearchResponseTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class SearchResponseTest { + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception {} + + /** + * Validate basic construction. + */ + @Test + public void validateBasicConstruction() { + + SearchResponse response = new SearchResponse(); + + //response.setNumReturned(1); + response.setProcessingTimeInMs(512); + //response.setTotalFound(50); + + List<EntityEntry> entities = new ArrayList<EntityEntry>(); + //response.setEntities(entities); + + EntityEntry e1 = new EntityEntry(); + e1.setEntityPrimaryKeyValue("e1"); + e1.setEntityType("e1"); + e1.setSearchTags("e1"); + + //response.addEntityEntry(e1); + + EntityEntry e2 = new EntityEntry(); + + e2.setEntityPrimaryKeyValue("e2"); + e2.setEntityType("e2"); + e2.setSearchTags("e2"); + + //response.addEntityEntry(e2); + + //assertEquals(1, response.getNumReturned()); + //assertEquals(512, response.getProcessingTimeInMs()); + //assertEquals(50, response.getTotalFound()); + + //List<EntityEntry> responseEntities = response.getEntities(); + + //assertEquals(2, responseEntities.size()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchServletTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchServletTest.java new file mode 100644 index 0000000..69c408c --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchServletTest.java @@ -0,0 +1,992 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect; + +/* +import org.openecomp.sparky.config.oxm.OxmEntityDescriptor; +import org.openecomp.sparky.config.oxm.OxmModelLoader; +import org.openecomp.sparky.dal.elasticsearch.SearchAdapter; +import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestDocumentEntity; +import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestDocumentEntityFields; +import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticHitEntity; +import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticHitsEntity; +import org.openecomp.sparky.dal.elasticsearch.entity.AutoSuggestElasticSearchResponse; +import org.openecomp.sparky.dal.elasticsearch.entity.BucketEntity; +import org.openecomp.sparky.dal.elasticsearch.entity.ElasticHitsEntity; +import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchAggegrationResponse; +import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchAggregation; +import org.openecomp.sparky.dal.elasticsearch.entity.ElasticSearchCountResponse; +import org.openecomp.sparky.dal.elasticsearch.entity.PayloadEntity; +import org.openecomp.sparky.dal.rest.OperationResult; +import org.openecomp.sparky.dal.sas.config.SearchServiceConfig; +import org.openecomp.sparky.dal.sas.entity.EntityCountResponse; +import org.openecomp.sparky.dal.sas.entity.GroupByAggregationResponseEntity; +import org.openecomp.sparky.dal.sas.entity.SearchAbstractionEntityBuilder; +import org.openecomp.sparky.search.VnfSearchService; +import org.openecomp.sparky.search.config.SuggestionConfig; +import org.openecomp.sparky.search.filters.FilteredSearchHelper; +import org.openecomp.sparky.search.filters.entity.UiFilterEntity; +import org.openecomp.sparky.search.filters.entity.UiFilterValueEntity; +import org.openecomp.sparky.search.filters.entity.UiFiltersEntity; +import org.openecomp.sparky.suggestivesearch.SuggestionEntity; +import org.openecomp.sparky.util.ExceptionHelper; +import org.openecomp.sparky.util.HttpServletHelper; +import org.openecomp.sparky.util.NodeUtils; +import org.openecomp.sparky.viewandinspect.entity.QuerySearchEntity; +import org.openecomp.sparky.viewandinspect.entity.SearchResponse; +import org.slf4j.MDC; + +import org.onap.aai.cl.mdc.MdcContext; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import com.fasterxml.jackson.databind.SerializationFeature; +import com.fasterxml.jackson.databind.node.ObjectNode; +import com.google.common.net.MediaType; + + +/** + * The Class SearchServletTest. + */ + +/*public class SearchServletTest { + + private static final String VNF_ROUTE = "vnf"; + private static final String VIEW_INSPECT_ROUTE = "viewInspect"; + + private HttpServletRequest commonRequest = null; + private HttpServletResponse commonResponse = null; + private PrintWriter printWriter = null; + private StringWriter responseStringWriter = null; + private SearchServiceWrapper searchWrapper = null; + private SearchAdapter searchAdapter = null; + private VnfSearchService vnfSearchService = null; + private ObjectMapper mapper = null; + private SecureRandom rand = null; + private OxmModelLoader loader; + private Map<String, OxmEntityDescriptor> descriptors = null; + private SuggestionConfig suggestionConfig = null; + private SearchServiceConfig esConfig = null; + + @BeforeClass + public static void initBeforeClass() throws IOException { + if (null == System.getProperty("CONFIG_HOME")) { + /* Set "CONFIG_HOME" environment variable so path of filter & view schema files are correct when + they're loaded during SearchServiceWrapper instantiation */ +/* String configHomePath = (new File(".").getCanonicalPath() + "/appconfig-local").replace('\\', '/'); + System.setProperty("CONFIG_HOME", configHomePath); + } + } + + /** + * Inits the. + * + * @throws Exception the exception + */ +/* @Before + public void init() throws Exception { + commonRequest = HttpServletHelper.getMockHttpServletRequest(); + responseStringWriter = new StringWriter(); + printWriter = new PrintWriter(responseStringWriter); + commonResponse = HttpServletHelper.getMockHttpServletResponse(printWriter); + mapper = new ObjectMapper(); + + // permit serialization of objects with no members + mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false); + + rand = new SecureRandom(); + + loader = Mockito.mock(OxmModelLoader.class); + descriptors = new HashMap<String, OxmEntityDescriptor>(); + + esConfig = new SearchServiceConfig(); + suggestionConfig = SuggestionConfig.getConfig(); + + // Use SearchServiceWrapper and VnfSearchService for suggestionConfig + Map<String, String> svcs = new HashMap<String, String>(); + svcs.put("autosuggestIndexname", "SearchServiceWrapper"); + svcs.put("indexName", "VnfSearchService"); + suggestionConfig.setSearchIndexToSearchService(svcs); + + esConfig.setIndexName("esi-localhost"); + esConfig.setType("default"); + + searchAdapter = Mockito.mock(SearchAdapter.class); + vnfSearchService = Mockito.mock(VnfSearchService.class); + + initializeEntityDescriptors(); + + searchWrapper = new SearchServiceWrapper(); + searchWrapper.setSasConfig(esConfig); + searchWrapper.setSearch(searchAdapter); + searchWrapper.setVnfSearch(vnfSearchService); + searchWrapper.setSuggestionConfig(suggestionConfig); + searchWrapper.setOxmModelLoader(loader); + } + + @Test + public void validateAccessors() { + assertNotNull("Vnf Search Service should not be null", searchWrapper.getVnfSearch()); + } + + @Test + public void validateInitializer() { + + try { + assertNotNull("Oxm Model loader should not be null", searchWrapper.getOxmModelLoader()); + assertNotNull("SearchAbstractionConfig should not be null", searchWrapper.getSasConfig()); + assertNotNull("SearchAdapter should not be null", searchWrapper.getSearch()); + assertNotNull("Suggestion Config should not be null", searchWrapper.getSuggestionConfig()); + assertNotNull("VnfSearchService should not be null", searchWrapper.getVnfSearch()); + + searchWrapper.setOxmModelLoader(null); + searchWrapper.setSasConfig(null); + searchWrapper.setSearch(null); + searchWrapper.setSuggestionConfig(null); + searchWrapper.setVnfSearch(null); + + assertNull("Oxm Model loader should be null", searchWrapper.getOxmModelLoader()); + assertNull("SearchAbstractionConfig should be null", searchWrapper.getSasConfig()); + assertNull("SearchAdapter should be null", searchWrapper.getSearch()); + assertNull("Suggestion Config should be null", searchWrapper.getSuggestionConfig()); + assertNull("VnfSearchService should be null", searchWrapper.getVnfSearch()); + + } catch (Exception exc) { + fail("Servlet Initialization Failed with error = " + exc.getMessage()); + } + + } + + /** + * Test doGet() and doPost() for a non-existent end-point. A test objective would be + * to either return a 404 Not Found. + */ + /* @Test + public void validateMdcContextLoggingVariablesWhenExplicitlySet() { + + final String transactionId = "1234"; + final String serviceName = "AAI-UI"; + final String partnerName = "SparkyApp"; + + HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId); + HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", partnerName); + + HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/"); + + try { + + /* + * Testing the doGet() operation will hit the doPost() operation in the servlet as well + */ + + /* OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse); + + assertEquals(transactionId,MDC.get(MdcContext.MDC_REQUEST_ID)); + assertEquals(serviceName,MDC.get(MdcContext.MDC_SERVICE_NAME)); + assertEquals(partnerName,MDC.get(MdcContext.MDC_PARTNER_NAME)); + + } catch (Exception exc) { + exc.printStackTrace(); + fail("Unexpected exception = " + exc.getLocalizedMessage()); + } + + } + + /** + * Test doGet() and doPost() for a non-existent end-point. A test objective would be + * to either return a 404 Not Found. + */ + /* @Test + public void validateMdcContextLoggingVariablesWhenNotExplicitlySet() { + + /*final String transactionId = "1234"; + final String serviceName = "AAI-UI"; + final String partnerName = "SparkyApp"; + + HttpServletHelper.assignRequestHeader(commonRequest, "X-TransactionId", transactionId); + HttpServletHelper.assignRequestHeader(commonRequest, "X-FromAppId", serviceName);*/ + +/* HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/"); + + try { + + /* + * Testing the doGet() operation will hit the doPost() operation in the servlet as well + */ + + /* OperationResult result = doEvaluationTestMDC(true, commonRequest, commonResponse); + + assertNotNull(MDC.get(MdcContext.MDC_REQUEST_ID)); + assertNotNull(MDC.get(MdcContext.MDC_SERVICE_NAME)); + assertNotNull(MDC.get(MdcContext.MDC_PARTNER_NAME)); + + } catch (Exception exc) { + exc.printStackTrace(); + fail("Unexpected exception = " + exc.getLocalizedMessage()); + } + + } + + + + /** + * Test doGet() and doPost() for a non-existent end-point. + */ + /* @Test + public void validateViewAndInspectSearchError_invalidRequestUri() { + + HttpServletHelper.assignRequestUri(commonRequest, "search/this/path/does/not/exist/"); + + try { + + /* + * Testing the doGet() operation will hit the doPost() operation in the servlet as well + */ +/* + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + assertEquals(404, result.getResultCode()); + assertTrue(result.getResult().contains("Ignored request-uri")); + + } catch (Exception exc) { + exc.printStackTrace(); + fail("Unexpected exception = " + exc.getLocalizedMessage()); + } + + } + + /** + * Test doGet() and doPost() for Unified Query Search success path + */ +/* @Test + public void validateQuerySearch_successPath() { + + try { + + QuerySearchEntity searchEntity = new QuerySearchEntity(); + searchEntity.setMaxResults("10"); + searchEntity.setQueryStr("the quick brown fox"); + + HttpServletHelper.assignRequestUri(commonRequest, "search/querysearch"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), + NodeUtils.convertObjectToJson(searchEntity, false)); + + + // set search-abstraction-response that we expect to get back from real system, but stubbed through a mock + // to fulfill collaborator behavior + + OperationResult mockedEntitySearchResponse = new OperationResult(); + mockedEntitySearchResponse.setResultCode(200); + mockedEntitySearchResponse.setResult(NodeUtils.convertObjectToJson( + SearchAbstractionEntityBuilder.getSuccessfulEntitySearchResponse(), false)); + + // TODO: make parameters expect certain values to lock in invocation attempt against a specific input sequence + Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())) + .thenReturn(mockedEntitySearchResponse); + + List<SuggestionEntity> autoSuggestions = new ArrayList<SuggestionEntity>(); + + autoSuggestions.add(new SuggestionEntity("1234", "vnf", "VNFs", null)); + autoSuggestions.add(new SuggestionEntity("1111", "vnf", "Created VNFs", null)); + autoSuggestions.add(new SuggestionEntity("1122", "vnf", "ACTIVE VNFs", null)); + autoSuggestions.add(new SuggestionEntity("2233", "vnf", "ACTIVE and Error VNFs", null)); + autoSuggestions.add(new SuggestionEntity("3344", "vnf", "ACTIVE and NOT ORCHESTRATED VNFs", null)); + autoSuggestions.add(new SuggestionEntity("4455", "vnf", "ACTIVE and Running VNFs", null)); + autoSuggestions.add(new SuggestionEntity("5566", "vnf", "Activated VNFs", null)); + autoSuggestions.add(new SuggestionEntity("6677", "vnf", "CAPPED VNFs", null)); + autoSuggestions.add(new SuggestionEntity("7788", "vnf", "CAPPED and Created VNFs", null)); + + Mockito.when(vnfSearchService.getSuggestionsResults(Mockito.anyObject(), Mockito.anyInt())) + .thenReturn(autoSuggestions); + + /* + * Testing the doGet() operation will hit the doPost() operation in the servlet as well + */ +/* + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + + assertEquals(200, result.getResultCode()); + + SearchResponse searchResponse = mapper.readValue(result.getResult(), SearchResponse.class); + + assertEquals(10, searchResponse.getTotalFound()); + + int numVnf = 0; + int numViewInspect = 0; + + for ( SuggestionEntity suggestion : searchResponse.getSuggestions()) { + + if ( VNF_ROUTE.equals(suggestion.getRoute())) { + numVnf++; + } else if ( VIEW_INSPECT_ROUTE.equals(suggestion.getRoute())) { + numViewInspect++; + } + } + + assertEquals(5, numVnf); + assertEquals(5, numViewInspect); + + //assertTrue(result.getResult().contains("Ignored request-uri")); + + } catch (Exception exc) { + fail("Unexpected exception = " + exc.getLocalizedMessage()); + } + + } + + /** + * Test doGet() and doPost() for Unified Query Search success path + */ + /*@Test + @Ignore + public void validateSummaryByEntityTypeCount_successPath() { + + try { + + HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype/count"); + + Map<String,String> payloadFields = new HashMap<String,String>(); + payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd"); + payloadFields.put("groupby", "orchestration-status"); + + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false)); + + /* + * In this test we don't want to mock the vnf search service, only it's collaborator + * interactions with a REST endpoint. + */ + /* vnfSearchService = new VnfSearchService(); + vnfSearchService.setSearch(searchAdapter); + searchWrapper.setVnfSearch(vnfSearchService); + + /* + * The first network response to mock is the one to elastic search to get the suggestion entity by hash id + * + * http://localhost:9200/entityautosuggestindex-localhost/_search + * {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}} + */ + /* + AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse(); + + elasticResponse.setTook(1); + + elasticResponse.setTimedOut(false); + elasticResponse.addShard("total", "5"); + elasticResponse.addShard("successful", "5"); + elasticResponse.addShard("failed", "0"); + + AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity(); + elasticHit.setIndex("entityautosuggestindex-localhost"); + elasticHit.setType("default"); + elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"); + elasticHit.setScore("1"); + + AutoSuggestDocumentEntityFields suggestDocFields = new AutoSuggestDocumentEntityFields(); + suggestDocFields.addInput("VNFs"); + suggestDocFields.addInput("generic-vnfs"); + suggestDocFields.setOutput("VNFs"); + suggestDocFields.setPayload(new PayloadEntity()); + suggestDocFields.setWeight(100); + + AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity(); + autoSuggestDoc.setFields(suggestDocFields); + + elasticHit.setSource(autoSuggestDoc); + + AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity(); + hits.addHit(elasticHit); + + elasticResponse.setHits(hits); + + + OperationResult mockedSearchResponse = new OperationResult(); + mockedSearchResponse.setResultCode(200); + + mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false)); + + + /* + * The second response is the count API dip to elastic search + */ + /* + ElasticSearchCountResponse countResponse = new ElasticSearchCountResponse(); + countResponse.setCount(3170); + countResponse.addShard("total", "5"); + countResponse.addShard("successful", "5"); + countResponse.addShard("failed", "0"); + + OperationResult searchResponseForCount = new OperationResult(); + searchResponseForCount.setResultCode(200); + + searchResponseForCount.setResult(NodeUtils.convertObjectToJson(countResponse, false)); + + // TODO: make parameters expect certain values to lock in invocation attempt against a specific input sequence + Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())) + .thenReturn(mockedSearchResponse).thenReturn(searchResponseForCount); + + + /* + * Testing the doGet() operation will hit the doPost() operation in the servlet as well + */ +/* + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + + assertEquals(200, result.getResultCode()); + + // + //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170} + + EntityCountResponse entityCountResponse = mapper.readValue(result.getResult(), EntityCountResponse.class); + + assertEquals(3170, entityCountResponse.getCount()); + + } catch (Exception exc) { + fail("Unexpected exception = " + exc.getLocalizedMessage()); + } + + } + + + /** + * Test doGet() and doPost() for Unified Query Search success path + */ + /*@Test + @Ignore + public void validateSummaryByEntityType_successPath() { + + try { + + HttpServletHelper.assignRequestUri(commonRequest, "search/summarybyentitytype"); + + Map<String,String> payloadFields = new HashMap<String,String>(); + payloadFields.put("hashId", "662d1b57c31df70d7ef57ec53c0ace81578ec77b6bc5de055a57c7547ec122dd"); + payloadFields.put("groupby", "orchestration-status"); + + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), NodeUtils.convertObjectToJson(payloadFields, false)); + + /* + * In this test we don't want to mock the vnf search service, only it's collaborator + * interactions with a REST endpoint. + */ + /* vnfSearchService = new VnfSearchService(); + vnfSearchService.setSearch(searchAdapter); + searchWrapper.setVnfSearch(vnfSearchService); + + /* + * The first network response to mock is the one to elastic search to get the suggestion entity by hash id + * + * http://localhost:9200/entityautosuggestindex-localhost/_search + * {"query":{"term":{"_id":"2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"}}} + */ + + /* AutoSuggestElasticSearchResponse elasticResponse = new AutoSuggestElasticSearchResponse(); + + elasticResponse.setTook(1); + + elasticResponse.setTimedOut(false); + elasticResponse.addShard("total", "5"); + elasticResponse.addShard("successful", "5"); + elasticResponse.addShard("failed", "0"); + + AutoSuggestElasticHitEntity elasticHit = new AutoSuggestElasticHitEntity(); + elasticHit.setIndex("entityautosuggestindex-localhost"); + elasticHit.setType("default"); + elasticHit.setId("2172a3c25ae56e4995038ffbc1f055692bfc76c0b8ceda1205bc745a9f7a805d"); + elasticHit.setScore("1"); + + AutoSuggestDocumentEntityFields suggestDocFields = new AutoSuggestDocumentEntityFields(); + suggestDocFields.addInput("VNFs"); + suggestDocFields.addInput("generic-vnfs"); + suggestDocFields.setOutput("VNFs"); + suggestDocFields.setPayload(new PayloadEntity()); + suggestDocFields.setWeight(100); + + AutoSuggestDocumentEntity autoSuggestDoc = new AutoSuggestDocumentEntity(); + autoSuggestDoc.setFields(suggestDocFields); + + elasticHit.setSource(autoSuggestDoc); + + AutoSuggestElasticHitsEntity hits = new AutoSuggestElasticHitsEntity(); + hits.addHit(elasticHit); + + elasticResponse.setHits(hits); + + + OperationResult mockedSearchResponse = new OperationResult(); + mockedSearchResponse.setResultCode(200); + + mockedSearchResponse.setResult(NodeUtils.convertObjectToJson(elasticResponse, false)); + + + /* + * The second response is the aggregation API dip to elastic search + */ + /* + ElasticSearchAggegrationResponse aggResponse = new ElasticSearchAggegrationResponse(); + + aggResponse.setTook(20); + aggResponse.setTimedOut(false); + + aggResponse.addShard("total","5"); + aggResponse.addShard("successful","5"); + aggResponse.addShard("failed","0"); + + ElasticHitsEntity hitsEntity = new ElasticHitsEntity(); + + hitsEntity.setTotal(3170); + hitsEntity.setMaxScore(0); + + aggResponse.setHits(hitsEntity); + + ElasticSearchAggregation defaultAggregation = new ElasticSearchAggregation(); + + defaultAggregation.setDocCountErrorUpperBound(0); + defaultAggregation.setSumOtherDocCount(0); + defaultAggregation.addBucket(new BucketEntity("created",1876)); + defaultAggregation.addBucket(new BucketEntity("Created",649)); + defaultAggregation.addBucket(new BucketEntity("Activated",158)); + defaultAggregation.addBucket(new BucketEntity("active",59)); + defaultAggregation.addBucket(new BucketEntity("NOT ORCHESTRATED",42)); + defaultAggregation.addBucket(new BucketEntity("Pending-Create",10)); + defaultAggregation.addBucket(new BucketEntity("Running",9)); + defaultAggregation.addBucket(new BucketEntity("Configured",7)); + defaultAggregation.addBucket(new BucketEntity("pending-create",7)); + defaultAggregation.addBucket(new BucketEntity("Error",3)); + defaultAggregation.addBucket(new BucketEntity("planned",3)); + defaultAggregation.addBucket(new BucketEntity("PLANNED",2)); + defaultAggregation.addBucket(new BucketEntity("ERROR",1)); + defaultAggregation.addBucket(new BucketEntity("RUNNING",1)); + defaultAggregation.addBucket(new BucketEntity("example-orchestration-status-val-6176",1)); + + aggResponse.addAggregation("default", defaultAggregation); + + OperationResult searchResponseForAggregation = new OperationResult(); + searchResponseForAggregation.setResultCode(200); + + searchResponseForAggregation.setResult(NodeUtils.convertObjectToJson(aggResponse, false)); + + // TODO: make parameters expect certain values to lock in invocation attempt against a specific input sequence + Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())) + .thenReturn(mockedSearchResponse).thenReturn(searchResponseForAggregation); + + + /* + * Testing the doGet() operation will hit the doPost() operation in the servlet as well + */ +/* + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + + assertEquals(200, result.getResultCode()); + + // + //{"shards":{"total":"5","failed":"0","successful":"5"},"count":3170} + + GroupByAggregationResponseEntity groupByResponse = mapper.readValue(result.getResult(), GroupByAggregationResponseEntity.class); + + assertEquals(2828, groupByResponse.getAggEntity().getTotalChartHits()); + assertEquals(15, groupByResponse.getAggEntity().getBuckets().size()); + + } catch (Exception exc) { + fail("Unexpected exception = " + exc.getLocalizedMessage()); + } + } + + @Test + public void validateHandleDiscoverSearchFilters_vnfSearchViewName() throws IOException { + String requestBody = "{ \"viewName\" : \"VnfSearch\" }"; + String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\"},{\"filterId\":\"2\",\"filterName\":\"Prov-Status\",\"displayName\":\"Provisioning Status\",\"dataType\":\"list\"}]}"; + + HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilters"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse, result.getResult().trim()); + } + + @Test + public void validateFilterAggregation_successPath() { + String requestBodyFilePath = "filters/filterAggregationEndpoint_successPath_requestBody.json"; + String expectedResponseFilePath = "filters/filterAggregationEndpoint_successPath_expectedResponse.json"; + String operationResultFilePath = "filters/filterAggregationEndpoint_successPath_operationResult.json"; + + String requestBody = getResourceFileContents(requestBodyFilePath); + String expectedResponse = getResourceFileContents(expectedResponseFilePath); + + HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + OperationResult operationResult = new OperationResult(); + operationResult.setResult(getResourceFileContents(operationResultFilePath)); + + vnfSearchService = new VnfSearchService(); + vnfSearchService.setSearch(searchAdapter); + searchWrapper.setVnfSearch(vnfSearchService); + + Mockito.when(searchAdapter.doPost(anyString(), anyString(), anyString())).thenReturn(operationResult); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse.trim(), result.getResult().trim()); + } + + @Test + public void validateFilterAggregation_emptyRequestFilterArray() throws IOException { + String requestBodyFilePath = "filters/filterAggregationEndpoint_emptyRequestFilterArray_requestBody.json"; + String expectedResponseFilePath = "filters/filterAggregationEndpoint_emptyRequestFilterArray_expectedResponse.json"; + + String requestBody = getResourceFileContents(requestBodyFilePath); + String expectedResponse = getResourceFileContents(expectedResponseFilePath); + + HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + vnfSearchService = new VnfSearchService(); + vnfSearchService.setSearch(searchAdapter); + searchWrapper.setVnfSearch(vnfSearchService); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse.trim(), result.getResult().trim()); + } + + @Test + public void validateFilterAggregation_emptyRequestBody() throws IOException { + String expectedResponseFilePath = "filters/filterAggregationEndpoint_emptyRequestBody_expectedResponse.json"; + + String expectedResponse = getResourceFileContents(expectedResponseFilePath); + + HttpServletHelper.assignRequestUri(commonRequest, "search/filterAggregation"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), "{}"); + + vnfSearchService = new VnfSearchService(); + vnfSearchService.setSearch(searchAdapter); + searchWrapper.setVnfSearch(vnfSearchService); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse.trim(), result.getResult().trim()); + } + + @Test + public void validateHandleDiscoverSearchFilters_diuiViewName() throws IOException { + String requestBody = "{ \"viewName\" : \"dataIntegrity\" }"; + String expectedResponse = "{\"filters\":[{\"filterId\":\"3\",\"filterName\":\"Severity\",\"displayName\":\"Severity\",\"dataType\":\"list\"},{\"filterId\":\"4\",\"filterName\":\"Category\",\"displayName\":\"Category\",\"dataType\":\"list\"},{\"filterId\":\"5\",\"filterName\":\"Date\",\"displayName\":\"Date\",\"dataType\":\"date\"},{\"filterId\":\"6\",\"filterName\":\"EntityType\",\"displayName\":\"Entity Type\",\"dataType\":\"list\"}]}"; + + HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilters"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse, result.getResult().trim()); + } + + @Test + public void validateHandleDiscoverSearchFilterValues_validId() throws IOException { + String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"1\" } ] }"; + String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"created\",\"displayName\":\"created\"}]}]}"; + + HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class); + searchWrapper.setFilteredSearchHelper(filteredSearchHelper); + + UiFilterValueEntity uiFilterValueEntity = new UiFilterValueEntity(null, "created", "created"); + + UiFilterEntity uiFilterEntity = new UiFilterEntity(); + uiFilterEntity.setDataType("list"); + uiFilterEntity.setDisplayName("Orchestration Status"); + uiFilterEntity.setFilterId("1"); + uiFilterEntity.setFilterName("Orchestration-Status"); + uiFilterEntity.addFilterValue(uiFilterValueEntity); + + UiFiltersEntity uiFiltersEntity = new UiFiltersEntity(); + uiFiltersEntity.addFilter(uiFilterEntity); + + Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList())) + .thenReturn(uiFiltersEntity); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse, result.getResult().trim()); + } + + @Test + public void validateHandleDiscoverSearchFilterValues_multipleValidIds() throws IOException { + String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"1\" }, { \"filterId\" : \"2\" } ] }"; + String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"created\",\"displayName\":\"created\"}]},{\"filterId\":\"2\",\"filterName\":\"Prov-Status\",\"displayName\":\"Provisioning Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"active\",\"displayName\":\"active\"}]}]}"; + + HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class); + searchWrapper.setFilteredSearchHelper(filteredSearchHelper); + + UiFiltersEntity uiFiltersEntity = new UiFiltersEntity(); + + UiFilterValueEntity uiFilter1ValueEntity = new UiFilterValueEntity(null, "created", "created"); + UiFilterEntity uiFilterEntity1 = new UiFilterEntity(); + uiFilterEntity1.setDataType("list"); + uiFilterEntity1.setDisplayName("Orchestration Status"); + uiFilterEntity1.setFilterId("1"); + uiFilterEntity1.setFilterName("Orchestration-Status"); + uiFilterEntity1.addFilterValue(uiFilter1ValueEntity); + uiFiltersEntity.addFilter(uiFilterEntity1); + + UiFilterValueEntity uiFilter2ValueEntity = new UiFilterValueEntity(null, "active", "active"); + UiFilterEntity uiFilterEntity2 = new UiFilterEntity(); + uiFilterEntity2.setDataType("list"); + uiFilterEntity2.setDisplayName("Provisioning Status"); + uiFilterEntity2.setFilterId("2"); + uiFilterEntity2.setFilterName("Prov-Status"); + uiFilterEntity2.addFilterValue(uiFilter2ValueEntity); + uiFiltersEntity.addFilter(uiFilterEntity2); + + Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList())) + .thenReturn(uiFiltersEntity); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse, result.getResult().trim()); + } + + @Test + public void validateHandleDiscoverSearchFilterValues_invalidId() throws IOException { + String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"999\" } ] }"; + String expectedResponse = "{\"filters\":[]}"; + + HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse, result.getResult().trim()); + } + + @Test + public void validateHandleDiscoverSearchFilterValues_validIdAndInvalidId() throws IOException { + String requestBody = "{ \"filterIdList\" : [ { \"filterId\" : \"1\" }, { \"filterId\" : \"999\" } ] }"; + String expectedResponse = "{\"filters\":[{\"filterId\":\"1\",\"filterName\":\"Orchestration-Status\",\"displayName\":\"Orchestration Status\",\"dataType\":\"list\",\"filterValueList\":[{\"filterValue\":\"created\",\"displayName\":\"created\"}]}]}"; + + HttpServletHelper.assignRequestUri(commonRequest, "search/discoverFilterValues"); + HttpServletHelper.setRequestPayload(commonRequest, MediaType.JSON_UTF_8.toString(), requestBody); + + FilteredSearchHelper filteredSearchHelper = Mockito.mock(FilteredSearchHelper.class); + searchWrapper.setFilteredSearchHelper(filteredSearchHelper); + + UiFilterValueEntity uiFilterValueEntity = new UiFilterValueEntity(null, "created", "created"); + + UiFilterEntity uiFilterEntity = new UiFilterEntity(); + uiFilterEntity.setDataType("list"); + uiFilterEntity.setDisplayName("Orchestration Status"); + uiFilterEntity.setFilterId("1"); + uiFilterEntity.setFilterName("Orchestration-Status"); + uiFilterEntity.addFilterValue(uiFilterValueEntity); + + UiFiltersEntity uiFiltersEntity = new UiFiltersEntity(); + uiFiltersEntity.addFilter(uiFilterEntity); + + Mockito.when(filteredSearchHelper.doFilterEnumeration(Mockito.anyList())) + .thenReturn(uiFiltersEntity); + + OperationResult result = doEvaluation(true, commonRequest, commonResponse); + + assertEquals(expectedResponse, result.getResult().trim()); + } + + /** + * Builds the resource entity descriptor. + * + * @param entityType the entity type + * @param attributeNames the attribute names + * @param searchableAttributes the searchable attributes + * @return the oxm entity descriptor + */ +/* @SuppressWarnings("unchecked") + private OxmEntityDescriptor buildResourceEntityDescriptor(String entityType, + String attributeNames, String searchableAttributes) { + OxmEntityDescriptor descriptor = new OxmEntityDescriptor(); + descriptor.setEntityName(entityType); + + if (attributeNames != null) { + descriptor.setPrimaryKeyAttributeName(Arrays.asList(attributeNames.split(","))); + } + + if (searchableAttributes != null) { + descriptor.setSearchableAttributes(Arrays.asList(searchableAttributes.split(","))); + } + + return descriptor; + } + + /** + * Initialize entity descriptors. + */ + /*private void initializeEntityDescriptors() { + descriptors.put("customer", + buildResourceEntityDescriptor("customer", "service-instance-id", "f1,f2,f3")); + } + + /** + * Builds the view and inspect search request. + * + * @param maxResults the max results + * @param queryStr the query str + * @return the string + * @throws JsonProcessingException the json processing exception + */ + /* public String buildViewAndInspectSearchRequest(Integer maxResults, String queryStr) + throws JsonProcessingException { + + /* + * { "maxResults" : "10", "searchStr" : "<search bar text>" } + */ +/* + ObjectNode rootNode = mapper.createObjectNode(); + + if (maxResults != null) { + rootNode.put("maxResults", maxResults); + } + + if (queryStr != null) { + rootNode.put("queryStr", queryStr); + } + + return NodeUtils.convertObjectToJson(rootNode, true); + + } + + public String getResourceFileContents(String filePath) { + StringBuilder result = new StringBuilder(""); + + ClassLoader classLoader = getClass().getClassLoader(); + File file = new File(classLoader.getResource(filePath).getFile()); + + try (Scanner scanner = new Scanner(file)) { + while (scanner.hasNextLine()) { + String line = scanner.nextLine(); + result.append(line).append("\n"); + } + + scanner.close(); + + } catch (IOException e) { + e.printStackTrace(); + } + + return result.toString(); + } + + + /** + * Do evaluation. + * + * @param doGet the do get + * @param req the req + * @param res the res + * @return the string + *//* + private OperationResult doEvaluationTestMDC(boolean doGet, HttpServletRequest req, HttpServletResponse res) { + + /* + * Test method invocation + */ +/* + SearchServlet searchServlet = new SearchServlet(); + try { + searchServlet.init(); + } catch (ServletException e) { + // TODO Auto-generated catch block + e.printStackTrace(); + } + ArgumentCaptor<Integer> responseCodeCaptor = ArgumentCaptor.forClass(Integer.class); + + try { + if (doGet) { + searchServlet.doGet(req, res); + } else { + searchServlet.doPost(req, res); + } + } catch (ServletException exc) { + fail(ExceptionHelper.extractStackTraceElements(5, exc)); + } catch (IOException exc) { + fail(ExceptionHelper.extractStackTraceElements(5, exc)); + } + + responseStringWriter.flush(); + Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture()); + + OperationResult result = new OperationResult(); + + result.setResultCode(responseCodeCaptor.getValue()); + result.setResult(responseStringWriter.toString()); + + return result; + + } + + /** + * Do evaluation. + * + * @param doGet the do get + * @param req the req + * @param res the res + * @return the string + *//* + private OperationResult doEvaluation(boolean doGet, HttpServletRequest req, HttpServletResponse res) { + + /* + * Test method invocation + */ + /* ArgumentCaptor<Integer> responseCodeCaptor = ArgumentCaptor.forClass(Integer.class); + + try { + if (doGet) { + searchWrapper.doGet(req, res); + } else { + searchWrapper.doPost(req, res); + } + } catch (ServletException exc) { + fail(ExceptionHelper.extractStackTraceElements(5, exc)); + } catch (IOException exc) { + fail(ExceptionHelper.extractStackTraceElements(5, exc)); + } + + responseStringWriter.flush(); + Mockito.verify(commonResponse, Mockito.atLeast(1)).setStatus(responseCodeCaptor.capture()); + + OperationResult result = new OperationResult(); + + result.setResultCode(responseCodeCaptor.getValue()); + result.setResult(responseStringWriter.toString()); + + return result; + + } + +}*/ diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchableGroupsTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchableGroupsTest.java new file mode 100644 index 0000000..3aaf17a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchableGroupsTest.java @@ -0,0 +1,73 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect; + +/** + * The Class SearchableGroupsTest. + */ +public class SearchableGroupsTest { + + static final String TEST_RESOURCE_PATH = "/src/test/resources"; + + static final String GOOD_TEST_CONFIG = "{\"groups\": [" + "{" + "\"group-name\" : \"inventory\"," + + "\"search-paths\" : [\"cloud-infrastructure\", \"business\", \"network\"]" + "}," + "{" + + "\"group-name\" : \"cloud-infrastructure\"," + + "\"search-paths\" : [\"complexes\", \"cloud-regions\", \"pservers\"]" + "}" + "]" + "}"; + /* + * @Before public void init() throws NoSuchFieldException, SecurityException, + * IllegalArgumentException, IllegalAccessException { Field instance = + * SearchableGroups.class.getDeclaredField("instance"); instance.setAccessible(true); + * instance.set(null, null); } + * + * @Test public void test_FileNotFound() throws ElasticSearchOperationException { + * System.setProperty("AJSC_HOME", ""); SearchableGroups testGroups = + * SearchableGroups.getTestInstance(); assertTrue(testGroups.getGroups().isEmpty()); } + * + * @Test public void test_FileFoundWithProperlyFormatedConfig() throws + * ElasticSearchOperationException { ResolverUtils testUtils = + * Mockito.mock(ResolverUtils.class); + * Mockito.when(testUtils.getConfigSettings(anyString())).thenReturn(GOOD_TEST_CONFIG); + * SearchableGroups testGroups = SearchableGroups.getTestInstance(); + * + * testGroups.setUtils(testUtils); testGroups.initSearchableGroups(); + * + * assertFalse(testGroups.getGroups().isEmpty()); + * + * assertFalse(testGroups.getSearchableGroups("inventory").isEmpty()); } + * + * @Test public void test_FileFoundGroupDoesNotExist() throws + * ElasticSearchOperationException { + * ResolverUtils testUtils = Mockito.mock(ResolverUtils.class); + * Mockito.when(testUtils.getConfigSettings(anyString())).thenReturn(GOOD_TEST_CONFIG); + * SearchableGroups testGroups = SearchableGroups.getTestInstance(); + * + * testGroups.setUtils(testUtils); testGroups.initSearchableGroups(); + * + * assertFalse(testGroups.getGroups().isEmpty()); + * + * assertEquals(null, testGroups.getSearchableGroups("Test")); } + */ +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/ViewAndInspectSearchRequestTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/ViewAndInspectSearchRequestTest.java new file mode 100644 index 0000000..7c05143 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/ViewAndInspectSearchRequestTest.java @@ -0,0 +1,81 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect; + + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNull; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.search.entity.QuerySearchEntity; + +/** + * The Class ViewAndInspectSearchRequestTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class ViewAndInspectSearchRequestTest { + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception {} + + /** + * Validate basic construction. + */ + @Test + public void validateBasicConstruction() { + + QuerySearchEntity request = new QuerySearchEntity(); + + // test constructor defaults + assertNull(request.getQueryStr()); + assertEquals("10", request.getMaxResults()); + + request.setMaxResults("500"); + assertEquals("500", request.getMaxResults()); + + assertNull(request.getSearchTerms()); + + request.setQueryStr(""); + assertEquals(1, request.getSearchTerms().length); + + request.setQueryStr("t1"); + assertEquals(1, request.getSearchTerms().length); + + request.setQueryStr("t1 t2 t3"); + assertEquals(3, request.getSearchTerms().length); + + } + +} + diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/VisualizationTransformerTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/VisualizationTransformerTest.java new file mode 100644 index 0000000..3f5988f --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/VisualizationTransformerTest.java @@ -0,0 +1,77 @@ +package org.onap.aai.sparky.viewandinspect; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.subscription.config.SubscriptionConfig; +import org.onap.aai.sparky.util.OxmModelAndProcessorHelper; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; +import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode; +import org.onap.aai.sparky.viewandinspect.entity.GraphMeta; +import org.onap.aai.sparky.viewandinspect.entity.SparkyGraphNode; +import org.onap.aai.sparky.viewandinspect.services.VisualizationTransformer; +import org.onap.aai.sparky.viewandinspect.util.SchemaVisualizationTestDataBuilder; + +import com.fasterxml.jackson.core.JsonParseException; +import com.fasterxml.jackson.databind.DeserializationFeature; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectMapper; + +public class VisualizationTransformerTest { + + VisualizationTransformer testTransformer; + VisualizationConfigs visConfig; + SubscriptionConfig subConfig; + GraphMeta graphMeta; + OxmEntityLookup oxmEntityLookup; + + + @Before + public void init() throws Exception { + this.visConfig = new VisualizationConfigs(); + this.subConfig = new SubscriptionConfig(); + this.graphMeta = new GraphMeta(); + this.oxmEntityLookup = OxmModelAndProcessorHelper.getInstance().getOxmEntityLookup(); + + this.testTransformer = new VisualizationTransformer(visConfig, subConfig); + } + + @Test + public void testGenerateVisualizationOutput() throws JsonParseException, JsonMappingException, IOException { + ObjectMapper mapper = new ObjectMapper(); + mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false); + + JsonNode elasticValue = mapper.readValue(SchemaVisualizationTestDataBuilder.getRawRootNode(), JsonNode.class); + + } + + public ActiveInventoryNode generateActiveInventoryNode(String id, String type, String selfLink, String primaryKeyName, String primaryKeyValue) { + ActiveInventoryNode testAin = new ActiveInventoryNode(visConfig, oxmEntityLookup); + + testAin.setNodeId(id); + testAin.setEntityType(type); + testAin.setSelfLink(selfLink); + testAin.setPrimaryKeyName(primaryKeyName); + testAin.setPrimaryKeyValue(primaryKeyValue); + + return testAin; + } + + public SparkyGraphNode generateSparkyGraphNode(ActiveInventoryNode ain) { + + SparkyGraphNode testSparkyGraphNode = new SparkyGraphNode(ain, visConfig, subConfig); + + return testSparkyGraphNode; + } + + public Map<String, ActiveInventoryNode> generateFlatNodeArray() { + Map<String, ActiveInventoryNode> nodeArray = new HashMap<String, ActiveInventoryNode>(); + + return nodeArray; + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigTest.java new file mode 100644 index 0000000..5dbf7bb --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigTest.java @@ -0,0 +1,62 @@ +package org.onap.aai.sparky.viewandinspect.config; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; + +public class VisualizationConfigTest { + + + private VisualizationConfigs visualConfig; + private ArrayList<String> shallowEntities; + + @Before + public void init() throws Exception { + visualConfig = new VisualizationConfigs(); + shallowEntities = new ArrayList<String>(); + + } + + + @Test + public void updateValues() { + + visualConfig.setShallowEntities(shallowEntities); + assertNotNull(visualConfig.getShallowEntities()); + visualConfig.setMakeAllNeighborsBidirectional(true); + assertTrue(visualConfig.makeAllNeighborsBidirectional()); + visualConfig.setSelectedSearchedNodeClassName("selectedsearchedNodeClass"); + assertNotNull(visualConfig.getSelectedSearchedNodeClassName()); + visualConfig.setGeneralNodeClassName("generalNodeClass"); + assertNotNull(visualConfig.getGeneralNodeClassName()); + visualConfig.setSearchNodeClassName("searchedNodeClass"); + assertNotNull(visualConfig.getSearchNodeClassName()); + visualConfig.setAaiEntityNodeDescriptors("/etc/aaiEntityNodeDescriptors.json"); + assertNotNull(visualConfig.getAaiEntityNodeDescriptors()); + visualConfig.setVisualizationDebugEnabled(true); + assertTrue(visualConfig.isVisualizationDebugEnabled()); + visualConfig.setMaxSelfLinkTraversalDepth(3); + assertEquals(3,visualConfig.getMaxSelfLinkTraversalDepth()); + visualConfig.setNumOfThreadsToFetchNodeIntegrity(25); + assertEquals(25,visualConfig.getNumOfThreadsToFetchNodeIntegrity()); + assertNotNull(visualConfig.toString()); + visualConfig.setAaiEntityNodeDescriptors(null); + assertNull(visualConfig.getAaiEntityNodeDescriptors()); + visualConfig.setGeneralNodeClassName(null); + assertNull(visualConfig.getGeneralNodeClassName()); + visualConfig.setSearchNodeClassName(null); + assertNull(visualConfig.getSearchNodeClassName()); + visualConfig.setSelectedSearchedNodeClassName(null); + assertNull(visualConfig.getSelectedSearchedNodeClassName()); + assertNotNull(visualConfig.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/ActiveInventoryNodeTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/ActiveInventoryNodeTest.java new file mode 100644 index 0000000..8469d1a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/ActiveInventoryNodeTest.java @@ -0,0 +1,128 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class ActiveInventoryNodeTest { + + private ActiveInventoryNode activeInventoryNode; + private ArrayList<String> lst = new ArrayList<String>(); + private OperationResult opResult; + private VisualizationConfigs visualConfig; + private OxmEntityLookup oxmEntityLookup; + + @Before + public void init() throws Exception { + + visualConfig = new VisualizationConfigs(); + oxmEntityLookup = new OxmEntityLookup(); + activeInventoryNode = new ActiveInventoryNode(visualConfig,oxmEntityLookup); + + } + + @Test + public void successfulInitializationAndUpdate() { + + activeInventoryNode.addQueryParam("query-1"); + activeInventoryNode.clearQueryParams(); + activeInventoryNode.addQueryParams(lst); + assertNotNull(activeInventoryNode.getQueryParams()); + assertNull(activeInventoryNode.getOxmModelLoader()); + activeInventoryNode.setSelfLinkDeterminationPending(true); + assertTrue(activeInventoryNode.isSelfLinkDeterminationPending()); + assertNotNull(activeInventoryNode.getState()); + assertNotNull(activeInventoryNode.getComplexGroups()); + assertNotNull(activeInventoryNode.getRelationshipLists()); + activeInventoryNode.setOpResult(opResult); + assertNull(activeInventoryNode.getOpResult()); + activeInventoryNode.setPrimaryKeyName("PrimaryKeyName"); + assertNotNull(activeInventoryNode.getPrimaryKeyName()); + activeInventoryNode.setNodeDepth(2); + assertEquals(2,activeInventoryNode.getNodeDepth()); + activeInventoryNode.setvisualizationConfig(visualConfig); + assertNotNull(activeInventoryNode.getvisualizationConfigs()); + activeInventoryNode.setNodeValidated(true); + assertTrue(activeInventoryNode.isNodeValidated()); + activeInventoryNode.setPrimaryKeyValue("PrimaryKeyValue"); + assertNotNull(activeInventoryNode.getPrimaryKeyValue()); + activeInventoryNode.setIgnoredByFilter(true); + assertTrue(activeInventoryNode.isIgnoredByFilter()); + activeInventoryNode.setNodeIssue(true); + assertTrue(activeInventoryNode.isNodeIssue()); + activeInventoryNode.setProcessedNeighbors(true); + assertTrue(activeInventoryNode.hasProcessedNeighbors()); + activeInventoryNode.setResolvedSelfLink(true); + assertTrue(activeInventoryNode.hasResolvedSelfLink()); + activeInventoryNode.addInboundNeighbor("InBoundNodeID"); + activeInventoryNode.addOutboundNeighbor("OutBoundNodeID"); + assertTrue(activeInventoryNode.hasNeighbors()); + activeInventoryNode.addInboundNeighbor(null); + activeInventoryNode.addOutboundNeighbor(null); + assertNotNull(activeInventoryNode.getInboundNeighbors()); + assertNotNull(activeInventoryNode.getOutboundNeighbors()); + assertTrue(activeInventoryNode.isAtMaxDepth()); + activeInventoryNode.setSelfLinkPendingResolve(true); + assertTrue(activeInventoryNode.isSelfLinkPendingResolve()); + activeInventoryNode.setRootNode(true); + assertTrue(activeInventoryNode.isRootNode()); + activeInventoryNode.setSelflinkRetrievalFailure(true); + assertTrue(activeInventoryNode.isSelflinkRetrievalFailure()); + activeInventoryNode.setSelfLinkProcessed(true); + assertTrue(activeInventoryNode.getSelfLinkProcessed()); + activeInventoryNode.setNodeIntegrityProcessed(true); + assertTrue(activeInventoryNode.getNodeIntegrityProcessed()); + assertFalse(activeInventoryNode.isDirectSelfLink()); + activeInventoryNode.setProcessingErrorOccurred(true); + assertTrue(activeInventoryNode.isProcessingErrorOccurred()); + activeInventoryNode.setNodeId("NodeId-1"); + assertNotNull(activeInventoryNode.getNodeId()); + activeInventoryNode.setSelfLink("selfLinkSet"); + assertNotNull(activeInventoryNode.getSelfLink()); + activeInventoryNode.setEntityType("EntityId-1"); + assertNotNull(activeInventoryNode.getEntityType()); + assertNotNull(activeInventoryNode.dumpNodeTree(true)); + assertNotNull(activeInventoryNode.getProcessingErrorCauses()); + assertNull(activeInventoryNode.calculateEditAttributeUri("Invalid-link")); + assertNull(activeInventoryNode.calculateEditAttributeUri("aai/v[\\d]/")); + activeInventoryNode.processPathedSelfLinkResponse("jsonResp","startNodeType","startNodeResourceKey"); + activeInventoryNode.processPathedSelfLinkResponse(null,"startNodeType","startNodeResourceKey"); + activeInventoryNode.processPathedSelfLinkResponse("","startNodeType","startNodeResourceKey"); + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutputTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutputTest.java new file mode 100644 index 0000000..e1b9931 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutputTest.java @@ -0,0 +1,46 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class D3VisualizationOutputTest { + + private D3VisualizationOutput d3visualization; + private InlineMessage inlineMessage; + private GraphMeta graphMeta; + private ArrayList<SparkyGraphNode> nodes; + private ArrayList<SparkyGraphLink> links; + + @Before + public void init() throws Exception { + + d3visualization = new D3VisualizationOutput(); + nodes = new ArrayList<SparkyGraphNode>(); + links = new ArrayList<SparkyGraphLink>(); + graphMeta = new GraphMeta(); + inlineMessage = new InlineMessage("level-1","Violation"); + } + + + @Test + public void updateValues() { + + d3visualization.setInlineMessage(inlineMessage); + assertNotNull(d3visualization.getInlineMessage()); + d3visualization.addLinks(links); + d3visualization.addNodes(nodes); + d3visualization.setGraphMeta(graphMeta); + assertNotNull(d3visualization.getGraphMeta()); + d3visualization.pegCounter("pegCounter-1"); + + } + +}
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/EntityEntryTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/EntityEntryTest.java new file mode 100644 index 0000000..9584d2b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/EntityEntryTest.java @@ -0,0 +1,94 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.io.IOException; +import java.security.NoSuchAlgorithmException; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.runners.MockitoJUnitRunner; +import org.onap.aai.sparky.viewandinspect.entity.EntityEntry; + +/** + * The Class EntityEntryTest. + */ +@RunWith(MockitoJUnitRunner.class) +public class EntityEntryTest { + + /** + * Inits the. + * + * @throws Exception the exception + */ + @Before + public void init() throws Exception {} + + /** + * Validate basic construction. + * + * @throws NoSuchAlgorithmException the no such algorithm exception + * @throws IOException Signals that an I/O exception has occurred. + */ + @Test + public void validateBasicConstruction() throws NoSuchAlgorithmException, IOException { + + EntityEntry entityEntry = new EntityEntry(); + + entityEntry.setEntityType("ShinyEntityType"); + entityEntry.setEntityPrimaryKeyValue("primary_key_value"); + entityEntry.setSearchTags("t1 t2 t3"); + entityEntry.setEntityId("Id-1"); + + assertEquals("ShinyEntityType", entityEntry.getEntityType()); + assertEquals("primary_key_value", entityEntry.getEntityPrimaryKeyValue()); + assertEquals("t1 t2 t3", entityEntry.getSearchTags()); + assertEquals("Id-1",entityEntry.getEntityId()); + assertNotNull(entityEntry.toString()); + + } + + @Test + public void nullEntry() throws NoSuchAlgorithmException, IOException { + + EntityEntry nullEntityEntry = new EntityEntry(); + + nullEntityEntry.setEntityType(null); + nullEntityEntry.setEntityPrimaryKeyValue(null); + nullEntityEntry.setSearchTags(null); + nullEntityEntry.setEntityId(null); + + assertNotNull(nullEntityEntry.toString()); + + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphMetaTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphMetaTest.java new file mode 100644 index 0000000..bd4e454 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphMetaTest.java @@ -0,0 +1,61 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.EntityTypeAggregation; + +import com.fasterxml.jackson.databind.node.JsonNodeFactory; + +public class GraphMetaTest { + + private GraphMeta graphMeta; + private EntityTypeAggregation entitySummary; + private com.fasterxml.jackson.databind.JsonNode aaiEntityNodeDescriptors; + + + @Before + public void init() throws Exception { + + graphMeta = new GraphMeta(); + entitySummary = new EntityTypeAggregation(); + aaiEntityNodeDescriptors = JsonNodeFactory.instance.objectNode(); + + } + + + @Test + public void updateValues() { + + graphMeta.setEntitySummary(entitySummary); + assertNotNull(graphMeta.getEntitySummary()); + graphMeta.setAaiEntityNodeDescriptors(aaiEntityNodeDescriptors); + assertNotNull(graphMeta.getAaiEntityNodeDescriptors()); + + graphMeta.setNumLinksResolvedSuccessfullyFromCache(3); + assertEquals(3,graphMeta.getNumLinksResolvedSuccessfullyFromCache()); + graphMeta.setNumLinksResolvedSuccessfullyFromServer(25); + assertEquals(25,graphMeta.getNumLinksResolvedSuccessfullyFromServer()); + graphMeta.setNumLinkResolveFailed(3); + assertEquals(3,graphMeta.getNumLinkResolveFailed()); + graphMeta.setNumNodes(25); + assertEquals(25,graphMeta.getNumNodes()); + graphMeta.setNumLinks(3); + assertEquals(3,graphMeta.getNumLinks()); + graphMeta.setRenderTimeInMs(25); + assertEquals(25,graphMeta.getRenderTimeInMs()); + assertNotNull(graphMeta.toString()); + + graphMeta.setEntitySummary(null); + assertNull(graphMeta.getEntitySummary()); + graphMeta.setAaiEntityNodeDescriptors(null); + assertNull(graphMeta.getAaiEntityNodeDescriptors()); + assertNotNull(graphMeta.toString()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphRequestTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphRequestTest.java new file mode 100644 index 0000000..7eebb23 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphRequestTest.java @@ -0,0 +1,61 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.GraphRequest; + +public class GraphRequestTest { + + private GraphRequest graphRequest; + + @Before + public void init() throws Exception { + graphRequest = new GraphRequest(); + + } + + @Test + public void updateValues() { + + graphRequest.setHashId("364c836b7f4c0d2a5b917693719741fa5e576b3da818a"); + assertNotNull(graphRequest.getHashId()); + graphRequest.setIncludeGraphMeta(true); + assertTrue(graphRequest.isIncludeGraphMeta()); + assertNotNull(graphRequest.toString()); + graphRequest.setHashId(null); + assertNull(graphRequest.getHashId()); + assertNotNull(graphRequest.toString()); + + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessageTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessageTest.java new file mode 100644 index 0000000..eebc821 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessageTest.java @@ -0,0 +1,55 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.InlineMessage; + +public class InlineMessageTest { + + private InlineMessage inlineMsg; + + @Before + public void init() throws Exception { + inlineMsg = new InlineMessage("InlineMessage1","InlineMessage2"); + + } + + @Test + public void successfulInitializationAndUpdate() { + + inlineMsg.setLevel("Level-1"); + assertNotNull(inlineMsg.getLevel()); + inlineMsg.setMessage("InlineMessage3"); + assertNotNull(inlineMsg.getMessage()); + assertNotNull(inlineMsg.toString()); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/JsonNodeLinkTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/JsonNodeLinkTest.java new file mode 100644 index 0000000..86b9014 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/JsonNodeLinkTest.java @@ -0,0 +1,57 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; +/* +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.JsonNodeLink; + +public class JsonNodeLinkTest { + + private JsonNodeLink jsonNodeLink; + + @Before + public void init() throws Exception { + jsonNodeLink = new JsonNodeLink(); + + } + + @Test + public void updateValues() { + + jsonNodeLink.setId("ID-1"); + assertNotNull(jsonNodeLink.getId()); + jsonNodeLink.setSource("SourceSet"); + assertNotNull(jsonNodeLink.getSource()); + jsonNodeLink.setTarget("targetSet"); + assertNotNull(jsonNodeLink.getTarget()); + assertNotNull(jsonNodeLink.toString()); + } + +} +*/
\ No newline at end of file diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeDebugTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeDebugTest.java new file mode 100644 index 0000000..b8450be --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeDebugTest.java @@ -0,0 +1,57 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.NodeDebug; + +public class NodeDebugTest { + + + + private NodeDebug nodeDebug; + + @Before + public void init() throws Exception { + nodeDebug = new NodeDebug(); + + } + + @Test + public void updateValues() { + + nodeDebug.setProcessingErrorCauses("NullPointerException"); + assertNotNull(nodeDebug.getProcessingErrorCauses()); + nodeDebug.setProcessingError(true); + assertTrue(nodeDebug.isProcessingError()); + nodeDebug.setMaxTraversalDepthReached(true); + assertTrue(nodeDebug.isMaxTraversalDepthReached()); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeMetaTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeMetaTest.java new file mode 100644 index 0000000..7ebe3c6 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeMetaTest.java @@ -0,0 +1,88 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertTrue; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; +import org.onap.aai.sparky.viewandinspect.enumeration.NodeProcessingState; + +public class NodeMetaTest { + + private NodeMeta nodeMeta; + private NodeProcessingState nodeProcessingState; + private NodeDebug nodeDebug; + private VisualizationConfigs visualizationConfigs; + + @Before + public void init() throws Exception { + this.visualizationConfigs = new VisualizationConfigs(); + nodeMeta = new NodeMeta(visualizationConfigs); + nodeDebug = new NodeDebug(); + + } + + @Test + public void updateValues() { + + nodeMeta.setAtMaxDepth(true); + assertTrue(nodeMeta.isAtMaxDepth()); + nodeMeta.setSelfLinkResolved(true); + assertTrue(nodeMeta.isSelfLinkResolved()); + nodeMeta.setProcessingState(nodeProcessingState.READY); + assertNotNull(nodeMeta.getProcessingState()); + nodeMeta.setProcessingErrorOccurred(true); + assertTrue(nodeMeta.isProcessingErrorOccurred()); + nodeMeta.setHasNeighbors(true); + assertTrue(nodeMeta.isHasNeighbors()); + nodeMeta.setNeighborsProcessed(true); + assertTrue(nodeMeta.isNeighborsProcessed()); + nodeMeta.setNodeDepth(3); + assertEquals(3,nodeMeta.getNodeDepth()); + nodeMeta.setNodeDebug(nodeDebug); + assertNotNull(nodeMeta.getNodeDebug()); + nodeMeta.setClassName("generalNodeClass"); + assertNotNull(nodeMeta.getClassName()); + nodeMeta.setNumInboundNeighbors(34); + assertEquals(34,nodeMeta.getNumInboundNeighbors()); + nodeMeta.setNumOutboundNeighbors(43); + assertEquals(43,nodeMeta.getNumOutboundNeighbors()); + nodeMeta.setSelfLinkResponseTimeInMs(43); + assertEquals(43,nodeMeta.getSelfLinkResponseTimeInMs()); + nodeMeta.setNodeIssue(true); + assertTrue(nodeMeta.isNodeIssue()); + nodeMeta.setNodeValidated(true); + assertTrue(nodeMeta.isNodeValidated()); + nodeMeta.setSearchTarget(true); + assertTrue(nodeMeta.isSearchTarget()); + + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeProcessingTransactionTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeProcessingTransactionTest.java new file mode 100644 index 0000000..a50ea3b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeProcessingTransactionTest.java @@ -0,0 +1,62 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; +import static org.junit.Assert.assertTrue; + +import java.util.ArrayList; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class NodeProcessingTransactionTest { + + + private NodeProcessingTransaction nodeProcessingTransaction; + private ActiveInventoryNode activeInventoryNode; + private ArrayList<String> lst = new ArrayList<String>(); + private OperationResult opResult; + private VisualizationConfigs visualConfig; + private OxmEntityLookup oxmEntityLookup; + + @Before + public void init() throws Exception { + + visualConfig = new VisualizationConfigs(); + oxmEntityLookup = new OxmEntityLookup(); + opResult = new OperationResult(); + activeInventoryNode = new ActiveInventoryNode(visualConfig,oxmEntityLookup); + nodeProcessingTransaction = new NodeProcessingTransaction(); + + } + + + @Test + public void updateValues() { + + nodeProcessingTransaction.setRequestParameters(""); + assertNotNull(nodeProcessingTransaction.getRequestParameters()); + nodeProcessingTransaction.setProcessingNode(activeInventoryNode); + assertNotNull(nodeProcessingTransaction.getProcessingNode()); + nodeProcessingTransaction.setOpResult(opResult); + assertNotNull(nodeProcessingTransaction.getOpResult()); + assertNull(nodeProcessingTransaction.getSelfLink()); + assertNotNull(nodeProcessingTransaction.getSelfLinkWithModifiers()); + assertTrue(nodeProcessingTransaction.processingErrorOccurred()); + assertNotNull(nodeProcessingTransaction.toString()); + nodeProcessingTransaction.setProcessingNode(null); + assertNull(nodeProcessingTransaction.getProcessingNode()); + nodeProcessingTransaction.setOpResult(null); + assertNull(nodeProcessingTransaction.getOpResult()); + assertNull(nodeProcessingTransaction.getSelfLink()); + assertNull(nodeProcessingTransaction.getSelfLinkWithModifiers()); + assertNotNull(nodeProcessingTransaction.toString()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryParamsTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryParamsTest.java new file mode 100644 index 0000000..d1bd60b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryParamsTest.java @@ -0,0 +1,56 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.QueryParams; + +public class QueryParamsTest { + + private QueryParams parameterQuery; + + @Before + public void init() throws Exception { + parameterQuery = new QueryParams(); + + } + + @Test + public void updateValues() { + + parameterQuery.setSearchTargetPrimaryKeyValues("Internet Network"); + assertNotNull(parameterQuery.getSearchTargetPrimaryKeyValues()); + parameterQuery.setSearchTargetNodeId("Internet Network"); + assertNotNull(parameterQuery.getSearchTargetNodeId()); + } + + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryRequestTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryRequestTest.java new file mode 100644 index 0000000..fca4051 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryRequestTest.java @@ -0,0 +1,54 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.QueryRequest; + +public class QueryRequestTest { + + private QueryRequest requestQuery; + + @Before + public void init() throws Exception { + requestQuery = new QueryRequest(); + + } + + @Test + public void updateValues() { + + requestQuery.setHashId("claymore-service-tree"); + assertNotNull(requestQuery.getHashId()); + assertNotNull(requestQuery.toString()); + requestQuery.setHashId(null); + assertNotNull(requestQuery.toString()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelatedToPropertyTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelatedToPropertyTest.java new file mode 100644 index 0000000..48a724b --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelatedToPropertyTest.java @@ -0,0 +1,54 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.RelatedToProperty; + +public class RelatedToPropertyTest { + + private RelatedToProperty relatedToProperty; + + @Before + public void init() throws Exception { + relatedToProperty = new RelatedToProperty(); + + } + + @Test + public void successfulInitializationAndUpdate() { + + relatedToProperty.setPropertyKey("PropertyKey-1"); + assertNotNull(relatedToProperty.getPropertyKey()); + relatedToProperty.setPropertyValue("PropertyValue-1"); + assertNotNull(relatedToProperty.getPropertyValue()); + assertNotNull(relatedToProperty.toString()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipDataTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipDataTest.java new file mode 100644 index 0000000..e20e720 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipDataTest.java @@ -0,0 +1,54 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.RelationshipData; + +public class RelationshipDataTest { + + private RelationshipData relationshipData; + + @Before + public void init() throws Exception { + relationshipData = new RelationshipData(); + + } + + @Test + public void updateValues() { + + relationshipData.setRelationshipKey("RelationshipKey"); + assertNotNull(relationshipData.getRelationshipKey()); + relationshipData.setRelationshipValue("RelationshipValues"); + assertNotNull(relationshipData.getRelationshipValue()); + assertNotNull(relationshipData.toString()); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipListTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipListTest.java new file mode 100644 index 0000000..3e81dbf --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipListTest.java @@ -0,0 +1,32 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; + +public class RelationshipListTest { + + + private Relationship[] relationship; + private RelationshipList relationshipList; + + + @Before + public void init() throws Exception { + + relationship = new Relationship[] {}; + relationshipList = new RelationshipList(); + + } + + + @Test + public void updateValues() { + + relationshipList.setRelationshipList(relationship); + assertNotNull(relationshipList.getRelationshipList()); + assertNotNull(relationshipList.toString()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipTest.java new file mode 100644 index 0000000..2aeffe9 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipTest.java @@ -0,0 +1,43 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + + + +import org.junit.Before; +import org.junit.Test; + +public class RelationshipTest { + + + private Relationship relationship; + private RelationshipData[] relationshipData; + private RelatedToProperty[] relatedToProperty; + + + @Before + public void init() throws Exception { + + relationshipData = new RelationshipData[] {}; + relatedToProperty = new RelatedToProperty[] {}; + relationship = new Relationship(); + + } + + + @Test + public void updateValues() { + + relationship.setRelatedLink(""); + assertNotNull(relationship.getRelatedLink()); + relationship.setRelatedTo("selectedsearchedNodeClass"); + assertNotNull(relationship.getRelatedTo()); + relationship.setRelationshipData(relationshipData); + assertNotNull(relationship.getRelationshipData()); + relationship.setRelatedToProperty(relatedToProperty); + assertNotNull(relationship.getRelatedToProperty()); + assertNotNull(relationship.toString()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchResponseTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchResponseTest.java new file mode 100644 index 0000000..6c08c8c --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchResponseTest.java @@ -0,0 +1,52 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.search.SearchResponse; + +public class SearchResponseTest { + + private SearchResponse searchResponse; + + @Before + public void init() throws Exception { + searchResponse = new SearchResponse(); + + } + + @Test + public void updateValues() { + + assertNotNull(searchResponse.toString()); + searchResponse.setSuggestions(null); + assertNotNull(searchResponse.toString()); + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchableEntityListTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchableEntityListTest.java new file mode 100644 index 0000000..d2c6513 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchableEntityListTest.java @@ -0,0 +1,44 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.sync.entity.SearchableEntity; + +public class SearchableEntityListTest { + + + private SearchableEntityList searchableEntityList; + private ArrayList<SearchableEntity> searchable; + private SearchableEntity entity; + private HashMap<String,String> searchTags; + + @Before + public void init() throws Exception { + + searchable = new ArrayList<SearchableEntity>(); + entity = new SearchableEntity(); + searchableEntityList = new SearchableEntityList(); + searchTags = new HashMap<String,String>(); + + } + + + @SuppressWarnings("static-access") + @Test + public void updateValues() { + + searchableEntityList.setEntities(searchable); + assertNotNull(searchableEntityList.getEntities()); + searchableEntityList.addEntity(entity); + searchableEntityList.buildEntity("","","",searchTags); + assertNotNull(searchableEntityList.getSearchTagMap("tagtagtag")); + assertNotNull(searchableEntityList.toString()); + } + + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SelfLinkDeterminationTransactionTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SelfLinkDeterminationTransactionTest.java new file mode 100644 index 0000000..8dd862a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SelfLinkDeterminationTransactionTest.java @@ -0,0 +1,68 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + + +public class SelfLinkDeterminationTransactionTest { + + private SelfLinkDeterminationTransaction selfLinkDeterminationTransaction; + private OperationResult opResult; + private ActiveInventoryNode activeInventoryNode; + private VisualizationConfigs visualizationConfigs; + private OxmEntityLookup oxmEntityLookup; + + @Before + public void init() throws Exception { + selfLinkDeterminationTransaction = new SelfLinkDeterminationTransaction(); + opResult = new OperationResult(); + oxmEntityLookup = new OxmEntityLookup(); + activeInventoryNode = new ActiveInventoryNode(visualizationConfigs, oxmEntityLookup); + + } + + @Test + public void updateValues() { + + selfLinkDeterminationTransaction.setParentNodeId("ID-1"); + assertNotNull(selfLinkDeterminationTransaction.getParentNodeId()); + selfLinkDeterminationTransaction.setOpResult(opResult); + assertNotNull(selfLinkDeterminationTransaction.getOpResult()); + selfLinkDeterminationTransaction.setQueryString("QueryString"); + assertNotNull(selfLinkDeterminationTransaction.getQueryString()); + selfLinkDeterminationTransaction.setEntityUrl("EntityURL"); + assertNotNull(selfLinkDeterminationTransaction.getEntityUrl()); + selfLinkDeterminationTransaction.setNewNode(activeInventoryNode); + assertNotNull(selfLinkDeterminationTransaction.getNewNode()); + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphLinkTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphLinkTest.java new file mode 100644 index 0000000..20d6825 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphLinkTest.java @@ -0,0 +1,56 @@ +/** + * ============LICENSE_START=================================================== + * SPARKY (AAI UI service) + * ============================================================================ + * Copyright © 2017 AT&T Intellectual Property. + * Copyright © 2017 Amdocs + * All rights reserved. + * ============================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END===================================================== + * + * ECOMP and OpenECOMP are trademarks + * and service marks of AT&T Intellectual Property. + */ + +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertNotNull; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.viewandinspect.entity.SparkyGraphLink; + +public class SparkyGraphLinkTest { + + private SparkyGraphLink jsonNodeLink; + + @Before + public void init() throws Exception { + jsonNodeLink = new SparkyGraphLink(); + + } + + @Test + public void updateValues() { + + jsonNodeLink.setId("ID-1"); + assertNotNull(jsonNodeLink.getId()); + jsonNodeLink.setSource("SourceSet"); + assertNotNull(jsonNodeLink.getSource()); + jsonNodeLink.setTarget("targetSet"); + assertNotNull(jsonNodeLink.getTarget()); + assertNotNull(jsonNodeLink.toString()); + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphNodeTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphNodeTest.java new file mode 100644 index 0000000..a9a10c5 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphNodeTest.java @@ -0,0 +1,81 @@ +package org.onap.aai.sparky.viewandinspect.entity; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; + +import java.util.HashMap; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.subscription.config.SubscriptionConfig; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; + +public class SparkyGraphNodeTest { + + + private SparkyGraphNode graphNode; + private ActiveInventoryNode activeInventoryNode; + private SubscriptionConfig subscriptionConfigs; + private VisualizationConfigs visualConfigs; + private OxmEntityLookup oxmEntityLookup; + private HashMap<String,String> itemProperties; + private NodeMeta nodeMeta; + + @Before + public void init() throws Exception { + + oxmEntityLookup = new OxmEntityLookup(); + visualConfigs = new VisualizationConfigs(); + subscriptionConfigs = new SubscriptionConfig(); + nodeMeta = new NodeMeta(visualConfigs); + itemProperties = new HashMap<String,String>(); + activeInventoryNode = new ActiveInventoryNode(visualConfigs,oxmEntityLookup); + + graphNode = new SparkyGraphNode(activeInventoryNode,visualConfigs,subscriptionConfigs); + + } + + + @Test + public void updateValues() { + + graphNode.setId("graphID"); + assertNotNull(graphNode.getId()); + assertFalse(graphNode.isRootNode()); + graphNode.setItemNameKey("selectedsearchedNodeClass"); + assertNotNull(graphNode.getItemNameKey()); + graphNode.setItemNameValue("generalNodeClass"); + assertNotNull(graphNode.getItemNameValue()); + graphNode.setResourceKey("searchedNodeClass"); + assertNotNull(graphNode.getResourceKey()); + graphNode.setItemType("/etc/aaiEntityNodeDescriptors.json"); + assertNotNull(graphNode.getItemType()); + + graphNode.setItemProperties(itemProperties); + assertNotNull(graphNode.getItemProperties()); + graphNode.setNodeMeta(nodeMeta); + assertNotNull(graphNode.getNodeMeta()); + assertNotNull(graphNode.toString()); + + graphNode.setId(null); + assertNull(graphNode.getId()); + assertFalse(graphNode.isRootNode()); + graphNode.setItemNameKey(null); + assertNull(graphNode.getItemNameKey()); + graphNode.setItemNameValue(null); + assertNull(graphNode.getItemNameValue()); + graphNode.setResourceKey(null); + assertNull(graphNode.getResourceKey()); + graphNode.setItemType(null); + assertNull(graphNode.getItemType()); + graphNode.setItemProperties(null); + assertNull(graphNode.getItemProperties()); + graphNode.setNodeMeta(null); + assertNull(graphNode.getNodeMeta()); + assertNotNull(graphNode.toString()); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContextTest.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContextTest.java new file mode 100644 index 0000000..09ca3a3 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContextTest.java @@ -0,0 +1,273 @@ +package org.onap.aai.sparky.viewandinspect.services; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.security.SecureRandom; +import java.util.ArrayList; +import java.util.HashSet; +import java.util.List; +import java.util.Map; +import java.util.Set; +import java.util.concurrent.ExecutorService; + +import org.hamcrest.Matcher; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Matchers; +import org.mockito.Mockito; +import org.onap.aai.cl.api.Logger; +import org.onap.aai.cl.eelf.LoggerFactory; +import org.onap.aai.cl.mdc.MdcContext; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.OxmModelLoader; +import org.onap.aai.sparky.config.oxm.OxmModelProcessor; +import org.onap.aai.sparky.dal.ActiveInventoryAdapter; +import org.onap.aai.sparky.dal.rest.config.RestEndpointConfig; +import org.onap.aai.sparky.sync.entity.SearchableEntity; +import org.onap.aai.sparky.util.NodeUtils; +import org.onap.aai.sparky.util.StringCollectionContainsMatcher; +import org.onap.aai.sparky.util.TestResourceLoader; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; +import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode; +import org.onap.aai.sparky.viewandinspect.entity.QueryParams; +import org.onap.aai.sparky.viewandinspect.enumeration.NodeProcessingState; + + +public class BaseVisualizationContextTest { + + private static SecureRandom secureRandom = new SecureRandom(); + private static Logger LOG = LoggerFactory.getInstance().getLogger(BaseVisualizationContextTest.class); + + private BaseVisualizationContext baseVisualizationContext; + private ExecutorService aaiExecutorService; + private VisualizationConfigs visualizationConfig; + + private OxmEntityLookup oxmEntityLookup; + + private ActiveInventoryAdapter aaiAdapter; + private RestEndpointConfig aaiRestEndPointConfig; + + @Before + public void init() throws Exception { + + aaiExecutorService = NodeUtils.createNamedExecutor("SLNC-WORKER", 5, LOG); + visualizationConfig = new VisualizationConfigs(); + + ArrayList<String> shallowEntities = new ArrayList<String>(); + shallowEntities.add("cloud-region"); + + visualizationConfig.setShallowEntities(shallowEntities); + visualizationConfig.setMaxSelfLinkTraversalDepth(2); + + oxmEntityLookup = new OxmEntityLookup(); + + aaiAdapter = Mockito.mock(ActiveInventoryAdapter.class); + + + Set<OxmModelProcessor> processors = new HashSet<OxmModelProcessor>(); + + processors.add(oxmEntityLookup); + + + OxmModelLoader oxmModelLoader = new OxmModelLoader(-1, processors); + oxmModelLoader.loadLatestOxmModel(); + + aaiRestEndPointConfig = new RestEndpointConfig(); + aaiRestEndPointConfig.setNumRequestRetries(5); + + Mockito.when(aaiAdapter.getEndpointConfig()).thenReturn(aaiRestEndPointConfig); + + MdcContext.initialize("" + secureRandom.nextLong(), "AAI-UI", "", "partner-name", + "localhost:4242"); + + // all our resources are prefixed already, so the repairSelfLink shouldn't do anything to the link + Mockito.when(aaiAdapter.repairSelfLink(Matchers.contains(""))).thenReturn(""); + + + } + + private Matcher<List<String>> listContainsValue(String expectedValue) { + return new StringCollectionContainsMatcher(expectedValue); + } + + + @Test + public void validateBasicConstruction() throws Exception { + + long contextId = secureRandom.nextLong(); + + baseVisualizationContext = new BaseVisualizationContext(contextId, aaiAdapter, + aaiExecutorService, visualizationConfig, oxmEntityLookup); + + assertEquals(contextId, baseVisualizationContext.getContextId()); + + } + + @Test + public void validateSmallGraphAssembly() throws Exception { + + /** + * We have a tiny graph that we will validate assembly of: + * + * <li>customer -> tenant + * <li>customer -> service-subscription + * <li>service-subscription -> service-instance-1 + * <li>service-subscription -> service-instance-2 + * + * At the end of this success path, we should have 5 nodes in the node cache. Once we have this + * flow we can experiment with error paths involving resource download failures to ensure graph + * nodes are in the correct state and that expected nodes are successfully represented in the + * cache. + */ + + long contextId = secureRandom.nextLong(); + + baseVisualizationContext = new BaseVisualizationContext(contextId, aaiAdapter, + aaiExecutorService, visualizationConfig, oxmEntityLookup); + + SearchableEntity searchableEntity = new SearchableEntity(); + String customerSelfLink = + "https://server.proxy:8443/aai/v11/business/customers/customer/customer-4"; + String customerNodeId = NodeUtils.generateUniqueShaDigest(customerSelfLink); + + searchableEntity.setId(customerNodeId); + searchableEntity.setEntityType("customer"); + searchableEntity.setEntityPrimaryKeyValue("customer-4"); + searchableEntity.setLink(customerSelfLink); + + QueryParams queryParams = new QueryParams(); + queryParams.setSearchTargetNodeId(customerNodeId); + queryParams.setSearchTargetPrimaryKeyValues("customer-4"); + + // aai customer resource dip + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("customer-4"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/customer/customer-4.json"))); + + // aai tenant resource dip + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("tenant/tenant-1"), Mockito.anyString(), + Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-resources/tenant/tenant-1.json"))); + + // generic-queries for service-subscription + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-subscription"), + Matchers.argThat(listContainsValue("service-subscription.service-type:service-subscription-2")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-subscription-2"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers.contains("generic-query/service-subscription-2"), Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader + .getTestResourceDataJson("/sync/aai/aai-traversal/generic-query/service-subscription/service-subscription-2.json"))); + + // generic-queries for service-instance-1 + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat( + listContainsValue("service-instance-id:service-instance-54")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-id/service-instance-54"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers + .contains("generic-query/service-instance-id/service-instance-54"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance/service-instance-54.json"))); + + // generic-queries for service-instance-2 + + Mockito + .when(aaiAdapter.getGenericQueryForSelfLink(Matchers.contains("service-instance"), + Matchers.argThat( + listContainsValue("service-instance-id:service-instance-55")))) + .thenReturn( + "https://server.proxy:8443/aai/v11/search/generic-query/service-instance-id/service-instance-55"); + + Mockito + .when(aaiAdapter.queryActiveInventoryWithRetries( + Matchers + .contains("generic-query/service-instance-id/service-instance-55"), + Mockito.anyString(), Mockito.anyInt())) + .thenReturn(new OperationResult(200, TestResourceLoader.getTestResourceDataJson( + "/sync/aai/aai-traversal/generic-query/service-instance/service-instance-55.json"))); + + + + // start the test + + baseVisualizationContext.processSelfLinks(searchableEntity, queryParams); + + /* + * validation can be in the form of validating nodes + relationships from the node cache + * baseVisualizationContext.getNodeCache(); + */ + + Map<String, ActiveInventoryNode> nodeCache = baseVisualizationContext.getNodeCache(); + + assertEquals(5, nodeCache.size()); + assertNotNull(nodeCache.get(customerNodeId)); + assertEquals("customer", nodeCache.get(customerNodeId).getEntityType()); + + // verify node collection nodes + + ActiveInventoryNode customerNode = nodeCache.get("da4101ad19b3c380a1c12ffeda8ab390e1489fb4a22a392c9a1939db63c3dec5"); + ActiveInventoryNode ssNode = nodeCache.get("f4ceaf19459993c4fc9438a7579dd20d786109f4455e38682c579045b7ae615e"); + ActiveInventoryNode tenantNode = nodeCache.get("4735439b29e446b339535668238076e4b392eaa3eec218936e12f735179bc55e"); + ActiveInventoryNode s1 = nodeCache.get("f975ab453b142197af5d0173e0a9cf2aa22d10502f8ad655c8d17de81b066e8f"); + ActiveInventoryNode s2 = nodeCache.get("de77ef8f76dd6f19662b163527ff839891b9596cac655e3143fdd7ad39e2e4e3"); + + assertNotNull( customerNode ); + assertNotNull( ssNode ); + assertNotNull( tenantNode ); + assertNotNull( s1 ); + assertNotNull( s2 ); + + // verify node depths + + assertEquals( 0, customerNode.getNodeDepth() ); + assertEquals( 1, ssNode.getNodeDepth() ); + + /* + * I think there is a bug in the way the node depth is represented due to the enforcement of + * bidirectional links being disabled. We may have to circle back to this behavior at some point + * and re-verify that the behavior works properly. + */ + + assertEquals( 2, tenantNode.getNodeDepth() ); + assertEquals( 2, s1.getNodeDepth() ); + assertEquals( 2, s2.getNodeDepth() ); + + // verify node states + + assertEquals( NodeProcessingState.READY, customerNode.getState() ); + assertEquals( NodeProcessingState.READY, ssNode.getState() ); + + /* + * these nodes have a NEIGHBORS_UNPROCESSED state because the max traversal depth was hit before + * processing all the nested relationships. I think what we should look at is advancing the state + * to READY if in fact there are no relationships to process, which I think could be the case + * sometimes. + */ + assertEquals( NodeProcessingState.NEIGHBORS_UNPROCESSED, tenantNode.getState() ); + assertEquals( NodeProcessingState.NEIGHBORS_UNPROCESSED, s1.getState() ); + assertEquals( NodeProcessingState.NEIGHBORS_UNPROCESSED, s2.getState() ); + + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoEntitySynchronizer.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoEntitySynchronizer.java new file mode 100644 index 0000000..6d63a8a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoEntitySynchronizer.java @@ -0,0 +1,792 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.viewandinspect.sync; + +import static java.util.concurrent.CompletableFuture.supplyAsync; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collection; +import java.util.Deque; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.concurrent.ConcurrentLinkedDeque; +import java.util.concurrent.ExecutorService; +import java.util.function.Supplier; + +import org.onap.aai.cl.api.Logger; +import org.onap.aai.cl.eelf.LoggerFactory; +import org.onap.aai.cl.mdc.MdcContext; +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityContainerLookup; +import org.onap.aai.sparky.config.oxm.OxmEntityDescriptor; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.SearchableEntityLookup; +import org.onap.aai.sparky.config.oxm.SearchableOxmEntityDescriptor; +import org.onap.aai.sparky.dal.GizmoAdapter; +import org.onap.aai.sparky.dal.NetworkTransaction; +import org.onap.aai.sparky.dal.rest.HttpMethod; +import org.onap.aai.sparky.logging.AaiUiMsgs; +import org.onap.aai.sparky.sync.AbstractEntitySynchronizer; +import org.onap.aai.sparky.sync.IndexSynchronizer; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; +import org.onap.aai.sparky.sync.entity.MergableEntity; +import org.onap.aai.sparky.sync.entity.SearchableEntity; +import org.onap.aai.sparky.sync.entity.SelfLinkDescriptor; +import org.onap.aai.sparky.sync.enumeration.OperationState; +import org.onap.aai.sparky.sync.enumeration.SynchronizerState; +import org.onap.aai.sparky.sync.task.PerformElasticSearchPut; +import org.onap.aai.sparky.sync.task.PerformElasticSearchRetrieval; +import org.onap.aai.sparky.sync.task.PerformElasticSearchUpdate; +import org.onap.aai.sparky.sync.task.PerformGizmoRetrieval; +import org.onap.aai.sparky.util.NodeUtils; +import org.slf4j.MDC; + +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.JsonNode; +import com.fasterxml.jackson.databind.ObjectReader; +import com.fasterxml.jackson.databind.node.ArrayNode; + +/** + * The Class SearchableEntitySynchronizer. + */ +public class ViewInspectGizmoEntitySynchronizer extends AbstractEntitySynchronizer + implements IndexSynchronizer { + + /** + * The Class RetrySearchableEntitySyncContainer. + */ + private class RetrySearchableEntitySyncContainer { + NetworkTransaction txn; + SearchableEntity se; + + /** + * Instantiates a new retry searchable entity sync container. + * + * @param txn the txn + * @param se the se + */ + public RetrySearchableEntitySyncContainer(NetworkTransaction txn, SearchableEntity se) { + this.txn = txn; + this.se = se; + } + + public NetworkTransaction getNetworkTransaction() { + return txn; + } + + public SearchableEntity getSearchableEntity() { + return se; + } + } + + private static final Logger LOG = + LoggerFactory.getInstance().getLogger(ViewInspectGizmoEntitySynchronizer.class); + + private boolean allWorkEnumerated; + private Deque<SelfLinkDescriptor> selflinks; + private Deque<RetrySearchableEntitySyncContainer> retryQueue; + private Map<String, Integer> retryLimitTracker; + protected ExecutorService esPutExecutor; + private OxmEntityLookup oxmEntityLookup; + private SearchableEntityLookup searchableEntityLookup; + private GizmoAdapter gizmoAdapter; + private OxmEntityContainerLookup entityContainerLookup; + + /** + * Instantiates a new searchable entity synchronizer. + * + * @param indexName the index name + * @throws Exception the exception + */ + public ViewInspectGizmoEntitySynchronizer(ElasticSearchSchemaConfig schemaConfig, + int internalSyncWorkers, int gizmoWorkers, int esWorkers, NetworkStatisticsConfig aaiStatConfig, + NetworkStatisticsConfig esStatConfig, OxmEntityLookup oxmEntityLookup, + SearchableEntityLookup searchableEntityLookup, OxmEntityContainerLookup entityContainerLookup) throws Exception { + super(LOG, "SES", internalSyncWorkers, gizmoWorkers, esWorkers, schemaConfig.getIndexName(), + aaiStatConfig, esStatConfig); + + this.oxmEntityLookup = oxmEntityLookup; + this.searchableEntityLookup = searchableEntityLookup; + this.entityContainerLookup = entityContainerLookup; + this.allWorkEnumerated = false; + this.selflinks = new ConcurrentLinkedDeque<SelfLinkDescriptor>(); + this.retryQueue = new ConcurrentLinkedDeque<RetrySearchableEntitySyncContainer>(); + this.retryLimitTracker = new ConcurrentHashMap<String, Integer>(); + this.synchronizerName = "Searchable Entity Synchronizer"; + this.esPutExecutor = NodeUtils.createNamedExecutor("SES-ES-PUT", 5, LOG); + this.aaiEntityStats.intializeEntityCounters( + searchableEntityLookup.getSearchableEntityDescriptors().keySet()); + this.esEntityStats.intializeEntityCounters( + searchableEntityLookup.getSearchableEntityDescriptors().keySet()); + this.syncDurationInMs = -1; + } + + + + public GizmoAdapter getGizmoAdapter() { + return gizmoAdapter; +} + + + +public void setGizmoAdapter(GizmoAdapter gizmoAdapter) { + this.gizmoAdapter = gizmoAdapter; +} + + + +/** + * Collect all the work. + * + * @return the operation state + */ + private OperationState collectAllTheWork() { + final Map<String, String> contextMap = MDC.getCopyOfContextMap(); + + Collection<String> searchableEntityGroups = entityContainerLookup.getSearchableEntityGroups(); + + if (searchableEntityGroups.isEmpty()) { + LOG.error(AaiUiMsgs.ERROR_LOADING_OXM_SEARCHABLE_ENTITIES); + return OperationState.ERROR; + } + + + try { + + /* + * launch a parallel async thread to process the documents for each entity-type (to max the + * of the configured executor anyway) + */ + + /*searchableEntityGroups = new ArrayList<String>(); + searchableEntityGroups.add("pservers");*/ + + aaiWorkOnHand.set(searchableEntityGroups.size()); + + for (String searchableEntityGroup : searchableEntityGroups) { + + supplyAsync(new Supplier<Void>() { + + @Override + public Void get() { + MDC.setContextMap(contextMap); + OperationResult typeLinksResult = null; + try { + typeLinksResult = gizmoAdapter.getSelfLinksByEntityType(searchableEntityGroup); + aaiWorkOnHand.decrementAndGet(); + processEntityTypeSelfLinks(typeLinksResult); + } catch (Exception exc) { + + exc.printStackTrace(); + } + + return null; + } + + }, aaiExecutor).whenComplete((result, error) -> { + + if (error != null) { + LOG.error(AaiUiMsgs.ERROR_GENERIC, + "An error occurred getting data from AAI. Error = " + error.getMessage()); + } + }); + + } + + while (aaiWorkOnHand.get() != 0) { + + if (LOG.isDebugEnabled()) { + LOG.debug(AaiUiMsgs.WAIT_FOR_ALL_SELFLINKS_TO_BE_COLLECTED); + } + + Thread.sleep(1000); + } + + aaiWorkOnHand.set(selflinks.size()); + allWorkEnumerated = true; + syncEntityTypes(); + + while (!isSyncDone()) { + performRetrySync(); + Thread.sleep(1000); + } + + /* + * Make sure we don't hang on to retries that failed which could cause issues during future + * syncs + */ + retryLimitTracker.clear(); + + } catch (Exception exc) { + // TODO -> LOG, waht should be logged here? + } + + return OperationState.OK; + } + + /* (non-Javadoc) + * @see org.openecomp.sparky.synchronizer.IndexSynchronizer#doSync() + */ + @Override + public OperationState doSync() { + this.syncDurationInMs = -1; + String txnID = NodeUtils.getRandomTxnId(); + MdcContext.initialize(txnID, "SearchableEntitySynchronizer", "", "Sync", ""); + + resetCounters(); + this.allWorkEnumerated = false; + syncStartedTimeStampInMs = System.currentTimeMillis(); + collectAllTheWork(); + + return OperationState.OK; + } + + /** + * Process entity type self links. + * + * @param operationResult the operation result + */ + private void processEntityTypeSelfLinks(OperationResult operationResult) { + + JsonNode rootNode = null; + + final String jsonResult = operationResult.getResult(); + + if (jsonResult != null && jsonResult.length() > 0 && operationResult.wasSuccessful()) { + + try { + rootNode = mapper.readTree(jsonResult); + } catch (IOException exc) { + String message = "Could not deserialize JSON (representing operation result) as node tree. " + + "Operation result = " + jsonResult + ". " + exc.getLocalizedMessage(); + LOG.error(AaiUiMsgs.JSON_PROCESSING_ERROR, message); + } + + ArrayNode resultDataArrayNode = null; + + if (rootNode.isArray()) { + resultDataArrayNode = (ArrayNode) rootNode; + + Iterator<JsonNode> elementIterator = resultDataArrayNode.elements(); + JsonNode element = null; + + while (elementIterator.hasNext()) { + element = elementIterator.next(); + + final String id = NodeUtils.getNodeFieldAsText(element, "id"); + final String type = NodeUtils.getNodeFieldAsText(element, "type"); + final String url = NodeUtils.getNodeFieldAsText(element, "url"); + + String resourceLink; + try { + resourceLink = gizmoAdapter.getFullInventoryUrl(type + "/" + id); + selflinks.add(new SelfLinkDescriptor(NodeUtils.extractRawGizmoPathWithoutVersion(resourceLink), null, type)); + } catch (Exception e) { + LOG.error(AaiUiMsgs.ERROR_GENERIC, "ERROR: Failed to determine resource link caused by " + e.getMessage()); + } + + } + } + } + + } + + /** + * Sync entity types. + */ + private void syncEntityTypes() { + + while (selflinks.peek() != null) { + + SelfLinkDescriptor linkDescriptor = selflinks.poll(); + aaiWorkOnHand.decrementAndGet(); + + OxmEntityDescriptor descriptor = null; + + if (linkDescriptor.getSelfLink() != null && linkDescriptor.getEntityType() != null) { + + descriptor = oxmEntityLookup.getEntityDescriptors().get(linkDescriptor.getEntityType()); + + if (descriptor == null) { + LOG.error(AaiUiMsgs.MISSING_ENTITY_DESCRIPTOR, linkDescriptor.getEntityType()); + continue; + } + + NetworkTransaction txn = new NetworkTransaction(); + txn.setDescriptor(descriptor); + txn.setLink(linkDescriptor.getSelfLink()); + txn.setOperationType(HttpMethod.GET); + txn.setEntityType(linkDescriptor.getEntityType()); + + aaiWorkOnHand.incrementAndGet(); + + supplyAsync(new PerformGizmoRetrieval(txn, gizmoAdapter), aaiExecutor) + .whenComplete((result, error) -> { + + aaiWorkOnHand.decrementAndGet(); + + if (error != null) { + LOG.error(AaiUiMsgs.AAI_RETRIEVAL_FAILED_GENERIC, error.getLocalizedMessage()); + } else { + if (result == null) { + LOG.error(AaiUiMsgs.AAI_RETRIEVAL_FAILED_FOR_SELF_LINK, + linkDescriptor.getSelfLink()); + } else { + updateActiveInventoryCounters(result); + fetchDocumentForUpsert(result); + } + } + }); + } + + } + + } + + /** + * Perform document upsert. + * + * @param esGetTxn the es get txn + * @param se the se + */ + protected void performDocumentUpsert(NetworkTransaction esGetTxn, SearchableEntity se) { + /** + * <p> + * <ul> + * As part of the response processing we need to do the following: + * <li>1. Extract the version (if present), it will be the ETAG when we use the + * Search-Abstraction-Service + * <li>2. Spawn next task which is to do the PUT operation into elastic with or with the version + * tag + * <li>a) if version is null or RC=404, then standard put, no _update with version tag + * <li>b) if version != null, do PUT with _update?version= versionNumber in the URI to elastic + * </ul> + * </p> + */ + String link = null; + try { + link = elasticSearchAdapter.buildElasticSearchGetDocUrl(getIndexName(), se.getId()); + } catch (Exception exc) { + LOG.error(AaiUiMsgs.ES_LINK_UPSERT, exc.getLocalizedMessage()); + return; + } + + String versionNumber = null; + boolean wasEntryDiscovered = false; + if (esGetTxn.getOperationResult().getResultCode() == 404) { + LOG.info(AaiUiMsgs.ES_SIMPLE_PUT, se.getEntityPrimaryKeyValue()); + } else if (esGetTxn.getOperationResult().getResultCode() == 200) { + wasEntryDiscovered = true; + try { + versionNumber = NodeUtils.extractFieldValueFromObject( + NodeUtils.convertJsonStrToJsonNode(esGetTxn.getOperationResult().getResult()), + "_version"); + } catch (IOException exc) { + String message = + "Error extracting version number from response, aborting searchable entity sync of " + + se.getEntityPrimaryKeyValue() + ". Error - " + exc.getLocalizedMessage(); + LOG.error(AaiUiMsgs.ERROR_EXTRACTING_FROM_RESPONSE, message); + return; + } + } else { + /* + * Not being a 200 does not mean a failure. eg 201 is returned for created. TODO -> Should we + * return. + */ + LOG.error(AaiUiMsgs.ES_OPERATION_RETURN_CODE, + String.valueOf(esGetTxn.getOperationResult().getResultCode())); + return; + } + + try { + String jsonPayload = null; + if (wasEntryDiscovered) { + try { + ArrayList<JsonNode> sourceObject = new ArrayList<JsonNode>(); + NodeUtils.extractObjectsByKey( + NodeUtils.convertJsonStrToJsonNode(esGetTxn.getOperationResult().getResult()), + "_source", sourceObject); + + if (!sourceObject.isEmpty()) { + String responseSource = NodeUtils.convertObjectToJson(sourceObject.get(0), false); + MergableEntity me = mapper.readValue(responseSource, MergableEntity.class); + ObjectReader updater = mapper.readerForUpdating(me); + MergableEntity merged = updater.readValue(NodeUtils.convertObjectToJson(se,false)); + jsonPayload = mapper.writeValueAsString(merged); + } + } catch (IOException exc) { + String message = + "Error extracting source value from response, aborting searchable entity sync of " + + se.getEntityPrimaryKeyValue() + ". Error - " + exc.getLocalizedMessage(); + LOG.error(AaiUiMsgs.ERROR_EXTRACTING_FROM_RESPONSE, message); + return; + } + } else { + jsonPayload = se.getAsJson(); + } + + if (wasEntryDiscovered) { + if (versionNumber != null && jsonPayload != null) { + + String requestPayload = elasticSearchAdapter.buildBulkImportOperationRequest(getIndexName(), + "default", se.getId(), versionNumber, jsonPayload); + + NetworkTransaction transactionTracker = new NetworkTransaction(); + transactionTracker.setEntityType(esGetTxn.getEntityType()); + transactionTracker.setDescriptor(esGetTxn.getDescriptor()); + transactionTracker.setOperationType(HttpMethod.PUT); + + esWorkOnHand.incrementAndGet(); + supplyAsync(new PerformElasticSearchUpdate(elasticSearchAdapter.getBulkUrl(), + requestPayload, elasticSearchAdapter, transactionTracker), esPutExecutor) + .whenComplete((result, error) -> { + + esWorkOnHand.decrementAndGet(); + + if (error != null) { + String message = "Searchable entity sync UPDATE PUT error - " + + error.getLocalizedMessage(); + LOG.error(AaiUiMsgs.ES_SEARCHABLE_ENTITY_SYNC_ERROR, message); + } else { + updateElasticSearchCounters(result); + processStoreDocumentResult(result, esGetTxn, se); + } + }); + } + + } else { + + if (link != null && jsonPayload != null) { + + NetworkTransaction updateElasticTxn = new NetworkTransaction(); + updateElasticTxn.setLink(link); + updateElasticTxn.setEntityType(esGetTxn.getEntityType()); + updateElasticTxn.setDescriptor(esGetTxn.getDescriptor()); + updateElasticTxn.setOperationType(HttpMethod.PUT); + + esWorkOnHand.incrementAndGet(); + supplyAsync(new PerformElasticSearchPut(jsonPayload, updateElasticTxn, elasticSearchAdapter), + esPutExecutor).whenComplete((result, error) -> { + + esWorkOnHand.decrementAndGet(); + + if (error != null) { + String message = + "Searchable entity sync UPDATE PUT error - " + error.getLocalizedMessage(); + LOG.error(AaiUiMsgs.ES_SEARCHABLE_ENTITY_SYNC_ERROR, message); + } else { + updateElasticSearchCounters(result); + processStoreDocumentResult(result, esGetTxn, se); + } + }); + } + } + } catch (Exception exc) { + String message = "Exception caught during searchable entity sync PUT operation. Message - " + + exc.getLocalizedMessage(); + LOG.error(AaiUiMsgs.ES_SEARCHABLE_ENTITY_SYNC_ERROR, message); + } + } + + /** + * Populate searchable entity document. + * + * @param doc the doc + * @param result the result + * @param resultDescriptor the result descriptor + * @throws JsonProcessingException the json processing exception + * @throws IOException Signals that an I/O exception has occurred. + */ + protected void populateSearchableEntityDocument(SearchableEntity doc, String result, + OxmEntityDescriptor resultDescriptor) throws JsonProcessingException, IOException { + + doc.setEntityType(resultDescriptor.getEntityName()); + + JsonNode entityNode = mapper.readTree(result); + + String id = NodeUtils.getNodeFieldAsText(entityNode, "id"); + String type = NodeUtils.getNodeFieldAsText(entityNode, "type"); + String url = NodeUtils.getNodeFieldAsText(entityNode, "url"); + + JsonNode properties = entityNode.get("properties"); + + Iterator<String> fieldNames = properties.fieldNames(); + + + + List<String> primaryKeyValues = new ArrayList<String>(); + String pkeyValue = null; + + SearchableOxmEntityDescriptor searchableDescriptor = searchableEntityLookup.getSearchableEntityDescriptors().get(resultDescriptor.getEntityName()); + + for (String keyName : searchableDescriptor.getPrimaryKeyAttributeNames()) { + pkeyValue = NodeUtils.getNodeFieldAsText(properties, keyName); + if (pkeyValue != null) { + primaryKeyValues.add(pkeyValue); + } else { + String message = "populateSearchableEntityDocument(), pKeyValue is null for entityType = " + + resultDescriptor.getEntityName(); + LOG.warn(AaiUiMsgs.WARN_GENERIC, message); + } + } + + final String primaryCompositeKeyValue = NodeUtils.concatArray(primaryKeyValues, "/"); + doc.setEntityPrimaryKeyValue(primaryCompositeKeyValue); + + final List<String> searchTagFields = searchableDescriptor.getSearchableAttributes(); + + /* + * Based on configuration, use the configured field names for this entity-Type to build a + * multi-value collection of search tags for elastic search entity search criteria. + */ + for (String searchTagField : searchTagFields) { + String searchTagValue = NodeUtils.getNodeFieldAsText(properties, searchTagField); + if (searchTagValue != null && !searchTagValue.isEmpty()) { + doc.addSearchTagWithKey(searchTagValue, searchTagField); + } + } + } + + /** + * Fetch document for upsert. + * + * @param txn the txn + */ + private void fetchDocumentForUpsert(NetworkTransaction txn) { + if (!txn.getOperationResult().wasSuccessful()) { + String message = "Self link failure. Result - " + txn.getOperationResult().getResult(); + LOG.error(AaiUiMsgs.ERROR_GENERIC, message); + return; + } + + SearchableOxmEntityDescriptor searchableDescriptor = searchableEntityLookup + .getSearchableEntityDescriptors().get(txn.getDescriptor().getEntityName()); + + try { + if (searchableDescriptor.hasSearchableAttributes()) { + + final String jsonResult = txn.getOperationResult().getResult(); + if (jsonResult != null && jsonResult.length() > 0) { + + SearchableEntity se = new SearchableEntity(); + se.setLink( txn.getLink() ); + populateSearchableEntityDocument(se, jsonResult, searchableDescriptor); + se.deriveFields(); + + + String link = null; + try { + link = elasticSearchAdapter.buildElasticSearchGetDocUrl(getIndexName(), se.getId()); + } catch (Exception exc) { + LOG.error(AaiUiMsgs.ES_FAILED_TO_CONSTRUCT_QUERY, exc.getLocalizedMessage()); + } + + if (link != null) { + NetworkTransaction n2 = new NetworkTransaction(); + n2.setLink(link); + n2.setEntityType(txn.getEntityType()); + n2.setDescriptor(txn.getDescriptor()); + n2.setOperationType(HttpMethod.GET); + + esWorkOnHand.incrementAndGet(); + + supplyAsync(new PerformElasticSearchRetrieval(n2, elasticSearchAdapter), esExecutor) + .whenComplete((result, error) -> { + + esWorkOnHand.decrementAndGet(); + + if (error != null) { + LOG.error(AaiUiMsgs.ES_RETRIEVAL_FAILED, error.getLocalizedMessage()); + } else { + updateElasticSearchCounters(result); + performDocumentUpsert(result, se); + } + }); + } + } + + } + } catch (JsonProcessingException exc) { + LOG.error(AaiUiMsgs.ERROR_GENERIC, "Processing error while fetching document for elasticsearch update. Error: " + exc.getMessage() ); + } catch (IOException exc) { + LOG.error(AaiUiMsgs.ERROR_GENERIC, "Processing error while fetching document for elasticsearch update. Error: " + exc.getMessage() ); + } + } + + /** + * Process store document result. + * + * @param esPutResult the es put result + * @param esGetResult the es get result + * @param se the se + */ + private void processStoreDocumentResult(NetworkTransaction esPutResult, + NetworkTransaction esGetResult, SearchableEntity se) { + + OperationResult or = esPutResult.getOperationResult(); + + if (!or.wasSuccessful()) { + if (or.getResultCode() == VERSION_CONFLICT_EXCEPTION_CODE) { + + if (shouldAllowRetry(se.getId())) { + esWorkOnHand.incrementAndGet(); + + RetrySearchableEntitySyncContainer rsc = + new RetrySearchableEntitySyncContainer(esGetResult, se); + retryQueue.push(rsc); + + String message = "Store document failed during searchable entity synchronization" + + " due to version conflict. Entity will be re-synced."; + LOG.warn(AaiUiMsgs.ES_SEARCHABLE_ENTITY_SYNC_ERROR, message); + } + } else { + String message = + "Store document failed during searchable entity synchronization with result code " + + or.getResultCode() + " and result message " + or.getResult(); + LOG.error(AaiUiMsgs.ES_SEARCHABLE_ENTITY_SYNC_ERROR, message); + } + } + } + + /** + * Perform retry sync. + */ + private void performRetrySync() { + while (retryQueue.peek() != null) { + + RetrySearchableEntitySyncContainer rsc = retryQueue.poll(); + if (rsc != null) { + + SearchableEntity se = rsc.getSearchableEntity(); + NetworkTransaction txn = rsc.getNetworkTransaction(); + + String link = null; + try { + /* + * In this retry flow the se object has already derived its fields + */ + link = elasticSearchAdapter.buildElasticSearchGetDocUrl(getIndexName(), se.getId()); + } catch (Exception exc) { + LOG.error(AaiUiMsgs.ES_FAILED_TO_CONSTRUCT_URI, exc.getLocalizedMessage()); + } + + if (link != null) { + NetworkTransaction retryTransaction = new NetworkTransaction(); + retryTransaction.setLink(link); + retryTransaction.setEntityType(txn.getEntityType()); + retryTransaction.setDescriptor(txn.getDescriptor()); + retryTransaction.setOperationType(HttpMethod.GET); + + /* + * IMPORTANT - DO NOT incrementAndGet the esWorkOnHand as this is a retry flow! We already + * called incrementAndGet when queuing the failed PUT! + */ + + supplyAsync(new PerformElasticSearchRetrieval(retryTransaction, elasticSearchAdapter), + esExecutor).whenComplete((result, error) -> { + + esWorkOnHand.decrementAndGet(); + + if (error != null) { + LOG.error(AaiUiMsgs.ES_RETRIEVAL_FAILED_RESYNC, error.getLocalizedMessage()); + } else { + updateElasticSearchCounters(result); + performDocumentUpsert(result, se); + } + }); + } + + } + } + } + + /** + * Should allow retry. + * + * @param id the id + * @return true, if successful + */ + private boolean shouldAllowRetry(String id) { + boolean isRetryAllowed = true; + if (retryLimitTracker.get(id) != null) { + Integer currentCount = retryLimitTracker.get(id); + if (currentCount.intValue() >= RETRY_COUNT_PER_ENTITY_LIMIT.intValue()) { + isRetryAllowed = false; + String message = "Searchable entity re-sync limit reached for " + id + + ", re-sync will no longer be attempted for this entity"; + LOG.error(AaiUiMsgs.ES_SEARCHABLE_ENTITY_SYNC_ERROR, message); + } else { + Integer newCount = new Integer(currentCount.intValue() + 1); + retryLimitTracker.put(id, newCount); + } + } else { + Integer firstRetryCount = new Integer(1); + retryLimitTracker.put(id, firstRetryCount); + } + + return isRetryAllowed; + } + + @Override + public SynchronizerState getState() { + if (!isSyncDone()) { + return SynchronizerState.PERFORMING_SYNCHRONIZATION; + } + + return SynchronizerState.IDLE; + + } + + /* (non-Javadoc) + * @see org.openecomp.sparky.synchronizer.IndexSynchronizer#getStatReport(boolean) + */ + @Override + public String getStatReport(boolean showFinalReport) { + syncDurationInMs = System.currentTimeMillis() - syncStartedTimeStampInMs; + return this.getStatReport(syncDurationInMs, showFinalReport); + } + + /* (non-Javadoc) + * @see org.openecomp.sparky.synchronizer.IndexSynchronizer#shutdown() + */ + @Override + public void shutdown() { + this.shutdownExecutors(); + } + + @Override + protected boolean isSyncDone() { + int totalWorkOnHand = aaiWorkOnHand.get() + esWorkOnHand.get(); + + if (totalWorkOnHand > 0 || !allWorkEnumerated) { + return false; + } + + return true; + } + +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoSyncController.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoSyncController.java new file mode 100644 index 0000000..c2a1150 --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoSyncController.java @@ -0,0 +1,107 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 Amdocs + * ================================================================================ + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + * ============LICENSE_END========================================================= + * + * ECOMP is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.sparky.viewandinspect.sync; + +import org.onap.aai.sparky.config.oxm.OxmEntityContainerLookup; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.config.oxm.SearchableEntityLookup; +import org.onap.aai.sparky.dal.ElasticSearchAdapter; +import org.onap.aai.sparky.dal.GizmoAdapter; +import org.onap.aai.sparky.sync.ElasticSearchIndexCleaner; +import org.onap.aai.sparky.sync.ElasticSearchSchemaFactory; +import org.onap.aai.sparky.sync.IndexCleaner; +import org.onap.aai.sparky.sync.IndexIntegrityValidator; +import org.onap.aai.sparky.sync.SyncControllerImpl; +import org.onap.aai.sparky.sync.SyncControllerRegistrar; +import org.onap.aai.sparky.sync.SyncControllerRegistry; +import org.onap.aai.sparky.sync.config.ElasticSearchEndpointConfig; +import org.onap.aai.sparky.sync.config.ElasticSearchSchemaConfig; +import org.onap.aai.sparky.sync.config.NetworkStatisticsConfig; +import org.onap.aai.sparky.sync.config.SyncControllerConfig; + +public class ViewInspectGizmoSyncController extends SyncControllerImpl + implements SyncControllerRegistrar { + + private SyncControllerRegistry syncControllerRegistry; + //private GizmoAdapter gizmoAdapter; + //private ElasticSearchAdapter esAdapter; + //private ElasticSearchSchemaConfig schemaConfig; + //private ElasticSearchEndpointConfig endpointConfig; + + public ViewInspectGizmoSyncController(SyncControllerConfig syncControllerConfig, + GizmoAdapter gizmoAdapter, ElasticSearchAdapter esAdapter, + ElasticSearchSchemaConfig schemaConfig, ElasticSearchEndpointConfig endpointConfig, + NetworkStatisticsConfig gizmoStatConfig, NetworkStatisticsConfig esStatConfig, + OxmEntityLookup oxmEntityLookup, + SearchableEntityLookup searchableEntityLookup, OxmEntityContainerLookup oxmEntityContainerLookup, + ElasticSearchSchemaFactory elasticSearchSchemaFactory) throws Exception { + super(syncControllerConfig); + + // final String controllerName = "View and Inspect Entity Synchronizer"; + + //this.gizmoAdapter = gizmoAdapter; + //this.esAdapter = esAdapter; + //this.schemaConfig = schemaConfig; + //this.endpointConfig = endpointConfig; + + IndexIntegrityValidator indexValidator = new IndexIntegrityValidator(esAdapter, schemaConfig, + endpointConfig, elasticSearchSchemaFactory.getIndexSchema(schemaConfig)); + + registerIndexValidator(indexValidator); + + ViewInspectGizmoEntitySynchronizer ses = new ViewInspectGizmoEntitySynchronizer(schemaConfig, + syncControllerConfig.getNumInternalSyncWorkers(), + syncControllerConfig.getNumSyncActiveInventoryWorkers(), + syncControllerConfig.getNumSyncElasticWorkers(), gizmoStatConfig, esStatConfig, + oxmEntityLookup, searchableEntityLookup, oxmEntityContainerLookup); + + ses.setGizmoAdapter(gizmoAdapter); + ses.setElasticSearchAdapter(esAdapter); + + registerEntitySynchronizer(ses); + + IndexCleaner indexCleaner = + new ElasticSearchIndexCleaner(esAdapter, endpointConfig, schemaConfig); + + registerIndexCleaner(indexCleaner); + + } + + public SyncControllerRegistry getSyncControllerRegistry() { + return syncControllerRegistry; + } + + public void setSyncControllerRegistry(SyncControllerRegistry syncControllerRegistry) { + this.syncControllerRegistry = syncControllerRegistry; + } + + @Override + public void registerController() { + if ( syncControllerRegistry != null ) { + if ( syncControllerConfig.isEnabled()) { + syncControllerRegistry.registerSyncController(this); + } + } + + } +} diff --git a/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/util/SchemaVisualizationTestDataBuilder.java b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/util/SchemaVisualizationTestDataBuilder.java new file mode 100644 index 0000000..335e18a --- /dev/null +++ b/sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/util/SchemaVisualizationTestDataBuilder.java @@ -0,0 +1,134 @@ +package org.onap.aai.sparky.viewandinspect.util; + +import java.io.IOException; +import java.util.HashMap; +import java.util.Map; + +import javax.json.Json; +import javax.json.JsonObjectBuilder; + +import org.onap.aai.restclient.client.OperationResult; +import org.onap.aai.sparky.config.oxm.OxmEntityLookup; +import org.onap.aai.sparky.util.OxmModelAndProcessorHelper; +import org.onap.aai.sparky.viewandinspect.config.VisualizationConfigs; +import org.onap.aai.sparky.viewandinspect.entity.ActiveInventoryNode; +import org.restlet.data.Status; + + +public class SchemaVisualizationTestDataBuilder { + + // All of these hash IDs were generated based off the self links of the aaiNodes populated below + public static final String ROOT_NODE_HASH_ID = "f2f7ca5b565b43d7ff7cffea26d3315caaaff709e03abac127604008fc323b23"; + public static final String DEPTH_ONE_NODE_HASH_ID = "f845ab53e23cad7b9a3fc31aeef7b32bd21a72ba0fcdf568b1cfb116f2cff06f"; + public static final String DEPTH_TWO_NODE_HASH_ID = "372a132a0cd9bacfe408b09e6518cf824dcfbf23297678ddc0a8bf4f55da5c66"; + public static final String DEPTH_ONE_NODE_TWO_HASH_ID = "56a248219414380145b40eaa41b0482da388baa7492020d37687a998951ecdf9"; + + Map<String, ActiveInventoryNode> aaiNodes; + + SchemaVisualizationTestDataBuilder() { + aaiNodes = new HashMap<String, ActiveInventoryNode>(); + } + + public static String getQueryRequest() { + JsonObjectBuilder rootNodeBuilder = Json.createObjectBuilder(); + rootNodeBuilder.add("hashId", "f2f7ca5b565b43d7ff7cffea26d3315caaaff709e03abac127604008fc323b23"); + return rootNodeBuilder.build().toString(); + } + + public static String getRawRootNode() { + + JsonObjectBuilder rootNodeBuilder = Json.createObjectBuilder(); + rootNodeBuilder.add("_index", "magical-test-index"); + rootNodeBuilder.add("_type", "default"); + rootNodeBuilder.add("_id", "f2f7ca5b565b43d7ff7cffea26d3315caaaff709e03abac127604008fc323b23"); // Yes, hashed the link below + rootNodeBuilder.add("_version", 1); + rootNodeBuilder.add("found", true); + + JsonObjectBuilder sourceObjBuilder = Json.createObjectBuilder(); + sourceObjBuilder.add("entityType", "vf-module"); + sourceObjBuilder.add("entityPrimaryKeyValue", "root-node-pimary-key-value"); + sourceObjBuilder.add("link", "/aai/v12/network/generic-vnfs/generic-vnf/root-nodes-generic-vnf/vf-modules/vf-module/root-node-pimary-key-value"); + sourceObjBuilder.add("searchTags", "root-node-pimary-key-value;root-node-name"); + sourceObjBuilder.add("searchTagIDs", "vf-module-id;vf-module-name"); + sourceObjBuilder.add("lastmodTimestamp", "2018-02-01T15:48:03.580+0000"); + + rootNodeBuilder.add("_source", sourceObjBuilder.build()); + + return rootNodeBuilder.build().toString(); + } + + public static OperationResult getSchemaVisResult() { + OperationResult result = new OperationResult(); + + result.setResult(Status.SUCCESS_OK.getCode(), "{}"); + + return result; + } + + public static void buildAaiGraph(VisualizationConfigs visualizationConfigs) throws IOException { + OxmEntityLookup lookerOfTheOxmEntities = OxmModelAndProcessorHelper.getInstance().getOxmEntityLookup(); + + ActiveInventoryNode rootNode = new ActiveInventoryNode(visualizationConfigs, lookerOfTheOxmEntities); + rootNode.setEntityType("vf-module"); + rootNode.setPrimaryKeyName("vf-module-id"); + rootNode.setPrimaryKeyValue("root-node-pimary-key-value"); + rootNode.setSelfLink("/aai/v12/network/generic-vnfs/generic-vnf/root-nodes-generic-vnf/vf-modules/vf-module/root-node-pimary-key-value"); + rootNode.addProperty("entityType", "vf-module"); + rootNode.addProperty("vf-module-id", "root-node-pimary-key-value"); + rootNode.addProperty("selfLink", "/aai/v12/network/generic-vnfs/generic-vnf/root-nodes-generic-vnf/vf-modules/vf-module/root-node-pimary-key-value"); + rootNode.addProperty("vf-module-name", "this-is-my-name-eh"); + rootNode.addProperty("is-base-vf-module", "false"); + rootNode.addProperty("uri", "network/generic-vnfs/generic-vnf/root-nodes-generic-vnf/vf-modules/vf-module/root-node-pimary-key-value"); + rootNode.addProperty("orchestration-status", "Created"); + rootNode.addProperty("resource-version", "432156789"); + rootNode.setNodeId(ROOT_NODE_HASH_ID); + + ActiveInventoryNode depthOneNode = new ActiveInventoryNode(visualizationConfigs, lookerOfTheOxmEntities); + depthOneNode.setEntityType("vserver"); + depthOneNode.setPrimaryKeyName("vserver-id"); + depthOneNode.setPrimaryKeyValue("depth-one-from-root-node-vserver-id"); + depthOneNode.setSelfLink("/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/cloud-region-id/ice-cream/tenants/tenant/tenant-id/vservers/vserver/depth-one-from-root-node-vserver-id"); + depthOneNode.addProperty("entityType", "vserver"); + depthOneNode.addProperty("vserver-id", "depth-one-from-root-node-vserver-id"); + depthOneNode.addProperty("selfLink", "/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/cloud-region-id/ice-cream/tenants/tenant/tenant-id/vservers/vserver/depth-one-from-root-node-vserver-id"); + depthOneNode.addProperty("vserver-name", "depth-one-vserver"); + depthOneNode.addProperty("in-maint", "false"); + depthOneNode.addProperty("vserver-name2", "depth-one-vserver-name2"); + depthOneNode.addProperty("vserver-selflink", "https://magicaltest.com:6666/v2/tenant-id/servers/depth-one-from-root-node-vserver-id"); + depthOneNode.addProperty("uri", "cloud-infrastructure/cloud-regions/cloud-region/cloud-region-id/ice-cream/tenants/tenant/tenant-id/vservers/vserver/depth-one-from-root-node-vserver-id"); + depthOneNode.addProperty("is-closed-loop-disabled", "false"); + depthOneNode.addProperty("resource-version", "123456789"); + depthOneNode.setNodeId(DEPTH_ONE_NODE_HASH_ID); + + ActiveInventoryNode depthTwoNode = new ActiveInventoryNode(visualizationConfigs, lookerOfTheOxmEntities); + depthTwoNode.setEntityType("pserver"); + depthTwoNode.setPrimaryKeyName("hostname"); + depthTwoNode.setPrimaryKeyValue("I-am-a-host"); + depthTwoNode.setSelfLink("/aai/v12/cloud-infrastructure/pservers/pserver/depth-two-from-root-node-pserver-id"); + depthTwoNode.addProperty("entityType", "pserver"); + depthTwoNode.addProperty("hostname", "I-am-a-host"); + depthTwoNode.addProperty("selfLink", "/aai/v12/cloud-infrastructure/pservers/pserver/depth-two-from-root-node-pserver-id"); + depthTwoNode.addProperty("in-maint", "false"); + depthTwoNode.addProperty("resource-version", "987654321"); + depthTwoNode.addProperty("pserver-id", "depth-two-from-root-node-pserver-id"); + depthTwoNode.addProperty("uri", "cloud-infrastructure/pservers/pserver/depth-two-from-root-node-pserver-id"); + depthTwoNode.setNodeId(DEPTH_TWO_NODE_HASH_ID); + + ActiveInventoryNode depthOneNodeTwo = new ActiveInventoryNode(visualizationConfigs, lookerOfTheOxmEntities); + depthOneNodeTwo.setEntityType("vserver"); + depthOneNodeTwo.setPrimaryKeyName("vserver-id"); + depthOneNodeTwo.setPrimaryKeyValue("depth-one-from-root-node-vserver-id-2"); + depthOneNodeTwo.setSelfLink("/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/cloud-region-id/ice-cream/tenants/tenant/tenant-id/vservers/vserver/depth-one-from-root-node-vserver-id-2"); + depthOneNodeTwo.addProperty("entityType", "vserver"); + depthOneNodeTwo.addProperty("vserver-id", "depth-one-from-root-node-vserver-id-2"); + depthOneNodeTwo.addProperty("selfLink", "/aai/v12/cloud-infrastructure/cloud-regions/cloud-region/cloud-region-id/ice-cream/tenants/tenant/tenant-id/vservers/vserver/depth-one-from-root-node-vserver-id-2"); + depthOneNodeTwo.addProperty("in-maint", "false"); + depthOneNodeTwo.addProperty("resource-version", "678954321"); + depthOneNodeTwo.addProperty("vserver-name", "depth-one-vserver-2"); + depthOneNodeTwo.addProperty("vserver-name2", "depth-one-vserver-2-name2"); + depthOneNodeTwo.addProperty("vserver-selflink", "https://magicaltest.com:6666/v2/tenant-id/servers/depth-one-from-root-node-vserver-id-2"); + depthOneNodeTwo.addProperty("uri", "cloud-infrastructure/cloud-regions/cloud-region/cloud-region-id/ice-cream/tenants/tenant/tenant-id/vservers/vserver/depth-one-from-root-node-vserver-id-2"); + depthOneNodeTwo.addProperty("is-closed-loop-disabled", "false"); + depthOneNodeTwo.setNodeId(DEPTH_ONE_NODE_TWO_HASH_ID); + } +} |