summaryrefslogtreecommitdiffstats
path: root/sparkybe-onap-service/src/test/java/org/onap
diff options
context:
space:
mode:
authorda490c <dave.adams@amdocs.com>2018-03-22 00:32:52 -0400
committerda490c <dave.adams@amdocs.com>2018-03-22 09:34:25 -0400
commitba31685194c77ef140411531299696ae701385d4 (patch)
tree912f7d5b3378901ccabb8df52b26866d74572f10 /sparkybe-onap-service/src/test/java/org/onap
parentef7f255958e541ffaec0fd2a977440dd7b6fd6b8 (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')
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/AveragingRingBufferTest.java134
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistogramSamplerTest.java91
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/HistoricalCounterTest.java70
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/analytics/TransactionRateControllerTest.java217
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/autosuggestion/sync/AutosuggestionSynchronizerTest.java387
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/common/search/CommonSearchSuggestionTest.java55
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceDescriptorTest.java34
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/CrossEntityReferenceTest.java36
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoEntityDescriptorTest.java37
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/GeoOxmEntityDescriptorTest.java40
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityContainerLookup.java99
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/config/oxm/OxmEntityDescriptorTest.java41
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/crossentityreference/sync/CrossEntityReferenceSynchronizerTest.java1035
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ActiveInventoryAdapterTest.java63
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/ElasticSearchAdapterTest.java50
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/NetworkTransactionTest.java59
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntity.java44
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestDocumentEntityFields.java81
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitEntity.java87
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticHitsEntity.java50
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/AutoSuggestElasticSearchResponse.java85
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/BucketEntity.java61
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHit.java29
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticHitsEntity.java74
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggegrationResponse.java109
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchAggregation.java74
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/ElasticSearchCountResponse.java60
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/elasticsearch/entity/PayloadEntity.java32
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/proxy/processor/AaiUiProxyProcessorTest.java145
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/rest/config/RestEndpointConfigTest.java76
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/config/SearchServiceConfigTest.java21
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/DocumentEntity.java68
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/EntityCountResponse.java55
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationEntity.java60
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/GroupByAggregationResponseEntity.java48
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/HitEntity.java48
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionEntityBuilder.java294
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchAbstractionResponse.java39
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/dal/sas/entity/SearchResult.java49
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/AttributeUpdaterTest.java164
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/EditAttributesTest.java171
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserAuthorizationReader.java113
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/TestUserValidator.java137
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/editattributes/entity/EditRequestTest.java43
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/EntityHistoryQueryBuilderTest.java34
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/GeoIndexDocumentTest.java121
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/inventory/entity/TopographicalEntityTest.java50
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/logging/util/LoggingUtilsTest.java25
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityCountHistoryProcessorTest.java154
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryBucketTest.java31
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/EntityTypeSummaryTest.java37
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchEntityPropertiesTest.java34
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/SearchServiceAdapterTest.java47
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/UnifiedSearchProcessorTest.java445
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/config/SuggestionConfigTest.java42
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/entity/MockSearchResponse.java71
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilterProcessorTest.java374
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/FilteredSearchHelperTest.java69
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersConfigTest.java47
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersDetailsConfigTest.java40
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/FiltersForViewsConfigTest.java40
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterConfigTest.java57
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterDataSourceConfigTest.java44
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterListItemConfigTest.java34
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiFilterOptionsValuesConfigTest.java31
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/config/UiViewListItemConfigTest.java38
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/DiscoverFiltersRequest.java40
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewConfiguration.java68
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/search/filters/entity/ViewFilter.java57
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/SecurityContextFactoryImplTest.java143
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestPortalRestAPIServiceImpl.java283
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/security/portal/TestUserManager.java265
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/config/SubscriptionConfigTest.java54
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/MessageTest.java32
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ObjectInspectorPayloadTest.java43
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/ParamsTest.java30
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/subscription/payload/entity/PayloadTest.java32
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AbstractEntitySynchronizerTest.java463
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/AggregationSynchronizerTest.java345
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/ElasticSearchIndexCleanerTest.java122
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/SyncControllerImplTest.java81
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchEndpointConfigTest.java39
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/ElasticSearchSchemaConfigTest.java47
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/NetworkStatisticsConfigTest.java74
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/sync/config/SyncControllerConfigTest.java64
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/AsyncRateControlTester.java242
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/GizmoEntitySummarizer.java251
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexDocumentTest.java104
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/IndexableCrossEntityReferenceTest.java72
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerBuilder.java512
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/SyncControllerServiceTest.java34
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/TestSyncController.java177
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/AggregationSuggestionEntityTest.java75
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/entity/SuggestionSearchEntityTest.java187
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/synchronizer/task/PerformActiveInventoryRetrievalTest.java93
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/CaptureLoggerAppender.java247
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/ExceptionHelper.java62
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/HttpServletHelper.java162
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/LogValidator.java85
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/OxmModelAndProcessorHelper.java143
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SparkyTestConstants.java19
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/StringCollectionContainsMatcher.java39
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/SuggestionsPermutationTest.java130
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TestResourceLoader.java31
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/util/TreeWalkerTest.java563
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationContextTest.java5
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/BaseVisualizationServiceTest.java75
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SchemaVisualizationProcessorTest.java78
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchAdapterTest.java87
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchResponseTest.java92
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchServletTest.java992
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/SearchableGroupsTest.java73
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/ViewAndInspectSearchRequestTest.java81
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/VisualizationTransformerTest.java77
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/config/VisualizationConfigTest.java62
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/ActiveInventoryNodeTest.java128
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/D3VisualizationOutputTest.java46
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/EntityEntryTest.java94
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphMetaTest.java61
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/GraphRequestTest.java61
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/InlineMessageTest.java55
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/JsonNodeLinkTest.java57
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeDebugTest.java57
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeMetaTest.java88
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/NodeProcessingTransactionTest.java62
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryParamsTest.java56
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/QueryRequestTest.java54
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelatedToPropertyTest.java54
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipDataTest.java54
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipListTest.java32
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/RelationshipTest.java43
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchResponseTest.java52
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SearchableEntityListTest.java44
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SelfLinkDeterminationTransactionTest.java68
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphLinkTest.java56
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/entity/SparkyGraphNodeTest.java81
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/services/BaseVisualizationContextTest.java273
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoEntitySynchronizer.java792
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/sync/ViewInspectGizmoSyncController.java107
-rw-r--r--sparkybe-onap-service/src/test/java/org/onap/aai/sparky/viewandinspect/util/SchemaVisualizationTestDataBuilder.java134
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);
+ }
+}