From 1767960099ea2983eef5218b8ce44b167ae0774c Mon Sep 17 00:00:00 2001 From: Venkata Harish K Kajur Date: Thu, 28 Sep 2017 12:43:08 -0400 Subject: Change openecomp to onap and update license Issue-ID: AAI-61 AAI-82 Change-Id: Iae98d4bf4c693c0a3203158bff98c3c5e739f453 Signed-off-by: Venkata Harish K Kajur --- aai-core/src/test/java/org/onap/aai/AAISetup.java | 36 + .../org/onap/aai/exceptions/AAIExceptionTest.java | 114 +++ .../aai/exceptions/AAIExceptionWithInfoTest.java | 148 ++++ .../aai/introspection/IntrospectorTestSpec.java | 59 ++ .../org/onap/aai/introspection/MoxyEngineTest.java | 46 ++ .../onap/aai/introspection/PojoInjestorTest.java | 60 ++ .../org/onap/aai/introspection/PojoLoaderTest.java | 53 ++ .../onap/aai/introspection/PojoStrategyTest.java | 44 ++ .../aai/introspection/PropertyPredicatesTest.java | 75 ++ .../aai/introspection/ReflectionEngineTest.java | 47 ++ .../aai/introspection/sideeffect/DataCopyTest.java | 268 +++++++ .../aai/introspection/sideeffect/DataLinkTest.java | 259 +++++++ .../validation/IntrospectorValidationTest.java | 96 +++ .../test/java/org/onap/aai/logging/CNNameTest.java | 138 ++++ .../aai/logging/CustomLogPatternLayoutTest.java | 52 ++ .../org/onap/aai/logging/DME2RestFlagTest.java | 83 +++ .../onap/aai/logging/EelfClassOfCallerTest.java | 71 ++ .../java/org/onap/aai/logging/ErrorObjectTest.java | 163 +++++ .../org/onap/aai/logging/LoggingContextTest.java | 108 +++ .../onap/aai/parsers/query/GraphTraversalTest.java | 815 +++++++++++++++++++++ .../onap/aai/parsers/query/LegacyQueryTest.java | 158 ++++ .../query/RelationshipGremlinQueryTest.java | 663 +++++++++++++++++ .../aai/parsers/query/RelationshipQueryTest.java | 272 +++++++ .../parsers/query/UniqueRelationshipQueryTest.java | 297 ++++++++ .../onap/aai/parsers/query/UniqueURIQueryTest.java | 195 +++++ .../relationship/RelationshipToURITest.java | 225 ++++++ .../org/onap/aai/parsers/uri/URIParserTest.java | 102 +++ .../org/onap/aai/parsers/uri/URIToDBKeyTest.java | 186 +++++ .../parsers/uri/URIToExtensionInformationTest.java | 95 +++ .../org/onap/aai/parsers/uri/URIToObjectTest.java | 249 +++++++ .../parsers/uri/URIToRelationshipObjectTest.java | 151 ++++ .../org/onap/aai/query/builder/SimplePathTest.java | 124 ++++ .../onap/aai/query/builder/TraversalQueryTest.java | 102 +++ .../java/org/onap/aai/query/builder/UntilTest.java | 113 +++ .../org/onap/aai/serialization/db/DbAliasTest.java | 133 ++++ .../aai/serialization/db/DbSerializerTest.java | 441 +++++++++++ .../aai/serialization/db/EdgePropertyMapTest.java | 44 ++ .../onap/aai/serialization/db/EdgeRulesTest.java | 238 ++++++ .../queryformats/QueryFormatTestHelper.java | 76 ++ .../queryformats/SimpleFormatTest.java | 164 +++++ .../queryformats/utils/QueryParamInjectorTest.java | 60 ++ .../queryformats/utils/UrlBuilderTest.java | 101 +++ .../tinkerpop/TreeBackedVertexTest.java | 153 ++++ .../java/org/onap/aai/util/GenerateXsdTest.java | 55 ++ .../aai/workarounds/RemoveDME2QueryParamsTest.java | 92 +++ .../src/test/java/org/openecomp/aai/AAISetup.java | 34 - .../openecomp/aai/exceptions/AAIExceptionTest.java | 113 --- .../aai/exceptions/AAIExceptionWithInfoTest.java | 147 ---- .../aai/introspection/IntrospectorTestSpec.java | 58 -- .../aai/introspection/MoxyEngineTest.java | 45 -- .../aai/introspection/PojoInjestorTest.java | 59 -- .../aai/introspection/PojoLoaderTest.java | 52 -- .../aai/introspection/PojoStrategyTest.java | 43 -- .../aai/introspection/PropertyPredicatesTest.java | 74 -- .../aai/introspection/ReflectionEngineTest.java | 46 -- .../aai/introspection/sideeffect/DataCopyTest.java | 267 ------- .../aai/introspection/sideeffect/DataLinkTest.java | 258 ------- .../validation/IntrospectorValidationTest.java | 95 --- .../java/org/openecomp/aai/logging/CNNameTest.java | 137 ---- .../aai/logging/CustomLogPatternLayoutTest.java | 51 -- .../openecomp/aai/logging/DME2RestFlagTest.java | 82 --- .../aai/logging/EelfClassOfCallerTest.java | 70 -- .../org/openecomp/aai/logging/ErrorObjectTest.java | 162 ---- .../openecomp/aai/logging/LoggingContextTest.java | 107 --- .../aai/parsers/query/GraphTraversalTest.java | 814 -------------------- .../aai/parsers/query/LegacyQueryTest.java | 157 ---- .../query/RelationshipGremlinQueryTest.java | 662 ----------------- .../aai/parsers/query/RelationshipQueryTest.java | 271 ------- .../parsers/query/UniqueRelationshipQueryTest.java | 296 -------- .../aai/parsers/query/UniqueURIQueryTest.java | 194 ----- .../relationship/RelationshipToURITest.java | 224 ------ .../openecomp/aai/parsers/uri/URIParserTest.java | 101 --- .../openecomp/aai/parsers/uri/URIToDBKeyTest.java | 185 ----- .../parsers/uri/URIToExtensionInformationTest.java | 94 --- .../openecomp/aai/parsers/uri/URIToObjectTest.java | 248 ------- .../parsers/uri/URIToRelationshipObjectTest.java | 150 ---- .../aai/query/builder/SimplePathTest.java | 123 ---- .../aai/query/builder/TraversalQueryTest.java | 101 --- .../org/openecomp/aai/query/builder/UntilTest.java | 112 --- .../aai/serialization/db/DbAliasTest.java | 132 ---- .../aai/serialization/db/DbSerializerTest.java | 440 ----------- .../aai/serialization/db/EdgePropertyMapTest.java | 43 -- .../aai/serialization/db/EdgeRulesTest.java | 237 ------ .../queryformats/QueryFormatTestHelper.java | 75 -- .../queryformats/SimpleFormatTest.java | 163 ----- .../queryformats/utils/QueryParamInjectorTest.java | 59 -- .../queryformats/utils/UrlBuilderTest.java | 100 --- .../tinkerpop/TreeBackedVertexTest.java | 152 ---- .../org/openecomp/aai/util/GenerateXsdTest.java | 54 -- .../aai/workarounds/RemoveDME2QueryParamsTest.java | 91 --- .../etc/appprops/aaiconfig.properties | 16 +- .../etc/appprops/titan-cached.properties | 22 + .../etc/appprops/titan-realtime.properties | 22 + .../bundleconfig-local/etc/oxm/aai_oxm_v10.xml | 37 +- .../bundleconfig-local/etc/oxm/aai_oxm_v11.xml | 37 +- .../bundleconfig-local/etc/oxm/aai_oxm_v2.xml | 37 +- .../bundleconfig-local/etc/oxm/aai_oxm_v8.xml | 37 +- .../bundleconfig-local/etc/oxm/aai_oxm_v9.xml | 41 +- aai-core/src/test/resources/logback.xml | 45 +- .../openecomp/aai/introspection/aai_oxm_v10.xml | 629 ++++++++-------- .../org/openecomp/aai/introspection/aai_oxm_v8.xml | 371 +++++----- .../org/openecomp/aai/introspection/aai_oxm_v9.xml | 69 +- 102 files changed, 7945 insertions(+), 7820 deletions(-) create mode 100644 aai-core/src/test/java/org/onap/aai/AAISetup.java create mode 100644 aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionWithInfoTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/IntrospectorTestSpec.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/MoxyEngineTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/PojoInjestorTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/PojoLoaderTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/PojoStrategyTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/PropertyPredicatesTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/ReflectionEngineTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataCopyTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataLinkTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/introspection/validation/IntrospectorValidationTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/logging/CNNameTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/logging/CustomLogPatternLayoutTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/logging/DME2RestFlagTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/logging/EelfClassOfCallerTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/logging/ErrorObjectTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/logging/LoggingContextTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/query/GraphTraversalTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/query/LegacyQueryTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipGremlinQueryTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipQueryTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/query/UniqueRelationshipQueryTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/query/UniqueURIQueryTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/relationship/RelationshipToURITest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/uri/URIParserTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/uri/URIToDBKeyTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/uri/URIToExtensionInformationTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/parsers/uri/URIToRelationshipObjectTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/query/builder/SimplePathTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/query/builder/TraversalQueryTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/query/builder/UntilTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/db/DbAliasTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/db/EdgePropertyMapTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/db/EdgeRulesTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/queryformats/QueryFormatTestHelper.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/queryformats/SimpleFormatTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/QueryParamInjectorTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/UrlBuilderTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/serialization/tinkerpop/TreeBackedVertexTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java create mode 100644 aai-core/src/test/java/org/onap/aai/workarounds/RemoveDME2QueryParamsTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/AAISetup.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionWithInfoTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/IntrospectorTestSpec.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/MoxyEngineTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/PojoInjestorTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/PojoLoaderTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/PojoStrategyTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/PropertyPredicatesTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/ReflectionEngineTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataCopyTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataLinkTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/introspection/validation/IntrospectorValidationTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/logging/CNNameTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/logging/CustomLogPatternLayoutTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/logging/DME2RestFlagTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/logging/EelfClassOfCallerTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/logging/ErrorObjectTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/logging/LoggingContextTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/query/GraphTraversalTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/query/LegacyQueryTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipGremlinQueryTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipQueryTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueRelationshipQueryTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueURIQueryTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/relationship/RelationshipToURITest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIParserTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToDBKeyTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToExtensionInformationTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToObjectTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToRelationshipObjectTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/query/builder/SimplePathTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/query/builder/TraversalQueryTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/query/builder/UntilTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/db/DbAliasTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/db/DbSerializerTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgePropertyMapTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgeRulesTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/QueryFormatTestHelper.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/SimpleFormatTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/QueryParamInjectorTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/UrlBuilderTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/serialization/tinkerpop/TreeBackedVertexTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/util/GenerateXsdTest.java delete mode 100644 aai-core/src/test/java/org/openecomp/aai/workarounds/RemoveDME2QueryParamsTest.java (limited to 'aai-core/src/test') diff --git a/aai-core/src/test/java/org/onap/aai/AAISetup.java b/aai-core/src/test/java/org/onap/aai/AAISetup.java new file mode 100644 index 00000000..f531cea3 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/AAISetup.java @@ -0,0 +1,36 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai; + +import org.junit.BeforeClass; +import org.onap.aai.serialization.queryformats.QueryFormatTestHelper; +import org.onap.aai.util.AAIConstants; + +public abstract class AAISetup { + + @BeforeClass + public static void setupBundleconfig() throws Exception { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); + QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/"); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionTest.java b/aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionTest.java new file mode 100644 index 00000000..36757e23 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionTest.java @@ -0,0 +1,114 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.exceptions; + +import org.junit.Test; +import org.onap.aai.AAISetup; + +import static org.junit.Assert.assertEquals; + +public class AAIExceptionTest extends AAISetup { + + private static final String code = "4004"; + private static final String details = "This is a detailed description of the exception."; + private static final Throwable cause = new RuntimeException("This is a runtime exception."); + private static final Throwable noMessage = new RuntimeException(); + + /** + * Test constructor with 0 params. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith0Params() throws Exception { + AAIException exception = new AAIException(); + assertEquals(exception, exception); + } + + /** + * Test constructor with 1 params. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith1Params() throws Exception { + AAIException exception = new AAIException(code); + assertEquals(exception, exception); + } + + /** + * Test constructor with 2 params details. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith2ParamsDetails() throws Exception { + AAIException exception = new AAIException(code, details); + assertEquals(details, exception.getMessage()); + } + + /** + * Test constructor with 2 params cause. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith2ParamsCause() throws Exception { + AAIException exception = new AAIException(code, cause); + assertEquals("java.lang.RuntimeException: This is a runtime exception.", exception.getMessage()); + } + + /** + * Test constructor with 2 params null message. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith2ParamsNullMessage() throws Exception { + AAIException exception = new AAIException(code, noMessage); + assertEquals(noMessage.toString(), exception.getMessage()); + } + + /** + * Test constructor with 3 params. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith3Params() throws Exception { + AAIException exception = new AAIException(code, cause, details); + String details = "This is a detailed description of the exception."; + assertEquals(details, exception.getMessage()); + } + + /** + * Test constructor with 3 params null message. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith3ParamsNullMessage() throws Exception { + AAIException exception = new AAIException(code, noMessage, details); + String detailString = new String(details); + assertEquals(detailString, exception.getMessage()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionWithInfoTest.java b/aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionWithInfoTest.java new file mode 100644 index 00000000..961bf688 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/exceptions/AAIExceptionWithInfoTest.java @@ -0,0 +1,148 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.exceptions; + +import org.junit.Test; +import org.onap.aai.AAISetup; + +import java.util.HashMap; + +import static org.junit.Assert.assertEquals; + +public class AAIExceptionWithInfoTest extends AAISetup { + + + private static final HashMap map = new HashMap(); + + { + map.put("itemInteger", 1); + map.put("itemString", "Two"); + map.put("itemThree", Boolean.TRUE); + } + + private static final String info = "An error has occurred."; + private static final String code = "AAI_4004"; + private static final String details = "This is a detailed description of the exception."; + private static final Throwable cause = new RuntimeException("This is a runtime exception."); + + /** + * Test constructor with 2 params. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith2Params() throws Exception { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(map, info); + + assertEquals(map, exception.getInfoHash()); + assertEquals(info, exception.getInfo()); + } + + /** + * Test constructor with 3 params. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith3Params() throws Exception { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, map, info); + + assertEquals("4004", exception.getErrorObject().getErrorCode()); + assertEquals(map, exception.getInfoHash()); + assertEquals(info, exception.getInfo()); + } + + /** + * Test constructor with 4 params I. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith4ParamsI() throws Exception { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, details, map, info); + + assertEquals("4004", exception.getErrorObject().getErrorCode()); + assertEquals(details, exception.getMessage()); + assertEquals(map, exception.getInfoHash()); + assertEquals(info, exception.getInfo()); + } + + /** + * Test constructor with 4 params II. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith4ParamsII() throws Exception { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, cause, map, info); + + assertEquals("4004", exception.getErrorObject().getErrorCode()); + assertEquals(cause.toString(), exception.getMessage()); + assertEquals(map, exception.getInfoHash()); + assertEquals(info, exception.getInfo()); + } + + /** + * Test constructor with 5 params. + * + * @throws Exception the exception + */ + @Test + public void testConstructorWith5Params() throws Exception { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, cause, details, map, info); + + assertEquals("4004", exception.getErrorObject().getErrorCode()); + assertEquals(details, exception.getMessage()); + assertEquals(map, exception.getInfoHash()); + assertEquals(info, exception.getInfo()); + } + + /** + * Test set info hash. + */ + @Test + public void testSetInfoHash() { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(map, info); + + HashMap newMap = new HashMap(); + newMap.put("itemInteger", 2); + exception.setInfoHash(newMap); + + assertEquals(newMap, exception.getInfoHash()); + assertEquals(info, exception.getInfo()); + } + + /** + * Test set info. + */ + @Test + public void testSetInfo() { + AAIExceptionWithInfo exception = new AAIExceptionWithInfo(map, info); + + String newInfo = "This is updated info."; + exception.setInfo(newInfo); + + assertEquals(map, exception.getInfoHash()); + assertEquals(newInfo, exception.getInfo()); + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/IntrospectorTestSpec.java b/aai-core/src/test/java/org/onap/aai/introspection/IntrospectorTestSpec.java new file mode 100644 index 00000000..d3a982d5 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/IntrospectorTestSpec.java @@ -0,0 +1,59 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.onap.aai.AAISetup; +import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; + +import static org.junit.Assert.assertEquals; + +public class IntrospectorTestSpec extends AAISetup { + + + + /** + * Container test set. + * + * @param wrappedPortGroups the wrapped port groups + * @throws AAIUnknownObjectException + */ + protected void containerTestSet(Introspector wrappedPortGroups) throws AAIUnknownObjectException { + + assertEquals( + "isContainer", + true, + wrappedPortGroups.isContainer()); + + assertEquals( + "newInstanceOfNestedProperty", + "PortGroup", + wrappedPortGroups.newInstanceOfNestedProperty("port-group").getClass().getSimpleName()); + + assertEquals( + "isComplexGenericType", + true, + wrappedPortGroups.isComplexGenericType("port-group")); + + + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/MoxyEngineTest.java b/aai-core/src/test/java/org/onap/aai/introspection/MoxyEngineTest.java new file mode 100644 index 00000000..e3c15fc2 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/MoxyEngineTest.java @@ -0,0 +1,46 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.junit.Test; +import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; + +public class MoxyEngineTest extends IntrospectorTestSpec { + + /** + * Container object. + * @throws AAIUnknownObjectException + */ + @Test + public void containerObject() throws AAIUnknownObjectException { + + Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); + + Introspector obj = loader.introspectorFromName("port-groups"); + + this.containerTestSet(obj); + + } + + + +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/PojoInjestorTest.java b/aai-core/src/test/java/org/onap/aai/introspection/PojoInjestorTest.java new file mode 100644 index 00000000..4f78f7bd --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/PojoInjestorTest.java @@ -0,0 +1,60 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.junit.Test; +import org.onap.aai.db.props.AAIProperties; + +import javax.xml.bind.JAXBContext; +import javax.xml.bind.JAXBException; +import javax.xml.bind.Marshaller; + +import static org.junit.Assert.*; + +public class PojoInjestorTest { + + @Test + public void getVersionTest() { + String latestVersion = "org.onap.aai.yang.VnfImage"; + PojoInjestor testPI = new PojoInjestor(); + assertEquals("", AAIProperties.LATEST, testPI.getVersion(latestVersion)); + + String oldVersion = "org.onap.aai.yang.v8.VnfImage"; + assertEquals("", Version.v8, testPI.getVersion(oldVersion)); + } + + @Test + public void getContextForVersionTest() { + PojoInjestor testPI = new PojoInjestor(); + JAXBContext context = testPI.getContextForVersion(Version.v9); + try { + Marshaller marshaller = context.createMarshaller(); + //this will fail if the context wasn't initialized successfully (I think) + marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.MEDIA_TYPE, "application/json"); + } catch (JAXBException e) { + e.printStackTrace(); + fail("failed on setting marshaller property"); + } + //if we get to here that means everything went ok + assertTrue(true); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/PojoLoaderTest.java b/aai-core/src/test/java/org/onap/aai/introspection/PojoLoaderTest.java new file mode 100644 index 00000000..bcd809dd --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/PojoLoaderTest.java @@ -0,0 +1,53 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.domain.yang.v9.VnfImage; +import org.onap.aai.introspection.exceptions.AAIUnmarshallingException; +import org.onap.aai.restcore.MediaType; + +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +public class PojoLoaderTest extends AAISetup { + + + @Test + public void test() { + Loader pojoLoader = LoaderFactory.createLoaderForVersion(ModelType.POJO, Version.v9); + String payload = "{\"vnf-image-uuid\":\"myuuid\",\"application\":\"testApp\",\"application-vendor\":\"testVendor\",\"application-version\":\"versionTest\"}"; + try { + Introspector intro = pojoLoader.unmarshal("vnf-image", payload, MediaType.APPLICATION_JSON_TYPE); + VnfImage myVnfImage = (VnfImage) intro.getUnderlyingObject(); + assertTrue("myuuid".equals(myVnfImage.getVnfImageUuid())); + assertTrue("testApp".equals(myVnfImage.getApplication())); + assertTrue("testVendor".equals(myVnfImage.getApplicationVendor())); + assertTrue("versionTest".equals(myVnfImage.getApplicationVersion())); + } catch (AAIUnmarshallingException e) { + e.printStackTrace(); + fail("AAIUnmarshallingException thrown"); + } + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/PojoStrategyTest.java b/aai-core/src/test/java/org/onap/aai/introspection/PojoStrategyTest.java new file mode 100644 index 00000000..66832704 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/PojoStrategyTest.java @@ -0,0 +1,44 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.junit.Test; +import org.onap.aai.domain.yang.CloudRegion; +import org.onap.aai.domain.yang.VolumeGroup; +import org.onap.aai.schema.enums.ObjectMetadata; + +import static org.junit.Assert.assertEquals; + +public class PojoStrategyTest { + + @Test + public void getMetadataTest() { + Introspector cloudregion = IntrospectorFactory.newInstance(ModelType.POJO, new CloudRegion()); + assertEquals("cloud-infrastructure", cloudregion.getMetadata(ObjectMetadata.NAMESPACE)); + assertEquals("cloud-regions", cloudregion.getMetadata(ObjectMetadata.CONTAINER)); + + Introspector volumegroup = IntrospectorFactory.newInstance(ModelType.POJO, new VolumeGroup()); + assertEquals("cloud-region", volumegroup.getMetadata(ObjectMetadata.DEPENDENT_ON)); + assertEquals("", volumegroup.getMetadata(ObjectMetadata.NAMESPACE)); + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/PropertyPredicatesTest.java b/aai-core/src/test/java/org/onap/aai/introspection/PropertyPredicatesTest.java new file mode 100644 index 00000000..0250bbb3 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/PropertyPredicatesTest.java @@ -0,0 +1,75 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; + +import java.util.Set; + +import static org.hamcrest.Matchers.hasItems; +import static org.hamcrest.Matchers.not; +import static org.junit.Assert.assertThat; + +public class PropertyPredicatesTest extends AAISetup { + + private final Version version = Version.getLatest(); + + private Loader loader; + private ModelType introspectorFactoryType = ModelType.MOXY; + private Introspector obj; + + @Before + public void setup() throws Exception { + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + obj = loader.introspectorFromName("test-object"); + } + + @Test + public void includeInTestGeneration() throws AAIUnknownObjectException { + + Set props = obj.getProperties(PropertyPredicates.includeInTestGeneration()); + + assertThat("props not found", props, + not(hasItems("persona-model-ver", "not-visible-test-element", "model-invariant-id", "model-version-id"))); + } + + @Test + public void isVisible() throws AAIUnknownObjectException { + + Set props = obj.getProperties(PropertyPredicates.isVisible()); + + assertThat("props not found", props, not(hasItems("persona-model-ver"))); + } + + @Test + public void all() throws AAIUnknownObjectException { + + Set props = obj.getProperties(); + + assertThat("all found", props, hasItems("persona-model-ver", "not-visible-test-element")); + } + + +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/ReflectionEngineTest.java b/aai-core/src/test/java/org/onap/aai/introspection/ReflectionEngineTest.java new file mode 100644 index 00000000..6869fd71 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/ReflectionEngineTest.java @@ -0,0 +1,47 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection; + +import org.junit.Test; +import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; + +public class ReflectionEngineTest extends IntrospectorTestSpec { + + /** + * Container object. + * + * @throws InstantiationException the instantiation exception + * @throws IllegalAccessException the illegal access exception + * @throws ClassNotFoundException the class not found exception + * @throws AAIUnknownObjectException + */ + @Test + public void containerObject() throws InstantiationException, IllegalAccessException, ClassNotFoundException, AAIUnknownObjectException { + Object javaObj = null; + String className = "org.onap.aai.domain.yang.PortGroups"; + javaObj = Class.forName(className).newInstance(); + + Introspector obj = IntrospectorFactory.newInstance(ModelType.POJO, javaObj); + +// this.containerTestSet(obj); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataCopyTest.java b/aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataCopyTest.java new file mode 100644 index 00000000..7dbf2392 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataCopyTest.java @@ -0,0 +1,268 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection.sideeffect; + +import com.thinkaurelius.titan.core.TitanFactory; +import com.thinkaurelius.titan.core.TitanGraph; +import org.apache.commons.io.IOUtils; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import org.junit.*; +import org.junit.rules.ExpectedException; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.dbmap.DBConnectionType; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.introspection.sideeffect.exceptions.AAIMissingRequiredPropertyException; +import org.onap.aai.parsers.query.QueryParser; +import org.onap.aai.serialization.db.DBSerializer; +import org.onap.aai.serialization.db.EdgeProperty; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import java.io.FileInputStream; +import java.io.IOException; +import java.io.UnsupportedEncodingException; +import java.lang.reflect.InvocationTargetException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +public class DataCopyTest { + + private static TitanGraph graph; + private final static Version version = Version.getLatest(); + private final static ModelType introspectorFactoryType = ModelType.MOXY; + private final static QueryStyle queryStyle = QueryStyle.TRAVERSAL; + private final static DBConnectionType type = DBConnectionType.REALTIME; + private static Loader loader; + private static TransactionalGraphEngine dbEngine; + @Mock private Vertex self; + @Mock private VertexProperty prop; + @Mock private QueryParser uriQuery; + @Rule + public ExpectedException thrown = ExpectedException.none(); + + + @BeforeClass + public static void setup() throws NoSuchFieldException, SecurityException, Exception { + graph = TitanFactory.build().set("storage.backend","inmemory").open(); + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + dbEngine = new TitanDBEngine( + queryStyle, + type, + loader); + + graph.traversal().addV("aai-node-type", "model", "model-invariant-id", "key1").as("v1") + .addV("aai-node-type", "model-ver", "model-ver", "myValue", "model-version-id", "key2", "model-version", "testValue").addInE("has", "v1", EdgeProperty.CONTAINS.toString(), true) + .addV("aai-node-type", "model", "model-invariant-id", "key3").as("v2") + .addV("aai-node-type", "model-ver", "model-ver", "myValue", "model-version-id", "key4").addInE("has", "v2", EdgeProperty.CONTAINS.toString(), true) + .next(); + graph.tx().commit(); + } + + @AfterClass + public static void tearDown() { + graph.tx().rollback(); + graph.close(); + } + + @Before + public void initMock() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void runPopulatePersonaModelVer() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); + final Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "myId"); + obj.setValue("model-invariant-id", "key1"); + obj.setValue("model-version-id", "key2"); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); + + runner.execute(obj, self); + + assertEquals("value populated", "testValue", obj.getValue("persona-model-ver")); + + g.tx().rollback(); + + + } + + @Test + public void runPopulateModelVersionId() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); + final Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "myId"); + obj.setValue("persona-model-id", "key1"); + obj.setValue("persona-model-version", "testValue"); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); + + runner.execute(obj, self); + + assertEquals("value populated", "key2", obj.getValue("model-version-id")); + + g.tx().rollback(); + } + + @Test + public void verifyNestedSideEffect() throws URISyntaxException, AAIException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, IOException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); + final Introspector obj = loader.unmarshal("customer", this.getJsonString("nested-case.json")); + System.out.println(obj.marshal(true)); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.tx()).thenReturn(g); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + when(uriQuery.isDependent()).thenReturn(false); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + Vertex v= serializer.createNewVertex(obj); + serializer.serializeToDb(obj, v, uriQuery, obj.getURI(), "test"); + + assertEquals("nested value populated", "testValue", g.traversal().V().has("service-instance-id", "nested-instance-key").next().property("persona-model-version").orElse("")); + + g.tx().rollback(); + + } + + @Test + public void expectedMissingPropertyExceptionInURI() throws AAIException, UnsupportedEncodingException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); + final Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "myId"); + obj.setValue("model-invariant-id", "key1"); + + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); + + thrown.expect(AAIMissingRequiredPropertyException.class); + runner.execute(obj, self); + } + + @Test + public void expectedMissingPropertyExceptionForResultingObject() throws AAIException, UnsupportedEncodingException { + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); + final Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "myId"); + obj.setValue("model-invariant-id", "key3"); + obj.setValue("model-version-id", "key4"); + + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); + + thrown.expect(AAIMissingRequiredPropertyException.class); + runner.execute(obj, self); + } + + @Test + public void expectNoProcessingWithNoProperties() throws AAIException, UnsupportedEncodingException { + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); + final Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "myId"); + + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); + + runner.execute(obj, self); + + assertEquals("no model-version-id", true, obj.getValue("model-version-id") == null); + assertEquals("no model-invariant-id", true, obj.getValue("model-invariant-id") == null); + + } + + private String getJsonString(String filename) throws IOException { + + + FileInputStream is = new FileInputStream("src/test/resources/bundleconfig-local/etc/oxm/sideeffect/" + filename); + String s = IOUtils.toString(is, "UTF-8"); + IOUtils.closeQuietly(is); + + return s; + } +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataLinkTest.java b/aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataLinkTest.java new file mode 100644 index 00000000..b817cc69 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/sideeffect/DataLinkTest.java @@ -0,0 +1,259 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection.sideeffect; + +import com.thinkaurelius.titan.core.TitanFactory; +import com.thinkaurelius.titan.core.TitanGraph; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.structure.VertexProperty; +import org.junit.*; +import org.junit.rules.ExpectedException; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.dbmap.DBConnectionType; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.parsers.query.QueryParser; +import org.onap.aai.serialization.db.DBSerializer; +import org.onap.aai.serialization.db.EdgeProperty; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import java.io.UnsupportedEncodingException; +import java.lang.reflect.InvocationTargetException; +import java.net.MalformedURLException; +import java.net.URISyntaxException; +import java.util.List; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +public class DataLinkTest { + + private static TitanGraph graph; + private final static Version version = Version.getLatest(); + private final static ModelType introspectorFactoryType = ModelType.MOXY; + private final static QueryStyle queryStyle = QueryStyle.TRAVERSAL; + private final static DBConnectionType type = DBConnectionType.REALTIME; + private static Loader loader; + private static TransactionalGraphEngine dbEngine; + @Mock private QueryParser parser; + @Mock private Vertex self; + @Mock private VertexProperty prop; + @Rule + public ExpectedException thrown = ExpectedException.none(); + + + @BeforeClass + public static void setup() throws NoSuchFieldException, SecurityException, Exception { + graph = TitanFactory.build().set("storage.backend","inmemory").open(); + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + dbEngine = new TitanDBEngine( + queryStyle, + type, + loader); + + graph.traversal().addV("aai-node-type", "vpn-binding", "vpn-id", "addKey").as("v1") + .addV("aai-node-type", "vpn-binding", "vpn-id", "modifyKey").as("v2") + .addV("aai-node-type", "route-target", "global-route-target", "modifyTargetKey", "route-target-role", "modifyRoleKey", "linked", true).addInE("has", "v2", EdgeProperty.CONTAINS.toString(), true) + .addV("aai-node-type", "vpn-binding", "vpn-id", "deleteKey").as("v3") + .addV("aai-node-type", "route-target", "global-route-target", "deleteTargetKey", "route-target-role", "deleteRoleKey", "linked", true).addInE("has", "v3", EdgeProperty.CONTAINS.toString(), true) + .addV("aai-node-type", "vpn-binding", "vpn-id", "getKey").as("v4") + .addV("aai-node-type", "route-target", "global-route-target", "getTargetKey", "route-target-role", "getRoleKey", "linked", true).addInE("has", "v4", EdgeProperty.CONTAINS.toString(), true) + .addV("aai-node-type", "vpn-binding", "vpn-id", "getKeyNoLink").as("v5") + .addV("aai-node-type", "route-target", "global-route-target", "getTargetKeyNoLink", "route-target-role", "getRoleKeyNoLink").addInE("has", "v5", EdgeProperty.CONTAINS.toString(), true) + .next(); + graph.tx().commit(); + } + + @AfterClass + public static void tearDown() { + graph.tx().rollback(); + graph.close(); + } + + @Before + public void initMock() { + MockitoAnnotations.initMocks(this); + } + + @Test + public void verifyCreationOfVertex() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); + final Introspector obj = loader.introspectorFromName("vpn-binding"); + obj.setValue("vpn-id", "addKey"); + obj.setValue("global-route-target", "key1"); + obj.setValue("route-target-role", "key2"); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(spy.tx()).thenReturn(g); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataLinkWriter.class).build(); + + runner.execute(obj, self); + + assertEquals("route-target vertex found", true, traversal.V() + .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "key1").has("route-target-role", "key2").has("linked", true).hasNext()); + + g.tx().rollback(); + + } + + @Test + public void verifyModificationOfVertex() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); + final Introspector obj = loader.introspectorFromName("vpn-binding"); + obj.setValue("vpn-id", "modifyKey"); + obj.setValue("global-route-target", "modifyTargetKey2"); + obj.setValue("route-target-role", "modifyRoleKey2"); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(spy.tx()).thenReturn(g); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataLinkWriter.class).build(); + + runner.execute(obj, self); + + assertEquals("route-target vertex found", true, traversal.V() + .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "modifyTargetKey2").has("route-target-role", "modifyRoleKey2").has("linked", true).hasNext()); + assertEquals("previous link removed", true, traversal.V() + .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "modifyTargetKey").has("route-target-role", "modifyRoleKey").hasNot("linked").hasNext()); + g.tx().rollback(); + + } + + @Test + public void verifyDeleteOfVertex() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); + final Introspector obj = loader.introspectorFromName("vpn-binding"); + obj.setValue("vpn-id", "deleteKey"); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal); + when(spy.tx()).thenReturn(g); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataLinkWriter.class).build(); + + runner.execute(obj, self); + + assertEquals("route-target vertex not found", false, traversal.V() + .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "deleteTargetKey").has("route-target-role", "deleteRoleKey").has("linked", true).hasNext()); + g.tx().rollback(); + + } + + @Test + public void verifyPropertyPopulation() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + + final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); + final Introspector obj = loader.introspectorFromName("vpn-binding"); + obj.setValue("vpn-id", "getKey"); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(spy.tx()).thenReturn(g); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + SideEffectRunner runner = new SideEffectRunner + .Builder(spy, serializer).addSideEffect(DataLinkReader.class).build(); + + runner.execute(obj, self); + + assertEquals("both properties have been populated in target object", true, obj.getValue("global-route-target").equals("getTargetKey") && obj.getValue("route-target-role").equals("getRoleKey")); + g.tx().rollback(); + + } + + @Test + public void verifyPropertyPopulationWithV10OnlyPut() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { + final Introspector obj = loader.introspectorFromName("vpn-binding"); + obj.setValue("vpn-id", "getKeyNoLink"); + final Introspector routeTargets = loader.introspectorFromName("route-targets"); + obj.setValue("route-targets", routeTargets.getUnderlyingObject()); + List targets = routeTargets.getValue("route-target"); + final Introspector routeTargetOne = loader.introspectorFromName("route-target"); + routeTargetOne.setValue("global-route-target", "getTargetKeyNoLink"); + routeTargetOne.setValue("route-target-role", "getRoleKeyNoLink"); + targets.add(routeTargetOne.getUnderlyingObject()); + final Introspector routeTargetTwo = loader.introspectorFromName("route-target"); + routeTargetTwo.setValue("global-route-target", "getTargetKeyNoLink2"); + routeTargetTwo.setValue("route-target-role", "getRoleKeyNoLink2"); + targets.add(routeTargetTwo.getUnderlyingObject()); + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.tx()).thenReturn(g); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(spy.tx()).thenReturn(g); + when(parser.isDependent()).thenReturn(false); + when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); + when(prop.orElse(null)).thenReturn(obj.getURI()); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + Vertex v = serializer.createNewVertex(obj); + serializer.serializeToDb(obj, v, parser, obj.getURI(), "testing"); + Vertex routeTargetOneV = traversal.V().has("global-route-target", "getTargetKeyNoLink").next(); + Vertex routeTargetTwoV = traversal.V().has("global-route-target", "getTargetKeyNoLink2").next(); + + assertEquals("first route target put has linked", true, routeTargetOneV.property(AAIProperties.LINKED).orElse(false)); + assertEquals("second route target put does not have linked", false, routeTargetTwoV.property(AAIProperties.LINKED).orElse(false)); + + g.tx().rollback(); + + } +} diff --git a/aai-core/src/test/java/org/onap/aai/introspection/validation/IntrospectorValidationTest.java b/aai-core/src/test/java/org/onap/aai/introspection/validation/IntrospectorValidationTest.java new file mode 100644 index 00000000..db21f578 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/introspection/validation/IntrospectorValidationTest.java @@ -0,0 +1,96 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.introspection.validation; + +import org.junit.Before; +import org.junit.BeforeClass; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.introspection.tools.IntrospectorValidator; +import org.onap.aai.introspection.tools.Issue; +import org.onap.aai.introspection.tools.IssueType; +import org.onap.aai.serialization.queryformats.QueryFormatTestHelper; +import org.onap.aai.util.AAIConstants; + +import java.util.List; + +import static org.junit.Assert.assertEquals; + +public class IntrospectorValidationTest { + + + private final static Version version = Version.v10; + private final static ModelType introspectorFactoryType = ModelType.MOXY; + private static Loader loader; + private IntrospectorValidator validator; + @BeforeClass + public static void setUp() throws NoSuchFieldException, SecurityException, Exception { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local"); + QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/org.onap.aai/introspection/"); + + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + + } + @Before + public void createValidator() { + validator = new IntrospectorValidator.Builder() + .validateRequired(false) + .restrictDepth(10000) + .build(); + } + @Ignore + @Test + public void verifySuccessWhenEmpty() throws AAIException { + Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "key1"); + validator.validate(obj); + List issues = validator.getIssues(); + assertEquals("no issues found", true, issues.isEmpty()); + } + + @Ignore + @Test + public void verifyRequiresSingleFieldFailure() throws AAIException { + Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "key1"); + obj.setValue("model-invariant-id", "id1"); + validator.validate(obj); + List issues = validator.getIssues(); + assertEquals("issues found", true, issues.size() == 1); + Issue issue = issues.get(0); + assertEquals("found expected issue", IssueType.DEPENDENT_PROP_NOT_FOUND, issue.getType()); + } + @Ignore + @Test + public void verifyRequiresSuccess() throws AAIException { + Introspector obj = loader.introspectorFromName("test-object"); + obj.setValue("vnf-id", "key1"); + obj.setValue("model-invariant-id", "id1"); + obj.setValue("model-version-id", "version-id1"); + validator.validate(obj); + List issues = validator.getIssues(); + assertEquals("no issues found", true, issues.isEmpty()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/logging/CNNameTest.java b/aai-core/src/test/java/org/onap/aai/logging/CNNameTest.java new file mode 100644 index 00000000..d5cd62cd --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/logging/CNNameTest.java @@ -0,0 +1,138 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; + +import ch.qos.logback.access.spi.IAccessEvent; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mockito; +import org.onap.aai.logging.CNName; +import org.onap.aai.serialization.queryformats.QueryFormatTestHelper; +import org.onap.aai.util.AAIConstants; +import org.powermock.core.classloader.annotations.PowerMockIgnore; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.agent.PowerMockAgent; + +import javax.security.auth.x500.X500Principal; +import javax.servlet.http.HttpServletRequest; +import java.security.cert.X509Certificate; + +import static org.junit.Assert.assertTrue; +import static org.mockito.Mockito.when; + +@PowerMockIgnore("javax.security.auth.x500.X500Principal") +@PrepareForTest({IAccessEvent.class, HttpServletRequest.class, X509Certificate.class}) +public class CNNameTest { + + static { + PowerMockAgent.initializeIfNeeded(); + } + + + IAccessEvent mockAccEvent; + HttpServletRequest mockHttpServletRequest; + CNName cnname; + X509Certificate cert; + + /** + * Initialize. + */ + @Before + public void initialize() throws Exception { + System.setProperty("AJSC_HOME", "."); + System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); + QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/"); + mockAccEvent = Mockito.mock(IAccessEvent.class); + mockHttpServletRequest = Mockito.mock(HttpServletRequest.class); + cert = Mockito.mock(X509Certificate.class); + } + + + /** + * Test 'convert' when there is no AccessConverter. + */ + @Test + public void testConvert_withoutAccessConverter(){ + cnname = getTestObj(false); + assertTrue("Conversion failed with no AccessConverter", "INACTIVE_HEADER_CONV".equals(cnname.convert(mockAccEvent))); + } + + /** + * Test 'convert' with no CipherSuite. + */ + @Test + public void testConvert_withNullCipherSuite(){ + setupForCipherSuite(null); + assertTrue("Conversion failed for a null CipherSuite", "-".equals(cnname.convert(mockAccEvent))); + } + + + /** + * Test 'convert' with a non-null CipherSuite. + */ + @Test + public void testConvert_withNotNullCipherSuite(){ + + setupForCipherSuite("StrRepOfAValidSuite"); + + final X500Principal principal = new X500Principal("CN=AAI, OU=DOX, O=BWS, C=CA"); + + Mockito.when(cert.getSubjectX500Principal()).thenReturn(principal); + + final X509Certificate[] certChain = {cert}; + + when(mockHttpServletRequest.getAttribute("javax.servlet.request.X509Certificate")).thenReturn(certChain); + + assertTrue("Conversion failed for a valid CipherSuite", principal.toString().equals(cnname.convert(mockAccEvent))); + } + + + /** + * Helper method to mock IAccessEvent and HttpServletRequest. + * + * @param suite CipherSuite to be used in current test + */ + private void setupForCipherSuite(String suite){ + cnname = getTestObj(true); + when(mockAccEvent.getRequest()).thenReturn(mockHttpServletRequest); + when(mockHttpServletRequest.getAttribute("javax.servlet.request.cipher_suite")).thenReturn(suite); + } + + + /** + * Helper method to create a CNName object with overridden 'start status' . + * + * @param instanceStarted Start status to be used + * @return CNName object to test + */ + private CNName getTestObj(final boolean instanceStarted){ + return new CNName(){ + @Override + public boolean isStarted(){ + return instanceStarted; + } + }; + } +} + + + diff --git a/aai-core/src/test/java/org/onap/aai/logging/CustomLogPatternLayoutTest.java b/aai-core/src/test/java/org/onap/aai/logging/CustomLogPatternLayoutTest.java new file mode 100644 index 00000000..04aaaf0f --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/logging/CustomLogPatternLayoutTest.java @@ -0,0 +1,52 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; + +import org.junit.Test; +import org.onap.aai.logging.CNName; +import org.onap.aai.logging.CustomLogPatternLayout; + +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + +public class CustomLogPatternLayoutTest { + + /** + * Test null when defaultConverterMap doesn't have corresponding entry. + */ + @Test + public void testNull(){ + String s = CustomLogPatternLayout.defaultConverterMap.get("z"); + assertFalse("Entry not found for key 'z'", CNName.class.getName().equals(s)); + } + + /** + * Test defaultConverterMap when valid entry exists. + */ + @Test + public void testEntryFor_Z(){ + CustomLogPatternLayout layout = new CustomLogPatternLayout(); + String s = CustomLogPatternLayout.defaultConverterMap.get("z"); + assertTrue("Entry not found for key 'z'", CNName.class.getName().equals(s)); + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/logging/DME2RestFlagTest.java b/aai-core/src/test/java/org/onap/aai/logging/DME2RestFlagTest.java new file mode 100644 index 00000000..59177efe --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/logging/DME2RestFlagTest.java @@ -0,0 +1,83 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; +import ch.qos.logback.access.spi.IAccessEvent; +import org.junit.*; + + +public class DME2RestFlagTest { + + IAccessEvent mockAccEvent; + DME2RestFlag _DME2RestFlag; + + String[] temp = new String[4]; + + + @Before + public void setUp() throws Exception { + + mockAccEvent = mock(IAccessEvent.class); + _DME2RestFlag= spy(DME2RestFlag.class); + + } + private DME2RestFlag getTestObj(final boolean instanceStarted){ + return new DME2RestFlag(){ + @Override + public + boolean isStarted(){ + return instanceStarted; + } + }; + } + + @Test + public void convertTestAllValid(){ + temp[0]= "temp1"; + temp[1] = "-"; + when(mockAccEvent.getRequestParameter("envContext")).thenReturn(temp); + when(mockAccEvent.getRequestParameter("routeOffer")).thenReturn(temp); + when(mockAccEvent.getRequestParameter("version")).thenReturn(temp); + _DME2RestFlag = getTestObj(true); + assertEquals(_DME2RestFlag.convert(mockAccEvent),"DME2"); + } + + @Test + public void convertMissingRouteTest(){ + temp[0]= ""; + temp[1] = "-"; + when(mockAccEvent.getRequestParameter("envContext")).thenReturn(temp); + when(mockAccEvent.getRequestParameter("routeOffer")).thenReturn(temp); + when(mockAccEvent.getRequestParameter("version")).thenReturn(temp); + _DME2RestFlag = getTestObj(true); + assertEquals(_DME2RestFlag.convert(mockAccEvent),"REST"); + } + + @Test + public void convertIsStartedFalseTest(){ + _DME2RestFlag = getTestObj(false); + assertEquals(_DME2RestFlag.convert(mockAccEvent),"INACTIVE_HEADER_CONV"); + } + + +} diff --git a/aai-core/src/test/java/org/onap/aai/logging/EelfClassOfCallerTest.java b/aai-core/src/test/java/org/onap/aai/logging/EelfClassOfCallerTest.java new file mode 100644 index 00000000..adb29855 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/logging/EelfClassOfCallerTest.java @@ -0,0 +1,71 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.*; +import ch.qos.logback.classic.spi.ILoggingEvent; +import org.junit.*; + +public class EelfClassOfCallerTest { + + EelfClassOfCaller _eelfClassOfCaller; + ILoggingEvent mockEvent; + StackTraceElement[] cdafive = new StackTraceElement[5]; + StackTraceElement[] cdaone = new StackTraceElement[1]; + StackTraceElement[] cdazero = new StackTraceElement[0]; + + + @Before + public void setUp() throws Exception { + + mockEvent = mock(ILoggingEvent.class); + _eelfClassOfCaller= spy(EelfClassOfCaller.class); + + } + + + @Test + public void getFullyQualifiedNameCDALENFiveTest(){ + StackTraceElement temp = new StackTraceElement("classname_five","methodname","filename", 4); + cdafive[2]=temp; + when(mockEvent.getCallerData()).thenReturn(cdafive); + assertEquals(_eelfClassOfCaller.getFullyQualifiedName(mockEvent),"classname_five"); + + } + @Test + public void getFullyQualifiedNameCDALenOneTest(){ + StackTraceElement temp = new StackTraceElement("classname_one","methodname","filename", 4); + cdaone[0]=temp; + when(mockEvent.getCallerData()).thenReturn(cdaone); + assertEquals(_eelfClassOfCaller.getFullyQualifiedName(mockEvent),"classname_one"); + + } + + @Test + public void getFullyQualifiedNameCDALenZeroTest(){ + when(mockEvent.getCallerData()).thenReturn(cdazero); + assertEquals(_eelfClassOfCaller.getFullyQualifiedName(mockEvent),"?"); + + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/logging/ErrorObjectTest.java b/aai-core/src/test/java/org/onap/aai/logging/ErrorObjectTest.java new file mode 100644 index 00000000..1a4c1857 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/logging/ErrorObjectTest.java @@ -0,0 +1,163 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; + +import javax.ws.rs.core.Response; +import javax.ws.rs.core.Response.Status; +import static org.junit.Assert.*; + +import org.junit.*; + +public class ErrorObjectTest { + + ErrorObject newErrorObject = new ErrorObject("disposition","category","severity", 200, "restErrorCode","errorCode","errorText"); + + //Constructor Tests + @Test + public void createObjectTest1(){ + //No HTTP Status argument + ErrorObject errorObject = new ErrorObject("severity","errorcode","errortext","disposition","category"); + assertNotNull(errorObject); + } + @Test + public void createObjectTest2(){ + //HTTP Status code as integer + ErrorObject errorObject = new ErrorObject("severity",200,"errorcode","errortext","disposition","category"); + assertNotNull(errorObject); + } + @Test + public void createObjectTest3(){ + //HTTP Status code as Status + ErrorObject errorObject = new ErrorObject("severity",Status.OK,"errorcode","errortext","disposition","category"); + assertNotNull(errorObject); + } + //Disposition Tests + @Test + public void getDispositionTest() { + assertEquals(newErrorObject.getDisposition(), "disposition"); + } + @Test + public void setDispositionTest() { + newErrorObject.setDisposition("newDisposition"); + assertEquals(newErrorObject.getDisposition(), "newDisposition"); + } + + //Category Tests + @Test + public void getCategoryTest(){ + assertEquals(newErrorObject.getCategory(), "category"); + } + @Test + public void setCategoryTest(){ + newErrorObject.setCategory("newCategory"); + assertEquals(newErrorObject.getCategory(), "newCategory"); + } + + //Severity Tests + @Test + public void getSeverityTest(){ + assertEquals(newErrorObject.getSeverity(), "severity"); + } + @Test + public void setSeverityTest(){ + newErrorObject.setSeverity("newSeverity"); + assertEquals(newErrorObject.getSeverity(), "newSeverity"); + } + + //Error Code Tests + @Test + public void getErrorCodeTest(){ + assertEquals(newErrorObject.getErrorCode(), "errorCode"); + } + @Test + public void SetErrorCodeTest(){ + newErrorObject.setErrorCode("newErrorCode"); + assertEquals(newErrorObject.getErrorCode(), "newErrorCode"); + } + + //HTTP Response Code Tests + @Test + public void getHTTPCodeTest(){ + assertEquals(newErrorObject.getHTTPResponseCode(), Status.OK); + } + @Test + public void setHTTPCodeTest(){ + newErrorObject.setHTTPResponseCode(201); + assertEquals(newErrorObject.getHTTPResponseCode(), Status.CREATED); + } + @Test(expected=IllegalArgumentException.class) + public void invalidHttpCodeTest(){ + newErrorObject.setHTTPResponseCode(6281723); + } + @Test(expected=IllegalArgumentException.class) + public void invalidHttpCodeTest2(){ + newErrorObject.setHTTPResponseCode("82901"); + } + + //Rest Error Code Tests + @Test + public void getRestErrorCodeTest(){ + assertEquals(newErrorObject.getRESTErrorCode(), "restErrorCode"); + } + @Test + public void setRestErrorCodeTest(){ + newErrorObject.setRESTErrorCode("newRestErrorCode"); + assertEquals(newErrorObject.getRESTErrorCode(), "newRestErrorCode"); + } + + //Error Text Tests + @Test + public void getErrorTextTest(){ + assertEquals(newErrorObject.getErrorText(), "errorText"); + } + @Test + public void setErrorTextTest(){ + newErrorObject.setErrorText("newErrorText"); + assertEquals(newErrorObject.getErrorText(), "newErrorText"); + } + @Test + public void getErrorCodeStringTest(){ + assertEquals(newErrorObject.getErrorCodeString(), "disposition.category.errorCode"); + } + @Test + public void getErrorCodeStringDisposition5Test(){ + //get Error Code String while Disposition = 5 + newErrorObject.setDisposition("5"); + assertEquals(newErrorObject.getErrorCodeString(), "ERR.5.category.errorCode"); + } + @Test + public void getSeverityCodeTest(){ + newErrorObject.setSeverity("WARN"); + assertEquals(newErrorObject.getSeverityCode(newErrorObject.getSeverity()), "1"); + + newErrorObject.setSeverity("ERROR"); + assertEquals(newErrorObject.getSeverityCode(newErrorObject.getSeverity()), "2"); + + newErrorObject.setSeverity("FATAL"); + assertEquals(newErrorObject.getSeverityCode(newErrorObject.getSeverity()), "3"); + } + //To String Test + @Test + public void toStringTest(){ + assertEquals(newErrorObject.toString(), "ErrorObject [errorCode=errorCode, errorText=errorText, restErrorCode=restErrorCode, httpResponseCode=OK, severity=severity, disposition=disposition, category=category]"); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/logging/LoggingContextTest.java b/aai-core/src/test/java/org/onap/aai/logging/LoggingContextTest.java new file mode 100644 index 00000000..46ac5997 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/logging/LoggingContextTest.java @@ -0,0 +1,108 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.logging; + +import org.junit.Test; + +import java.util.*; + +import static org.junit.Assert.*; + +public class LoggingContextTest { + + private static final int MAX_STORED_CONTEXTS = 100; + + @Test + public void testStopWatch() { + try { + LoggingContext.stopWatchStop(); + throw new AssertionError("No exception thrown when LoggingContext.stopWatchStop() called without a prior LoggingContext.stopWatchStart()"); + } catch (StopWatchNotStartedException e) { + //Expected + } + + LoggingContext.stopWatchStart(); + + assertTrue(LoggingContext.stopWatchStop() >= 0); + + try { + LoggingContext.stopWatchStop(); + throw new AssertionError("No exception thrown when LoggingContext.stopWatchStop() twice in succession"); + } catch (StopWatchNotStartedException e) { + //Expected + } + } + + @Test + public void testRequestId() { //AKA Transaction ID + final String sUuid = "57d51eaa-edc6-4f50-a69d-f2d4d2445120"; + + LoggingContext.requestId(sUuid); + + assertEquals(LoggingContext.requestId(), UUID.fromString(sUuid)); + + final UUID uuid = UUID.randomUUID(); + + LoggingContext.requestId(uuid); + + assertEquals(LoggingContext.requestId(), uuid); + + LoggingContext.requestId("foo"); //Illegal - this will result in a new, randomly + //generated UUID as per the logging spec + + assertNotNull(LoggingContext.requestId()); //Make sure ANY UUID was assigned + assertNotEquals(LoggingContext.requestId(), uuid); //Make sure it actually changed from the last + //known valid UUID + } + + @Test + public void testClear() { + LoggingContext.init(); + LoggingContext.clear(); + + assertEquals(Collections.emptyMap(), LoggingContext.getCopy()); + } + + @Test + public void testSaveRestore() { + + final Deque> contexts = new LinkedList> (); + + LoggingContext.init(); + + for (int i = 0; i < MAX_STORED_CONTEXTS; i++) { + LoggingContext.customField1(String.valueOf(i)); + + assertEquals(LoggingContext.customField1(), String.valueOf(i)); + + LoggingContext.save(); + + contexts.push(LoggingContext.getCopy()); + } + + while (contexts.peek() != null) { + LoggingContext.restore(); + + assertEquals(LoggingContext.getCopy(), contexts.pop()); + } + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/query/GraphTraversalTest.java b/aai-core/src/test/java/org/onap/aai/parsers/query/GraphTraversalTest.java new file mode 100644 index 00000000..df9d6122 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/query/GraphTraversalTest.java @@ -0,0 +1,815 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.query; + +import org.apache.tinkerpop.gremlin.process.traversal.P; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.rest.RestTokens; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; +import javax.ws.rs.core.UriBuilder; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.util.ArrayList; +import java.util.List; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; + +public class GraphTraversalTest extends AAISetup { + + private TransactionalGraphEngine dbEngine; + private TransactionalGraphEngine dbEnginev9; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Configure. + * @throws Exception + * @throws SecurityException + * @throws NoSuchFieldException + */ + @Before + public void configure() throws Exception { + dbEngine = + new TitanDBEngine(QueryStyle.TRAVERSAL, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST), + false); + + dbEnginev9 = + new TitanDBEngine(QueryStyle.TRAVERSAL, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9), + false); + } + + /** + * Parent query. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentQuery() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1").build(); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + + GraphTraversal expected = __.start().has("physical-location-id", "key1").has("aai-node-type", "complex"); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal to normal query", + expected.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be complex", + "complex", + query.getResultType()); + assertEquals( + "result type should be empty", + "", + query.getParentResultType()); + assertEquals("dependent",false, query.isDependent()); + + + } + + /** + * Child query. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void childQuery() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("physical-location-id", "key1").has("aai-node-type", "complex") + .out("hasCtagPool") + .has("aai-node-type", "ctag-pool") + .has("target-pe", "key2").has("availability-zone-name", "key3"); + GraphTraversal expectedParent = __.start() + .has("physical-location-id", "key1").has("aai-node-type", "complex"); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for complex", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be complex", + "complex", + query.getParentResultType()); + assertEquals( + "result type should be ctag-pool", + "ctag-pool", + query.getResultType()); + assertEquals("dependent",true, query.isDependent()); + + + } + + /** + * Naming exceptions. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void namingExceptions() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("vnf-id", "key1").has("aai-node-type", "vce") + .out("hasPortGroup") + .has("aai-node-type", "port-group") + .has("interface-id", "key2").out("hasCTag") + .has("aai-node-type", "cvlan-tag") + .has("cvlan-tag", 655); + GraphTraversal expectedParent = __.start() + .has("vnf-id", "key1").has("aai-node-type", "vce") + .out("hasPortGroup") + .has("aai-node-type", "port-group") + .has("interface-id", "key2"); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + assertEquals( + "result type should be port-group", + "port-group", + query.getParentResultType()); + assertEquals( + "contaner type should be empty", + "", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + + } + + /** + * Gets the all. + * + * @return the all + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void getAll() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("vnf-id", "key1").has("aai-node-type", "vce") + .out("hasPortGroup") + .has("aai-node-type", "port-group") + .has("interface-id", "key2").out("hasCTag") + .has("aai-node-type", "cvlan-tag"); + GraphTraversal expectedParent = __.start() + .has("vnf-id", "key1").has("aai-node-type", "vce") + .out("hasPortGroup") + .has("aai-node-type", "port-group") + .has("interface-id", "key2"); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be port-group", + "port-group", + query.getParentResultType()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + assertEquals( + "container type should be cvlan-tags", + "cvlan-tags", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + + } + + @Test + public void getAllParent() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("aai-node-type", "pserver"); + GraphTraversal expectedParent = __.start() + .has("aai-node-type", "pserver"); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for pserver", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "parent result type should be empty", + "", + query.getParentResultType()); + assertEquals( + "result type should be pserver", + "pserver", + query.getResultType()); + assertEquals( + "container type should be pservers", + "pservers", + query.getContainerType()); + assertEquals("dependent",false, query.isDependent()); + + + } + + + /** + * Gets the via query param. + * + * @return the via query param + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void getViaQueryParam() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("tenant-name", "Tenant1"); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + GraphTraversal expected = __.start() + .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") + .has("aai-node-type", "cloud-region") + .out("has") + .has("aai-node-type", "tenant") + .has("tenant-name", "Tenant1"); + + GraphTraversal expectedParent = __.start() + .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") + .has("aai-node-type", "cloud-region"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for cloud-region", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be cloud-region", + "cloud-region", + query.getParentResultType()); + assertEquals( + "result type should be tenant", + "tenant", + query.getResultType()); + assertEquals( + "container type should be empty", + "", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + } + + @Test + public void getViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + List values = new ArrayList<>(); + values.add("Tenant1"); + values.add("Tenant2"); + map.put("tenant-name", values); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + GraphTraversal expected = __.start() + .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") + .has("aai-node-type", "cloud-region") + .out("has") + .has("aai-node-type", "tenant") + .has("tenant-name", P.within(values)); + + GraphTraversal expectedParent = __.start() + .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") + .has("aai-node-type", "cloud-region"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for cloud-region", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be cloud-region", + "cloud-region", + query.getParentResultType()); + assertEquals( + "result type should be tenant", + "tenant", + query.getResultType()); + assertEquals( + "container type should be empty", + "", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + } + + /** + * Gets the plural via query param. + * + * @return the plural via query param + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void getPluralViaQueryParam() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vnfcs").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("prov-status", "up"); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + GraphTraversal expected = __.start() + .has("aai-node-type", "vnfc") + .has("prov-status", "up"); + + GraphTraversal expectedParent = __.start() + .has("aai-node-type", "vnfc"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "parent result type should be empty", + "", + query.getParentResultType()); + assertEquals( + "result type should be vnfc", + "vnfc", + query.getResultType()); + assertEquals( + "container type should be empty", + "vnfcs", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + } + + /** + * Gets the all query param naming exception. + * + * @return the all query param naming exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void getAllQueryParamNamingException() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("cvlan-tag", "333"); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + + GraphTraversal expected = __.start() + .has("vnf-id", "key1").has("aai-node-type", "vce") + .out("hasPortGroup") + .has("aai-node-type", "port-group") + .has("interface-id", "key2").out("hasCTag") + .has("aai-node-type", "cvlan-tag") + .has("cvlan-tag", 333); + GraphTraversal expectedParent = __.start() + .has("vnf-id", "key1").has("aai-node-type", "vce") + .out("hasPortGroup") + .has("aai-node-type", "port-group") + .has("interface-id", "key2"); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be port-group", + "port-group", + query.getParentResultType()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + assertEquals( + "container type should be cvlan-tags", + "cvlan-tags", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + + } + + /** + * Abstract type. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void abstractType() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("vnf/key1").build(); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + + GraphTraversal expected = __.start() + .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf")); + + GraphTraversal expectedParent = expected; + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be empty", + "", + query.getParentResultType()); + assertEquals( + "result type should be vnf", + "vnf", + query.getResultType()); + + assertEquals("dependent",false, query.isDependent()); + + + } + + /** + * Non parent abstract type. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void nonParentAbstractType() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key2/vnf/key1").build(); + thrown.expect(AAIException.class); + thrown.expectMessage(containsString("not a valid path")); + dbEngine.getQueryBuilder().createQueryFromURI(uri); + } + + @Test + public void parentAbstractTypeWithNesting() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("vnf/key1/vf-modules/vf-module/key2").build(); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + + GraphTraversal expected = __.start() + .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf")) + .union(__.out("has").has(AAIProperties.NODE_TYPE, "vf-module")).has("vf-module-id", "key2"); + + GraphTraversal expectedParent = __.start() + .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf")); + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent gremlin query should be equal the query for ", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "result type should be vnf", + "vnf", + query.getParentResultType()); + assertEquals( + "result type should be vf-module", + "vf-module", + query.getResultType()); + + assertEquals("dependent",true, query.isDependent()); + + } + + @Test + public void getViaBadQueryParam() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants/tenant").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("tenant-n231ame", "Tenant1"); + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + + } + + @Test + public void getPluralViaBadQueryParam() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("tenant-n231ame", "Tenant1"); + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + + } + + @Test + public void getPluralViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vnfcs").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + List values = new ArrayList<>(); + values.add("up"); + values.add("down"); + values.add("left"); + values.add("right"); + values.add("start"); + map.put("prov-status", values); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); + GraphTraversal expected = __.start() + .has("aai-node-type", "vnfc") + .has("prov-status", P.within(values)); + + GraphTraversal expectedParent = __.start() + .has("aai-node-type", "vnfc"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + assertEquals( + "parent result type should be empty", + "", + query.getParentResultType()); + assertEquals( + "result type should be vnfc", + "vnfc", + query.getResultType()); + assertEquals( + "container type should be empty", + "vnfcs", + query.getContainerType()); + assertEquals("dependent",true, query.isDependent()); + + } + + @Test + public void dbAliasedSearch() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/test-objects").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("persona-model-customization-id", "key2"); + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri, map); + GraphTraversal expected = __.start() + .has("aai-node-type", "test-object") + .has("model-customization-id", "key2"); + GraphTraversal expectedParent = __.start() + .has("aai-node-type", "test-object"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + + assertEquals( + "result type should be", + "test-object", + query.getResultType()); + assertEquals( + "result type should be empty", + "", + query.getParentResultType()); + assertEquals("dependent",true, query.isDependent()); + + + } + + @Test + public void dataLinkedSearch() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vpn-bindings").build(); + MultivaluedMap map = new MultivaluedHashMap<>(); + map.putSingle("global-route-target", "key2"); + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri, map); + GraphTraversal expected = __.start() + .has("aai-node-type", "vpn-binding") + .where(__.out("has").has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "key2")); + GraphTraversal expectedParent = __.start() + .has("aai-node-type", "vpn-binding"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + + assertEquals( + "result type should be", + "vpn-binding", + query.getResultType()); + assertEquals( + "result type should be empty", + "", + query.getParentResultType()); + assertEquals("dependent",true, query.isDependent()); + } + + @Test + public void pluralCousin() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers").build(); + + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("physical-location-id", "key1") + .has("aai-node-type", "complex") + .in("locatedIn").has("aai-node-type", "pserver"); + GraphTraversal expectedParent = __.start() + .has("physical-location-id", "key1") + .has("aai-node-type", "complex"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + + assertEquals( + "result type should be", + "pserver", + query.getResultType()); + assertEquals( + "result type should be", + "complex", + query.getParentResultType()); + //this is controversial but we're not allowing writes on this currently + assertEquals("dependent",true, query.isDependent()); + } + + @Test + public void specificCousin() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2").build(); + + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("physical-location-id", "key1") + .has("aai-node-type", "complex") + .in("locatedIn").has("aai-node-type", "pserver") + .has("hostname", "key2"); + GraphTraversal expectedParent = __.start() + .has("physical-location-id", "key1") + .has("aai-node-type", "complex"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + + assertEquals( + "result type should be", + "pserver", + query.getResultType()); + assertEquals( + "result type should be", + "complex", + query.getParentResultType()); + //this is controversial but we're not allowing writes on this currently + assertEquals("dependent",true, query.isDependent()); + } + + @Test + public void doubleSpecificCousin() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2/related-to/vservers/vserver/key3").build(); + + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start() + .has("physical-location-id", "key1") + .has("aai-node-type", "complex") + .in("locatedIn").has("aai-node-type", "pserver") + .has("hostname", "key2") + .in("runsOnPserver").has("aai-node-type", "vserver") + .has("vserver-id", "key3"); + GraphTraversal expectedParent = __.start() + .has("physical-location-id", "key1") + .has("aai-node-type", "complex") + .in("locatedIn").has("aai-node-type", "pserver") + .has("hostname", "key2"); + + assertEquals( + "gremlin query should be " + expected.toString(), + expected.toString(), + query.getQueryBuilder().getQuery().toString()); + assertEquals( + "parent", + expectedParent.toString(), + query.getQueryBuilder().getParentQuery().getQuery().toString()); + + assertEquals( + "result type should be", + "vserver", + query.getResultType()); + assertEquals( + "result type should be", + "pserver", + query.getParentResultType()); + //this is controversial but we're not allowing writes on this currently + assertEquals("dependent",true, query.isDependent()); + } + + @Test + public void traversalEndsInRelatedTo() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to").build(); + + thrown.expect(AAIException.class); + thrown.expectMessage(containsString(RestTokens.COUSIN.toString())); + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); + + } + + @Test + public void pluralCousinToPluralCousin() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/related-to/pservers").build(); + + thrown.expect(AAIException.class); + thrown.expectMessage(containsString("chain plurals")); + QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); + + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/query/LegacyQueryTest.java b/aai-core/src/test/java/org/onap/aai/parsers/query/LegacyQueryTest.java new file mode 100644 index 00000000..c49aa393 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/query/LegacyQueryTest.java @@ -0,0 +1,158 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.query; + +import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelInjestor; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import javax.ws.rs.core.UriBuilder; +import javax.xml.bind.JAXBException; +import java.io.UnsupportedEncodingException; +import java.net.URI; + +import static org.junit.Assert.assertEquals; + + +@Ignore +public class LegacyQueryTest extends AAISetup { + + private ModelInjestor injestor = ModelInjestor.getInstance(); + + private TransactionalGraphEngine dbEngine = + new TitanDBEngine(QueryStyle.GREMLIN_TRAVERSAL, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), + false); + private final Version version = Version.v8; + private DynamicJAXBContext context = injestor.getContextForVersion(version); + + + /** + * Parent query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + + URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key1").build(); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + + String expected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal to normal query", + expected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be pserver", + "pserver", + query.getResultType()); + + } + + /** + * Child query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key1/lag-interfaces/lag-interface/key2").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + + String expected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')" + + ".out('hasLAGInterface').has('aai-node-type', 'lag-interface')" + + ".has('interface-name', 'key2')"; + String parentExpected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; + assertEquals( + "gremlin query should be for node", + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be for parent", + parentExpected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be lag-interface", + "lag-interface", + query.getResultType()); + } + + /** + * Naming exceptions. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); + + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + String expected = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" + + ".has('cvlan-tag', 655)"; + String expectedParent = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipGremlinQueryTest.java b/aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipGremlinQueryTest.java new file mode 100644 index 00000000..73108892 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipGremlinQueryTest.java @@ -0,0 +1,663 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.query; + +import org.eclipse.persistence.dynamic.DynamicEntity; +import org.eclipse.persistence.jaxb.UnmarshallerProperties; +import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.stream.StreamSource; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; + +import static org.hamcrest.CoreMatchers.containsString; +import static org.junit.Assert.assertEquals; + +@Ignore +public class RelationshipGremlinQueryTest extends AAISetup { + + private ModelInjestor injestor = ModelInjestor.getInstance(); + private TransactionalGraphEngine dbEngine = + new TitanDBEngine(QueryStyle.GREMLIN_TRAVERSAL, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), + false); + private final Version version = Version.v8; + private DynamicJAXBContext context = injestor.getContextForVersion(version); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Parent query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + + String content = + "{" + + "\"related-to\" : \"pserver\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"pserver.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String expected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal to normal query", + expected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be pserver", + "pserver", + query.getResultType()); + + } + + /** + * Child query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"lag-interface\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"pserver.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String expected = ".has('hostname', 'key1').has('aai-node-type', 'pserver').in('tosca.relationships.BindsTo').has('aai-node-type', 'lag-interface')" + + ".has('interface-name', 'key2')"; + String parentExpected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; + assertEquals( + "gremlin query should be for node", + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be for parent", + parentExpected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be lag-interface", + "lag-interface", + query.getResultType()); + } + + /** + * Naming exceptions. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"cvlan-tag\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"vce.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"port-group.interface-id\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," + + "\"relationship-value\" : \"655\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String expected = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" + + ".has('cvlan-tag', 655)"; + String expectedParent = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + + } + + /** + * Scrambled relationship. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void scrambledRelationship() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"l3-interface-ipv4-address-list\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," + + "\"relationship-value\" : \"key5\"" + + "},{" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"l-interface.interface-name\"," + + "\"relationship-value\" : \"key3\"" + + "},{" + + "\"relationship-key\" : \"vlan.vlan-interface\"," + + "\"relationship-value\" : \"key4\"" + + "},{" + + "\"relationship-key\" : \"generic-vnf.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "}]" + + "}"; + scrambledRelationshipSpec(content); + } + + /** + * Reversed relationship. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void reversedRelationship() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"l3-interface-ipv4-address-list\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," + + "\"relationship-value\" : \"key5\"" + + "},{" + + "\"relationship-key\" : \"vlan.vlan-interface\"," + + "\"relationship-value\" : \"key4\"" + + "},{" + + "\"relationship-key\" : \"l-interface.interface-name\"," + + "\"relationship-value\" : \"key3\"" + + "},{" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"generic-vnf.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "}]" + + "}"; + scrambledRelationshipSpec(content); + } + + /** + * Ordered ambiguous relationship. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void orderedAmbiguousRelationship() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"l3-interface-ipv4-address-list\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"generic-vnf.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "},{" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"l-interface.interface-name\"," + + "\"relationship-value\" : \"key3\"" + + "},{" + + "\"relationship-key\" : \"vlan.vlan-interface\"," + + "\"relationship-value\" : \"key4\"" + + "},{" + + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," + + "\"relationship-value\" : \"key5\"" + + "}]" + + "}"; + scrambledRelationshipSpec(content); + } + + /** + * Scrambled relationship spec. + * + * @param content the content + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + public void scrambledRelationshipSpec(String content) throws JAXBException, UnsupportedEncodingException, AAIException { + + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String expected = + ".has('vnf-id', 'key1').has('aai-node-type', 'generic-vnf')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'lag-interface')" + + ".has('interface-name', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'l-interface')" + + ".has('interface-name', 'key3').out('tosca.relationships.LinksTo').has('aai-node-type', 'vlan')" + + ".has('vlan-interface', 'key4').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'l3-interface-ipv4-address-list')" + + ".has('l3-interface-ipv4-address', 'key5')"; + String expectedParent = + ".has('vnf-id', 'key1').has('aai-node-type', 'generic-vnf')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'lag-interface')" + + ".has('interface-name', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'l-interface')" + + ".has('interface-name', 'key3').out('tosca.relationships.LinksTo').has('aai-node-type', 'vlan')" + + ".has('vlan-interface', 'key4')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for vlan", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be l3-interface-ipv4-address-list", + "l3-interface-ipv4-address-list", + query.getResultType()); + + } + + /** + * Short circuit. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void shortCircuit() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"cvlan-tag\"," + + "\"related-link\" : \"http://mock-system-name.com:8443/aai/v6/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"vce.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"port-group.interface-id\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," + + "\"relationship-value\" : \"655\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String expected = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" + + ".has('cvlan-tag', 655)"; + String expectedParent = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + + } + + @Test + public void shorterCircuit() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"cvlan-tag\"," + + "\"related-link\" : \"file:///network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655\"" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String expected = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" + + ".has('cvlan-tag', 655)"; + String expectedParent = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" + + ".has('interface-id', 'key2')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + + } + + /** + * Double key. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void doubleKey() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"ctag-pool\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"complex.physical-location-id\"," + + "\"relationship-value\" : \"key1\"" + + " }, { " + + "\"relationship-key\" : \"ctag-pool.target-pe\"," + + " \"relationship-value\" : \"key2\"" + + " },{" + + "\"relationship-key\" : \"ctag-pool.availability-zone-name\"," + + "\"relationship-value\" : \"key3\"" + + "}]" + + "}"; + + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String expected = + ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'ctag-pool')" + + ".has('target-pe', 'key2')" + + ".has('availability-zone-name', 'key3')"; + String expectedParent = + ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')"; + + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be ctag-pool", + "ctag-pool", + query.getResultType()); + + } + + /** + * Abstract type. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void abstractType() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"vnf\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"vnf.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + " }]" + + "}"; + + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String expected = + ".has('vnf-id', 'key1')" + + ".has('aai-node-type', P.within('vce','generic-vnf'))"; + + String expectedParent = + ".has('vnf-id', 'key1')" + + ".has('aai-node-type', P.within('vce','generic-vnf'))"; + + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be vnf", + "vnf", + query.getResultType()); + + } + + /** + * Invalid node name. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void invalidNodeName() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"l3-interface-ipv4-address-list\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"generic-vnf.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "},{" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"l-infeaterface.interface-name\"," + + "\"relationship-value\" : \"key3\"" + + "},{" + + "\"relationship-key\" : \"vlan.vlan-interface\"," + + "\"relationship-value\" : \"key4\"" + + "},{" + + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," + + "\"relationship-value\" : \"key5\"" + + "}]" + + "}"; + thrown.expect(AAIException.class); + thrown.expectMessage(containsString("invalid object name")); + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + } + + /** + * Invalid property name. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void invalidPropertyName() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"l3-interface-ipv4-address-list\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"generic-vnf.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "},{" + + "\"relationship-key\" : \"lag-interface.intfdaferface-name\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"l-interface.interface-name\"," + + "\"relationship-value\" : \"key3\"" + + "},{" + + "\"relationship-key\" : \"vlan.vlan-interface\"," + + "\"relationship-value\" : \"key4\"" + + "},{" + + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," + + "\"relationship-value\" : \"key5\"" + + "}]" + + "}"; + thrown.expect(AAIException.class); + thrown.expectMessage(containsString("invalid property name")); + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipQueryTest.java b/aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipQueryTest.java new file mode 100644 index 00000000..7a72bcd0 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/query/RelationshipQueryTest.java @@ -0,0 +1,272 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.query; + +import org.eclipse.persistence.dynamic.DynamicEntity; +import org.eclipse.persistence.jaxb.UnmarshallerProperties; +import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.stream.StreamSource; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; + +import static org.junit.Assert.assertEquals; + +@Ignore +public class RelationshipQueryTest extends AAISetup { + + private ModelInjestor injestor = ModelInjestor.getInstance(); + + private TransactionalGraphEngine dbEngine = + new TitanDBEngine(QueryStyle.GREMLIN_TRAVERSAL, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), + false); + private final Version version = Version.v8; + private DynamicJAXBContext context = injestor.getContextForVersion(version); + + /** + * Parent query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + + String content = + "{" + + "\"related-to\" : \"pserver\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"pserver.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String expected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal to normal query", + expected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be pserver", + "pserver", + query.getResultType()); + + } + + /** + * Child query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Ignore + @Test + public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"lag-interface\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"pserver.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String expected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver').out('hasLAGInterface').has('aai-node-type', 'lag-interface')" + + ".has('interface-name', 'key2')"; + String parentExpected = + ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; + assertEquals( + "gremlin query should be for node", + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be for parent", + parentExpected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be lag-interface", + "lag-interface", + query.getResultType()); + } + + /** + * Naming exceptions. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Ignore + @Test + public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"cvlan-tag\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"vce.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"port-group.interface-id\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," + + "\"relationship-value\" : \"655\"" + + "}]" + + "}"; + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String expected = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce').in('org.onap.relationships.inventory.BelongsTo')" + + ".has('aai-node-type', 'port-group').has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" + + ".has('cvlan-tag', 655)"; + String expectedParent = + ".has('vnf-id', 'key1').has('aai-node-type', 'vce').in('org.onap.relationships.inventory.BelongsTo')" + + ".has('aai-node-type', 'port-group').has('interface-id', 'key2')"; + + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be cvlan-tag", + "cvlan-tag", + query.getResultType()); + + } + + /** + * Double key. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Ignore + @Test + public void doubleKey() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"ctag-pool\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"complex.physical-location-id\"," + + "\"relationship-value\" : \"key1\"" + + " }, { " + + "\"relationship-key\" : \"ctag-pool.target-pe\"," + + " \"relationship-value\" : \"key2\"" + + " },{" + + "\"relationship-key\" : \"ctag-pool.availability-zone-name\"," + + "\"relationship-value\" : \"key3\"" + + "}]" + + "}"; + + + Unmarshaller unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String expected = + ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')" + + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'ctag-pool')" + + ".has('target-pe', 'key2')" + + ".has('availability-zone-name', 'key3')"; + String expectedParent = + ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')"; + + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be equal the query for port group", + expectedParent, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "result type should be ctag-pool", + "ctag-pool", + query.getResultType()); + + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/query/UniqueRelationshipQueryTest.java b/aai-core/src/test/java/org/onap/aai/parsers/query/UniqueRelationshipQueryTest.java new file mode 100644 index 00000000..12290861 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/query/UniqueRelationshipQueryTest.java @@ -0,0 +1,297 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.query; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.eclipse.persistence.dynamic.DynamicEntity; +import org.eclipse.persistence.jaxb.UnmarshallerProperties; +import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import javax.xml.bind.JAXBException; +import javax.xml.bind.Unmarshaller; +import javax.xml.transform.stream.StreamSource; +import java.io.StringReader; +import java.io.UnsupportedEncodingException; + +import static org.junit.Assert.assertEquals; + +@Ignore +public class UniqueRelationshipQueryTest extends AAISetup { + + private ModelInjestor injestor = ModelInjestor.getInstance(); + private TransactionalGraphEngine dbEngine = + new TitanDBEngine(QueryStyle.GREMLIN_UNIQUE, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), + false); + private final Version version = Version.v8; + private DynamicJAXBContext context = injestor.getContextForVersion(version); + private Unmarshaller unmarshaller = null; + + /** + * Setup. + * + * @throws JAXBException the JAXB exception + */ + @Before + public void setup() throws JAXBException { + unmarshaller = context.createUnmarshaller(); + unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); + unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); + unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); + } + + /** + * Parent query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + + String content = + "{" + + "\"related-to\" : \"pserver\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"pserver.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}]" + + "}"; + + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String key = "pserver/key1"; + GraphTraversal expected = + __.start().has("aai-unique-key", key); + String resultType = "pserver"; + String containerType = ""; + + testSet(query, expected, expected, resultType, containerType); + + } + + /** + * Child query. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"lag-interface\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"pserver.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"lag-interface.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "}]" + + "}"; + + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String key = "pserver/key1/lag-interface/key2"; + GraphTraversal expected = + __.start().has("aai-unique-key", key); + GraphTraversal parentExpected = + __.start().has("aai-unique-key", "pserver/key1"); + String resultType = "lag-interface"; + String containerType = ""; + + testSet(query, expected, parentExpected, resultType, containerType); + } + + /** + * Naming exceptions. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"cvlan-tag\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"vce.vnf-id\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"port-group.interface-id\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," + + "\"relationship-value\" : \"655\"" + + "}]" + + "}"; + + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String key = "vce/key1/port-group/key2/cvlan-tag/655"; + GraphTraversal expected = + __.start().has("aai-unique-key", key); + GraphTraversal parentExpected = + __.start().has("aai-unique-key", "vce/key1/port-group/key2"); + String resultType = "cvlan-tag"; + String containerType = ""; + + testSet(query, expected, parentExpected, resultType, containerType); + + } + + /** + * Double key. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void doubleKey() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"service-capability\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"service-capability.service-type\"," + + "\"relationship-value\" : \"key1\"" + + " }, { " + + "\"relationship-key\" : \"service-capability.vnf-type\"," + + " \"relationship-value\" : \"key2\"" + + " }]" + + "}"; + + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + + String key = "service-capability/key1/key2"; + GraphTraversal expected = + __.start().has("aai-unique-key", key); + GraphTraversal parentExpected = + __.start().has("aai-unique-key", "service-capability/key1/key2"); + String resultType = "service-capability"; + String containerType = ""; + + testSet(query, expected, parentExpected, resultType, containerType); + + } + + /** + * Short circuit. + * + * @throws JAXBException the JAXB exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void shortCircuit() throws JAXBException, UnsupportedEncodingException, AAIException { + String content = + "{" + + "\"related-to\" : \"cvlan-tag\"," + + "\"related-link\" : \"http://mock-system-name.com:8443/aai/v6/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655\"," + + "\"relationship-data\" : [{" + + "\"relationship-key\" : \"vce.hostname\"," + + "\"relationship-value\" : \"key1\"" + + "}, {" + + "\"relationship-key\" : \"port-group.interface-name\"," + + "\"relationship-value\" : \"key2\"" + + "},{" + + "\"relationship-key\" : \"cvlan-tag.-name\"," + + "\"relationship-value\" : \"655\"" + + "}]" + + "}"; + + Object obj = context.newDynamicEntity("Relationship"); + + DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); + + Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); + String key = "vce/key1/port-group/key2/cvlan-tag/655"; + GraphTraversal expected = __.start().has("aai-unique-key", key); + GraphTraversal parentExpected = __.start().has("aai-unique-key", "vce/key1/port-group/key2"); + String resultType = "cvlan-tag"; + String containerType = ""; + + testSet(query, expected, parentExpected, resultType, containerType); + + } + + /** + * Test set. + * + * @param query the query + * @param expected the expected + * @param parentExpected the parent expected + * @param resultType the result type + * @param containerType the container type + */ + public void testSet(QueryParser query, GraphTraversal expected, GraphTraversal parentExpected, String resultType, String containerType) { + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be " + parentExpected, + parentExpected, + query.getParentQueryBuilder().getParentQuery()); + assertEquals( + "result type should be " + resultType, + resultType, + query.getResultType()); + assertEquals( + "container type should be " + containerType, + containerType, + query.getContainerType()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/query/UniqueURIQueryTest.java b/aai-core/src/test/java/org/onap/aai/parsers/query/UniqueURIQueryTest.java new file mode 100644 index 00000000..84e9c6bc --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/query/UniqueURIQueryTest.java @@ -0,0 +1,195 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.query; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelInjestor; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import javax.ws.rs.core.UriBuilder; +import java.io.UnsupportedEncodingException; +import java.net.URI; + +import static org.junit.Assert.assertEquals; + +@Ignore +public class UniqueURIQueryTest extends AAISetup { + + private ModelInjestor injestor = ModelInjestor.getInstance(); + private TransactionalGraphEngine dbEngine = + new TitanDBEngine(QueryStyle.GREMLIN_UNIQUE, + LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), + false); + private final Version version = Version.v8; + private DynamicJAXBContext context = injestor.getContextForVersion(version); + + /** + * Parent query. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentQuery() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1").build(); + String key = "complex/key1"; + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start().has("aai-unique-key", key); + String parentResultType = ""; + String resultType = "complex"; + String containerType = ""; + + testSet(query, expected, expected, parentResultType, resultType, containerType); + + } + + /** + * Parent plural query. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void parentPluralQuery() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start().has("aai-node-type", "complex"); + String parentResultType = ""; + String resultType = "complex"; + String containerType = "complexes"; + + testSet(query, expected, expected, parentResultType, resultType, containerType); + + } + + /** + * Child query. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void childQuery() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + String parentKey = "complex/key1"; + String key = parentKey + "/ctag-pool/key2/key3"; + GraphTraversal expected = __.start().has("aai-unique-key", key); + GraphTraversal parentExpected = __.start().has("aai-unique-key", parentKey); + String parentResultType = "complex"; + String resultType = "ctag-pool"; + String containerType = ""; + + testSet(query, expected, parentExpected, parentResultType, resultType, containerType); + + } + + /** + * Naming exceptions. + * + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void namingExceptions() throws UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + String parentKey = "vce/key1/port-group/key2"; + String key = parentKey + "/cvlan-tag/655"; + GraphTraversal expected = __.start().has("aai-unique-key", key); + GraphTraversal parentExpected = __.start().has("aai-unique-key", parentKey); + String parentResultType = "port-group"; + String resultType = "cvlan-tag"; + String containerType = ""; + + testSet(query, expected, parentExpected, parentResultType, resultType, containerType); + + } + + /** + * Gets the all. + * + * @return the all + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + public void getAll() throws UnsupportedEncodingException, AAIException { + String parentURI = "network/vces/vce/key1/port-groups/port-group/key2"; + String parentKey = "vce/key1/port-group/key2"; + URI uri = UriBuilder.fromPath(parentURI + "/cvlan-tags").build(); + QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); + GraphTraversal expected = __.start().has("aai-unique-key", parentKey).out("hasCTag").has("aai-node-type", "cvlan-tag"); + GraphTraversal parentExpected = __.start().has("aai-unique-key",parentKey); + String parentResultType = "port-group"; + String resultType = "cvlan-tag"; + String containerType = "cvlan-tags"; + + testSet(query, expected, parentExpected, parentResultType, resultType, containerType); + + } + + /** + * Test set. + * + * @param query the query + * @param expected the expected + * @param parentExpected the parent expected + * @param parentResultType the parent result type + * @param resultType the result type + * @param containerType the container type + */ + public void testSet(QueryParser query, GraphTraversal expected, GraphTraversal parentExpected, String parentResultType, String resultType, String containerType) { + assertEquals( + "gremlin query should be " + expected, + expected, + query.getQueryBuilder().getQuery()); + assertEquals( + "parent gremlin query should be " + parentExpected, + parentExpected, + query.getQueryBuilder().getParentQuery().getQuery()); + assertEquals( + "parent result type should be " + parentResultType, + parentResultType, + query.getParentResultType()); + assertEquals( + "result type should be " + resultType, + resultType, + query.getResultType()); + assertEquals( + "container type should be " + containerType, + containerType, + query.getContainerType()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/relationship/RelationshipToURITest.java b/aai-core/src/test/java/org/onap/aai/parsers/relationship/RelationshipToURITest.java new file mode 100644 index 00000000..04727067 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/relationship/RelationshipToURITest.java @@ -0,0 +1,225 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.relationship; + +import org.apache.commons.io.IOUtils; +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.parsers.exceptions.AAIIdentityMapParseException; +import org.onap.aai.parsers.exceptions.AmbiguousMapAAIException; + +import java.io.FileInputStream; +import java.io.IOException; +import java.net.URI; +import java.net.URISyntaxException; + +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; + +public class RelationshipToURITest extends AAISetup { + + private final ModelType modelType = ModelType.MOXY; + private final Version version10 = Version.v10; + private final Version version9 = Version.v9; + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void onlyLink() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("only-related-link.json")); + URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected.getPath(), uri.getPath()); + } + + @Test + public void onlyData() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("only-relationship-data.json")); + URI expected = new URI("/network/test-objects/test-object/key1"); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected, uri); + } + + @Test + public void failV10() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-failv10-successv9.json")); + URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); + + thrown.expect(AAIIdentityMapParseException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + RelationshipToURI parse = new RelationshipToURI(loader, obj); + URI uri = parse.getUri(); + + } + + @Test + public void successV9() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version9); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-failv10-successv9.json")); + URI expected = new URI("/network/test-objects/test-object/key2"); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected, uri); + + + } + + @Test + public void failV9() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version9); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-successv10-failv9.json")); + URI expected = new URI("/network/test-objects/test-object/key1"); + + thrown.expect(AAIIdentityMapParseException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + + URI uri = parse.getUri(); + + } + + @Test + public void failNothingToParse() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("nothing-to-parse.json")); + URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); + + thrown.expect(AAIIdentityMapParseException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + } + + @Test + public void successV10() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-successv10-failv9.json")); + URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected, uri); + + + } + + @Test + public void ambiguousRelationship() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("ambiguous-relationship.json")); + URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); + + thrown.expect(AmbiguousMapAAIException.class); + thrown.expect(hasProperty("code", is("AAI_6146"))); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected, uri); + + + } + + @Ignore + @Test + public void moreItemsThanRequired() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("too-many-items-relationship.json")); + URI expected = new URI("/network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2"); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected.toString(), uri.toString()); + + } + + @Test + public void twoTopLevelNodes() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("two-top-level-relationship.json")); + URI expected = new URI("/network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2"); + + thrown.expect(AmbiguousMapAAIException.class); + thrown.expect(hasProperty("code", is("AAI_6146"))); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected, uri); + + } + + @Test + public void topLevelWithTwoKeys() throws AAIException, URISyntaxException, IOException { + Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); + Introspector obj = loader.unmarshal("relationship", this.getJsonString("top-level-two-keys-relationship.json")); + URI expected = new URI("/cloud-infrastructure/cloud-regions/cloud-region/key1/key2/availability-zones/availability-zone/key3"); + + RelationshipToURI parse = new RelationshipToURI(loader, obj); + + URI uri = parse.getUri(); + + assertEquals("related-link is equal", expected.toString(), uri.toString()); + + } + + + private String getJsonString(String filename) throws IOException { + + + FileInputStream is = new FileInputStream("src/test/resources/bundleconfig-local/etc/relationship/" + filename); + String s = IOUtils.toString(is, "UTF-8"); + IOUtils.closeQuietly(is); + + return s; + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIParserTest.java b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIParserTest.java new file mode 100644 index 00000000..bc3a684b --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIParserTest.java @@ -0,0 +1,102 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.uri; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; + +import javax.ws.rs.core.UriBuilder; +import javax.xml.bind.JAXBException; +import java.io.UnsupportedEncodingException; +import java.net.URI; + +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; + +public class URIParserTest extends AAISetup { + + private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Invalid path. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void invalidPath() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/network/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + new URIToDBKey(loader, uri); + } + + /** + * Invalid path no name space. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void invalidPathNoNameSpace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + new URIToDBKey(loader, uri); + } + + /** + * Invalid path partial. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void invalidPathPartial() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + new URIToDBKey(loader, uri); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToDBKeyTest.java b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToDBKeyTest.java new file mode 100644 index 00000000..7656661b --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToDBKeyTest.java @@ -0,0 +1,186 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.uri; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.parsers.exceptions.DoesNotStartWithValidNamespaceException; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.introspection.*; +import org.powermock.core.classloader.annotations.PrepareForTest; + +import javax.ws.rs.core.UriBuilder; +import javax.xml.bind.JAXBException; +import java.io.UnsupportedEncodingException; +import java.net.URI; + +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; + + + +@PrepareForTest(ModelInjestor.class) +public class URIToDBKeyTest extends AAISetup { + + private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Uri. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); + URIToDBKey parse = new URIToDBKey(loader, uri); + Object result = parse.getResult(); + + String expected = "cloud-region/tenant/vserver/l-interface"; + + assertEquals("blah", expected, result); + + } + + /** + * Uri no version. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); + URIToDBKey parse = new URIToDBKey(loader, uri); + Object result = parse.getResult(); + + String expected = "cloud-region/tenant/vserver/l-interface"; + + assertEquals("blah", expected, result); + + } + + + /** + * Bad URI. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3001"))); + + new URIToDBKey(loader, uri); + } + + /** + * NotValid namespace. + * + * @throws JAXBException the JAXB exception + * @throws DoesNotStartWithValidNamespaceException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void notValidNamespace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/cloud-region/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); + thrown.expect(DoesNotStartWithValidNamespaceException.class); + URIToDBKey parse = new URIToDBKey(loader, uri); + } + + + /** + * No valid tokens. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void noValidTokens() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud/blah/blah").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + new URIToDBKey(loader, uri); + } + + /** + * Starts with valid namespace. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void startsWithValidNamespace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); + + URIToDBKey parse = new URIToDBKey(loader, uri); + Object result = parse.getResult(); + + String expected = "cloud-region/tenant/vserver/l-interface"; + + assertEquals("blah", expected, result); + } + + /** + * Naming exceptions. + * + * @throws IllegalArgumentException the illegal argument exception + * @throws AAIException the AAI exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void namingExceptions() throws IllegalArgumentException, AAIException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); + URIToDBKey parse = new URIToDBKey(loader, uri); + Object result = parse.getResult(); + + String expected = "vce/port-group/cvlan-tag"; + + assertEquals("blah", expected, result); + + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToExtensionInformationTest.java b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToExtensionInformationTest.java new file mode 100644 index 00000000..ce4933a6 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToExtensionInformationTest.java @@ -0,0 +1,95 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.uri; + +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.restcore.HttpMethod; + +import javax.ws.rs.core.UriBuilder; +import javax.xml.bind.JAXBException; +import java.io.UnsupportedEncodingException; +import java.net.URI; + +import static org.junit.Assert.assertEquals; + + +public class URIToExtensionInformationTest extends AAISetup { + + private Loader v8Loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v10); + + /** + * Vservers V 7. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void vserversV8() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + v8Loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/key1/vservers/vserver/key2").build(); + URIToExtensionInformation parse = new URIToExtensionInformation(v8Loader, uri); + + String namespace = "cloudInfrastructure"; + String preMethodName = "DynamicAddCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverPreProc"; + String postMethodName = "DynamicAddCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverPostProc"; + String topLevel = "CloudRegion"; + testSpec(parse, HttpMethod.PUT, namespace, preMethodName, postMethodName, topLevel); + + } + + /** + * Test spec. + * + * @param info the info + * @param httpMethod the http method + * @param namespace the namespace + * @param preMethodName the pre method name + * @param postMethodName the post method name + * @param topLevel the top level + */ + private void testSpec(URIToExtensionInformation info, HttpMethod httpMethod, String namespace, String preMethodName, String postMethodName, String topLevel) { + + + String namespaceResult = info.getNamespace(); + String methodNameResult = info.getMethodName(httpMethod, true); + + assertEquals("namespace", namespace, namespaceResult); + assertEquals("preprocess method name", preMethodName, methodNameResult); + methodNameResult = info.getMethodName(httpMethod, false); + + assertEquals("postprocess method name", postMethodName, methodNameResult); + + String topLevelResult = info.getTopObject(); + + assertEquals("topLevel", topLevel, topLevelResult); + } + + +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java new file mode 100644 index 00000000..d51dcead --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToObjectTest.java @@ -0,0 +1,249 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.uri; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; + +import javax.ws.rs.core.UriBuilder; +import javax.xml.bind.JAXBException; +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.util.HashMap; + +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertEquals; + + + +public class URIToObjectTest extends AAISetup { + + private Version version = Version.v10; + private Version currentVersion = AAIProperties.LATEST; + private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, version); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Uri. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + URIToObject parse = new URIToObject(loader, uri); + Introspector result = parse.getTopEntity(); + String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; + String topEntity = "cloud-region"; + String entity = "l-interface"; + + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + + } + + /** + * Uri no version. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIUnknownObjectException + */ + @Test + public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, AAIUnknownObjectException { + URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + HashMap relatedObjects = new HashMap<>(); + Introspector tenantObj = this.loader.introspectorFromName("tenant"); + tenantObj.setValue("tenant-id", "key1"); + tenantObj.setValue("tenant-name", "name1"); + relatedObjects.put(tenantObj.getObjectId(), tenantObj); + Introspector vserverObj = this.loader.introspectorFromName("vserver"); + vserverObj.setValue("vserver-id", "key2"); + vserverObj.setValue("vserver-name", "name2"); + relatedObjects.put(vserverObj.getObjectId(), vserverObj); + + URIToObject parse = new URIToObject(loader, uri, relatedObjects); + Introspector result = parse.getTopEntity(); + String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"tenant-name\":\"name1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"vserver-name\":\"name2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; + String topEntity = "cloud-region"; + String entity = "l-interface"; + + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + + + } + + + /** + * Bad URI. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + new URIToObject(loader, uri); + } + + /** + * Starts with valid namespace. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void startsWithValidNamespace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + URIToObject parse = new URIToObject(loader, uri); + Introspector result = parse.getTopEntity(); + String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; + String topEntity = "cloud-region"; + String entity = "l-interface"; + + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + } + + /** + * Single top level. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void singleTopLevel() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/network/generic-vnfs/generic-vnf/key1").build(); + URIToObject parse = new URIToObject(loader, uri); + Introspector result = parse.getTopEntity(); + String expected = "{\"vnf-id\":\"key1\"}"; + + String topEntity = "generic-vnf"; + String entity = "generic-vnf"; + + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + + } + + /** + * Naming exceptions. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + @Ignore + public void namingExceptions() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); + URIToObject parse = new URIToObject(loader, uri); + Introspector result = parse.getTopEntity(); + String expected = "{\"vnf-id\":\"key1\",\"port-groups\":{\"port-group\":[{\"interface-id\":\"key2\",\"cvlan-tags\":{\"cvlan-tag-entry\":[{\"cvlan-tag\":655}]}}]}}"; + String topEntity = "vce"; + String entity = "cvlan-tag"; + + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + + } + + /** + * No list object. + * + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws AAIException the AAI exception + */ + @Test + @Ignore + public void noListObject() throws IllegalArgumentException, UnsupportedEncodingException, AAIException { + URI uri = UriBuilder.fromPath("/aai/v6/network/vpls-pes/vpls-pe/0e6189fd-9257-49b9-a3be-d7ba980ccfc9/lag-interfaces/lag-interface/8ae5aa76-d597-4382-b219-04f266fe5e37/l-interfaces/l-interface/9e141d03-467b-437f-b4eb-b3133ec1e205/l3-interface-ipv4-address-list/8f19f0ea-a81f-488e-8d5c-9b7b53696c11").build(); + URIToObject parse = new URIToObject(loader, uri); + Introspector result = parse.getTopEntity(); + String topEntity = "vpls-pe"; + String entity = "l3-interface-ipv4-address-list"; + String expected = "{\"equipment-name\":\"0e6189fd-9257-49b9-a3be-d7ba980ccfc9\",\"lag-interfaces\":{\"lag-interface\":[{\"interface-name\":\"8ae5aa76-d597-4382-b219-04f266fe5e37\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"9e141d03-467b-437f-b4eb-b3133ec1e205\",\"l3-interface-ipv4-address-list\":[{\"l3-interface-ipv4-address\":\"8f19f0ea-a81f-488e-8d5c-9b7b53696c11\"}]}]}}]}}"; + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + + } + + @Test + public void relativePath() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("./l-interfaces/l-interface/key1").build(); + URIToObject parse = new URIToObject(loader, uri); + Introspector result = parse.getEntity(); + String expected = "{\"interface-name\":\"key1\"}"; + + String topEntity = "l-interface"; + String entity = "l-interface"; + + testSet(result.marshal(false), parse, expected, topEntity, entity, version); + + } + + /** + * Test set. + * + * @param json the json + * @param parse the parse + * @param expected the expected + * @param topEntity the top entity + * @param entity the entity + * @param version the version + */ + public void testSet(String json, URIToObject parse, String expected, String topEntity, String entity, Version version) { + assertEquals("blah", expected, json); + + assertEquals("top entity", topEntity, parse.getTopEntityName()); + + assertEquals("entity", entity, parse.getEntityName()); + + assertEquals("entity object", entity, parse.getEntity().getDbName()); + + assertEquals("parent list object", 1, parse.getParentList().size()); + + assertEquals("object version", version, parse.getObjectVersion()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToRelationshipObjectTest.java b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToRelationshipObjectTest.java new file mode 100644 index 00000000..4f15d278 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/parsers/uri/URIToRelationshipObjectTest.java @@ -0,0 +1,151 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.parsers.uri; + +import org.junit.Ignore; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; + +import javax.ws.rs.core.UriBuilder; +import javax.xml.bind.JAXBException; +import java.io.UnsupportedEncodingException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; + +import static org.hamcrest.Matchers.hasProperty; +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertTrue; + + +public class URIToRelationshipObjectTest extends AAISetup { + + private Version latest = Version.v10; + private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, latest); + + @Rule + public ExpectedException thrown = ExpectedException.none(); + + /** + * Uri. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws URISyntaxException + * @throws MalformedURLException the malformed URL exception + */ + @Test + public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { + + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); + Introspector result = parse.getResult(); + String expected = "\\{\"related-to\":\"l-interface\",\"related-link\":\"/aai/" + latest + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3\",\"relationship-data\":\\[\\{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"mycloudregionowner\"\\},\\{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"mycloudregionid\"\\},\\{\"relationship-key\":\"tenant.tenant-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"vserver.vserver-id\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"l-interface.interface-name\",\"relationship-value\":\"key3\"\\}\\]\\}"; + assertTrue("blah", result.marshal(false).matches(expected)); + + } + + /** + * Uri no version. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws URISyntaxException + * @throws MalformedURLException the malformed URL exception + */ + @Test + public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { + URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); + URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); + Introspector result = parse.getResult(); + String expected = "\\{\"related-to\":\"l-interface\",\"related-link\":\"/aai/" + latest + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3\",\"relationship-data\":\\[\\{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"mycloudregionowner\"\\},\\{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"mycloudregionid\"\\},\\{\"relationship-key\":\"tenant.tenant-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"vserver.vserver-id\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"l-interface.interface-name\",\"relationship-value\":\"key3\"\\}\\]\\}"; + assertTrue("blah", result.marshal(false).matches(expected)); + + + } + + /** + * Double key relationship. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws URISyntaxException + * @throws MalformedURLException the malformed URL exception + */ + @Test + public void doubleKeyRelationship() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { + URI uri = UriBuilder.fromPath("/aai/" + latest + "/cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3/").build(); + URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); + Introspector result = parse.getResult(); + String expected = "\\{\"related-to\":\"ctag-pool\",\"related-link\":\"/aai/" + latest + "/cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3\",\"relationship-data\":\\[\\{\"relationship-key\":\"complex.physical-location-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"ctag-pool.target-pe\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"ctag-pool.availability-zone-name\",\"relationship-value\":\"key3\"\\}\\]\\}"; + assertTrue("blah", result.marshal(false).matches(expected)); + + } + + /** + * Uri with non string key. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + * @throws URISyntaxException + * @throws MalformedURLException the malformed URL exception + */ + @Test + public void uriWithNonStringKey() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { + URI uri = UriBuilder.fromPath("/aai/" + latest + "/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/144").build(); + URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); + Introspector result = parse.getResult(); + String expected = "\\{\"related-to\":\"cvlan-tag\",\"related-link\":\"/aai/" + latest + "/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/144\",\"relationship-data\":\\[\\{\"relationship-key\":\"vce.vnf-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"port-group.interface-id\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"cvlan-tag.cvlan-tag\",\"relationship-value\":\"144\"\\}\\]\\}"; + assertTrue("blah", result.marshal(false).matches(expected)); + } + /** + * Bad URI. + * + * @throws JAXBException the JAXB exception + * @throws AAIException the AAI exception + * @throws IllegalArgumentException the illegal argument exception + * @throws UnsupportedEncodingException the unsupported encoding exception + */ + @Test + public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { + URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); + + thrown.expect(AAIException.class); + thrown.expect(hasProperty("code", is("AAI_3000"))); + + URIToObject parse = new URIToObject(loader, uri); + + } +} diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/SimplePathTest.java b/aai-core/src/test/java/org/onap/aai/query/builder/SimplePathTest.java new file mode 100644 index 00000000..a3515ab9 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/query/builder/SimplePathTest.java @@ -0,0 +1,124 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.query.builder; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.serialization.db.EdgeRules; +import org.onap.aai.serialization.db.EdgeType; + +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class SimplePathTest extends AAISetup { + + public Loader loader; + + @Before + public void setup() throws Exception { + loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); + } + + private QueryBuilder buildTestQuery(QueryBuilder qb) throws AAIException { + return qb.createEdgeTraversal(EdgeType.TREE, "generic-vnf", "l-interface") + .until(qb.newInstance().getVerticesByProperty("aai-node-type", "generic-vnf")) + .repeat(qb.newInstance().union( + qb.newInstance().createEdgeTraversal(EdgeType.TREE, "generic-vnf", "l-interface"), + qb.newInstance().createEdgeTraversal(EdgeType.TREE, "l-interface", "generic-vnf"), + qb.newInstance().createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link"), + qb.newInstance().createEdgeTraversal(EdgeType.COUSIN, "logical-link", "l-interface") + ).simplePath()) + .store("x").cap("x").unfold().dedup(); + } + + private GraphTraversalSource setupGraph() throws AAIException{ + Graph graph = TinkerGraph.open(); + GraphTraversalSource g = graph.traversal(); + EdgeRules rules = EdgeRules.getInstance(); + + Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "00", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); + + Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", + "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); + + Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", "logical-link", + "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); + + Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", + "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); + + Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "21", "aai-node-type", "logical-link", + "link-name", "loglink2", "in-maint", "false", "link-type", "sausage"); + + Vertex lint3 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", + "interface-name", "lint3", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); + + Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "01", "aai-node-type", "generic-vnf", + "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); + + rules.addTreeEdge(g, gvnf1, lint1); + rules.addEdge(g, lint1, loglink1); + rules.addEdge(g, loglink1, lint2); + rules.addEdge(g, lint2, loglink2); + rules.addEdge(g, loglink2, lint3); + rules.addTreeEdge(g, gvnf2, lint3); + + return g; + } + + @Test + public void gremlinQueryTest() throws AAIException { + GraphTraversalSource g = setupGraph(); + List expected = g.V("01").toList(); + Vertex start = g.V("00").toList().get(0); + + GremlinTraversal qb = new GremlinTraversal<>(loader, g, start); + QueryBuilder q = buildTestQuery(qb); + List results = q.toList(); + assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); + } + + @Test + public void traversalQueryTest() throws AAIException { + GraphTraversalSource g = setupGraph(); + List expected = g.V("01").toList(); + Vertex start = g.V("00").toList().get(0); + + TraversalQuery qb = new TraversalQuery<>(loader, g, start); + QueryBuilder q = buildTestQuery(qb); + List results = q.toList(); + assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/TraversalQueryTest.java b/aai-core/src/test/java/org/onap/aai/query/builder/TraversalQueryTest.java new file mode 100644 index 00000000..fa06e17f --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/query/builder/TraversalQueryTest.java @@ -0,0 +1,102 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.query.builder; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.mockito.Mock; +import org.onap.aai.AAISetup; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; + +import static org.junit.Assert.assertEquals; + +public class TraversalQueryTest extends AAISetup { + + private Loader loader; + + @Mock + private GraphTraversalSource g; + + @Before + public void configure() throws Exception { + loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); + } + + @Test + public void unionQuery() { + TraversalQuery tQ = new TraversalQuery<>(loader, g); + TraversalQuery tQ2 = new TraversalQuery<>(loader, g); + TraversalQuery tQ3 = new TraversalQuery<>(loader, g); + tQ.union( + tQ2.getVerticesByProperty("test1", "value1"), + tQ3.getVerticesByIndexedProperty("test2", "value2")); + + GraphTraversal expected = __.start() + .union(__.has("test1", "value1"),__.has("test2", "value2")); + + assertEquals("they are equal", expected, tQ.getQuery()); + + } + + @Ignore + @Test + public void traversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException { + TraversalQuery tQ = new TraversalQuery<>(loader, g); + QueryBuilder builder = tQ.createQueryFromURI(new URI("network/test-objects/test-object/key1")).getQueryBuilder(); + GraphTraversal expected = __.start().has("vnf-id", "key1").has("aai-node-type", "test-object"); + GraphTraversal containerExpected = __.start().has("aai-node-type", "test-object"); + + assertEquals("query object", expected.toString(), builder.getQuery().toString()); + assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString()); + + } + + @Ignore + @Test + public void nestedTraversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException { + + TraversalQuery tQ = new TraversalQuery<>(loader, g); + QueryBuilder builder = tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2")).getQueryBuilder(); + GraphTraversal expected = __.start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf").out("hasLInterface").has(AAIProperties.NODE_TYPE, "l-interface").has("interface-name", "key2"); + GraphTraversal containerExpected = __.start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf").out("hasLInterface").has(AAIProperties.NODE_TYPE, "l-interface"); + + assertEquals("query object", expected.toString(), builder.getQuery().toString()); + assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString()); + + } + + + +} diff --git a/aai-core/src/test/java/org/onap/aai/query/builder/UntilTest.java b/aai-core/src/test/java/org/onap/aai/query/builder/UntilTest.java new file mode 100644 index 00000000..d87eb675 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/query/builder/UntilTest.java @@ -0,0 +1,113 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.query.builder; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.serialization.db.EdgeRules; +import org.onap.aai.serialization.db.EdgeType; + +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertTrue; + +public class UntilTest extends AAISetup { + + private Loader loader; + + @Before + public void setup() throws Exception { + loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); + } + + private QueryBuilder buildTestQuery(QueryBuilder qb) throws AAIException{ + return qb.until(qb.newInstance().getVerticesByProperty("aai-node-type", "l-interface")).repeat( + qb.newInstance().union( + qb.newInstance().createEdgeTraversal(EdgeType.TREE, "cloud-region", "tenant"), + qb.newInstance().createEdgeTraversal(EdgeType.TREE, "tenant", "vserver"), + qb.newInstance().createEdgeTraversal(EdgeType.TREE, "vserver", "l-interface") + )).store("x").cap("x").unfold().dedup(); + } + + @Test + public void gremlinQueryUntilTest() throws AAIException { + Graph graph = TinkerGraph.open(); + EdgeRules rules = EdgeRules.getInstance(); + GraphTraversalSource g = graph.traversal(); + + Vertex v1 = graph.addVertex(T.id, 1, "aai-node-type", "cloud-region"); + Vertex v2 = graph.addVertex(T.id, 2, "aai-node-type", "tenant"); + Vertex v3 = graph.addVertex(T.id, 3, "aai-node-type", "vserver"); + Vertex v4 = graph.addVertex(T.id, 4, "aai-node-type", "l-interface"); + rules.addTreeEdge(g, v1, v2); + rules.addTreeEdge(g, v2, v3); + rules.addTreeEdge(g, v3, v4); + List expected = new ArrayList<>(); + expected.add(v4); + + GremlinTraversal qb = new GremlinTraversal<>(loader, g, v1); + QueryBuilder q = buildTestQuery(qb); + + List results = q.toList(); + + assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); + } + + @Test + public void traversalQueryUntilTest() throws AAIException { + Graph graph = TinkerGraph.open(); + EdgeRules rules = EdgeRules.getInstance(); + GraphTraversalSource g = graph.traversal(); + + Vertex v1 = graph.addVertex(T.id, 1, "aai-node-type", "cloud-region"); + Vertex v2 = graph.addVertex(T.id, 2, "aai-node-type", "tenant"); + Vertex v3 = graph.addVertex(T.id, 3, "aai-node-type", "vserver"); + Vertex v4 = graph.addVertex(T.id, 4, "aai-node-type", "l-interface"); + rules.addTreeEdge(g, v1, v2); + rules.addTreeEdge(g, v2, v3); + rules.addTreeEdge(g, v3, v4); + List expected = new ArrayList<>(); + expected.add(v4); + + TraversalQuery qb = new TraversalQuery<>(loader, g, v1); + QueryBuilder q = buildTestQuery(qb); + + List results = q.toList(); + + assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); + } + + + +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/DbAliasTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/DbAliasTest.java new file mode 100644 index 00000000..2137b3e9 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/DbAliasTest.java @@ -0,0 +1,133 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.db; + +import com.thinkaurelius.titan.core.TitanFactory; +import com.thinkaurelius.titan.core.TitanGraph; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.onap.aai.AAISetup; +import org.onap.aai.dbmap.DBConnectionType; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.*; +import org.onap.aai.parsers.query.QueryParser; +import org.onap.aai.schema.enums.PropertyMetadata; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import java.io.UnsupportedEncodingException; +import java.lang.reflect.InvocationTargetException; +import java.net.MalformedURLException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.Collections; +import java.util.Map; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +public class DbAliasTest extends AAISetup { + + private TitanGraph graph; + + private final Version version = Version.v9; + private final ModelType introspectorFactoryType = ModelType.MOXY; + private final QueryStyle queryStyle = QueryStyle.TRAVERSAL; + private final DBConnectionType type = DBConnectionType.REALTIME; + private Loader loader; + private TransactionalGraphEngine dbEngine; + + @Before + public void setup() throws Exception { + graph = TitanFactory.build().set("storage.backend","inmemory").open(); + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + dbEngine = new TitanDBEngine( + queryStyle, + type, + loader); + } + + @After + public void tearDown() { + graph.tx().rollback(); + graph.close(); + } + + @Test + public void checkOnWrite() throws AAIException, UnsupportedEncodingException, URISyntaxException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, InterruptedException { + final String property = "persona-model-customization-id"; + String dbPropertyName = property; + TransactionalGraphEngine spy = spy(this.dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + QueryParser uriQuery = spy.getQueryBuilder().createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1")); + Introspector obj = loader.introspectorFromName("generic-vnf"); + Vertex v = g.addVertex(); + Object id = v.id(); + obj.setValue("vnf-id", "key1"); + obj.setValue(property, "hello"); + serializer.serializeToDb(obj, v, uriQuery, "", ""); + g.tx().commit(); + v = graph.traversal().V(id).next(); + Map map = obj.getPropertyMetadata(property); + if (map.containsKey(PropertyMetadata.DB_ALIAS)) { + dbPropertyName = map.get(PropertyMetadata.DB_ALIAS); + } + + assertEquals("dbAlias is ", "model-customization-id", dbPropertyName); + assertEquals("dbAlias property exists", "hello", v.property(dbPropertyName).orElse("")); + assertEquals("model property does not", "missing", v.property(property).orElse("missing")); + + } + + @Test + public void checkOnRead() throws AAIException, UnsupportedEncodingException, URISyntaxException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, InterruptedException, MalformedURLException { + final String property = "persona-model-customization-id"; + + TransactionalGraphEngine spy = spy(dbEngine); + TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); + Vertex v = graph.traversal().addV("vnf-id", "key1", "model-customization-id", "hello").next(); + graph.tx().commit(); + Graph g = graph.newTransaction(); + GraphTraversalSource traversal = g.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + Introspector obj = loader.introspectorFromName("generic-vnf"); + serializer.dbToObject(Collections.singletonList(v), obj, 0, true, "false"); + + assertEquals("dbAlias property exists", "hello", obj.getValue(property)); + + } + + +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java new file mode 100644 index 00000000..c89150b6 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/DbSerializerTest.java @@ -0,0 +1,441 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.db; + +import com.thinkaurelius.titan.core.TitanFactory; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Edge; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.AAISetup; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.dbmap.DBConnectionType; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Introspector; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; + +import static org.junit.Assert.*; +import static org.mockito.Mockito.spy; +import static org.mockito.Mockito.when; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class DbSerializerTest extends AAISetup { + + //to use, set thrown.expect to whatever your test needs + //this line establishes default of expecting no exception to be thrown + @Rule + public ExpectedException thrown = ExpectedException.none(); + + protected Graph graph; + protected final EdgeRules rules = EdgeRules.getInstance(); + + private final Version version = Version.getLatest(); + private final ModelType introspectorFactoryType = ModelType.MOXY; + private final QueryStyle queryStyle = QueryStyle.TRAVERSAL; + private final DBConnectionType type = DBConnectionType.REALTIME; + private Loader loader; + private TransactionalGraphEngine dbEngine; + private TransactionalGraphEngine engine; //for tests that aren't mocking the engine + private DBSerializer dbser; + TransactionalGraphEngine spy; + TransactionalGraphEngine.Admin adminSpy; + + @Before + public void setup() throws Exception { + graph = TitanFactory.build().set("storage.backend", "inmemory").open(); + loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); + dbEngine = new TitanDBEngine(queryStyle, type, loader); + spy = spy(dbEngine); + adminSpy = spy(dbEngine.asAdmin()); + + createGraph(); + + engine = new TitanDBEngine(queryStyle, type, loader); + dbser = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST"); + } + + public void createGraph() throws AAIException { + /* + * This setus up the test graph, For future junits , add more vertices + * and edges + */ + + Vertex l3interipv4addresslist_1 = graph.traversal().addV("aai-node-type", "l3-interface-ipv4-address-list", + "l3-interface-ipv4-address", "l3-interface-ipv4-address-1").next(); + Vertex subnet_2 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-2").next(); + Vertex l3interipv6addresslist_3 = graph.traversal().addV("aai-node-type", "l3-interface-ipv6-address-list", + "l3-interface-ipv6-address", "l3-interface-ipv6-address-3").next(); + Vertex subnet_4 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-4").next(); + Vertex subnet_5 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-5").next(); + Vertex l3network_6 = graph.traversal() + .addV("aai-node-type", "l3-network", "network-id", "network-id-6", "network-name", "network-name-6") + .next(); + + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, l3interipv4addresslist_1, subnet_2); + rules.addEdge(g, l3interipv6addresslist_3, subnet_4); + rules.addTreeEdge(g, subnet_5, l3network_6); + + } + + @After + public void tearDown() throws Exception { + graph.close(); + } + + @Test + public void subnetDelwithInEdgesIpv4Test() throws AAIException { + String expected_message = "Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types [l3-interface-ipv4-address-list]"; + + /* + * This subnet has in-edges with l3-ipv4 and NOT ok to delete + */ + Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-2").next(); + + String exceptionMessage = testDelete(subnet); + assertEquals(expected_message, exceptionMessage); + + } + + @Test + public void subnetDelwithInEdgesIpv6Test() throws AAIException { + String expected_message = "Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types [l3-interface-ipv6-address-list]"; + + /* + * This subnet has in-edges with l3-ipv6 and NOT ok to delete + */ + Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-4").next(); + String exceptionMessage = testDelete(subnet); + assertEquals(expected_message, exceptionMessage); + + } + + @Test + public void subnetDelwithInEdgesL3network() throws AAIException { + String expected_message = ""; + + /* + * This subnet has in-edges with l3-network and ok to delete + */ + Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-5").next(); + + String exceptionMessage = testDelete(subnet); + assertEquals(expected_message, exceptionMessage); + + } + + public String testDelete(Vertex v) throws AAIException { + + // Graph g_tx = graph.newTransaction(); + GraphTraversalSource traversal = graph.traversal(); + when(spy.asAdmin()).thenReturn(adminSpy); + when(adminSpy.getTraversalSource()).thenReturn(traversal); + when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal); + + String exceptionMessage = ""; + DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); + try { + serializer.delete(v, "resourceVersion", false); + } catch (AAIException exception) { + exceptionMessage = exception.getMessage(); + + } + return exceptionMessage; + + } + + @Test + public void createNewVertexTest() throws AAIException { + engine.startTransaction(); + + Introspector testObj = loader.introspectorFromName("generic-vnf"); + + Vertex testVertex = dbser.createNewVertex(testObj); + Vertex fromGraph = engine.tx().traversal().V().has("aai-node-type","generic-vnf").toList().get(0); + assertEquals(testVertex.id(), fromGraph.id()); + assertEquals("AAI-TEST", fromGraph.property(AAIProperties.SOURCE_OF_TRUTH.toString()).value()); + engine.rollback(); + } + + @Test + public void touchStandardVertexPropertiesTest() throws AAIException, InterruptedException { + engine.startTransaction(); + DBSerializer dbser2 = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST-2"); + + Graph graph = TinkerGraph.open(); + Vertex vert = graph.addVertex("aai-node-type", "generic-vnf"); + + dbser.touchStandardVertexProperties(vert, true); + String resverStart = (String)vert.property(AAIProperties.RESOURCE_VERSION.toString()).value(); + String lastModTimeStart = (String)vert.property(AAIProperties.LAST_MOD_TS.toString()).value(); + + Thread.sleep(10); //bc the resource version is set based on current time in milliseconds, + //if this test runs through too fast the value may not change + //causing the test to fail. sleeping ensures a different value + + dbser2.touchStandardVertexProperties(vert, false); + assertFalse(resverStart.equals((String)vert.property(AAIProperties.RESOURCE_VERSION.toString()).value())); + assertFalse(lastModTimeStart.equals((String)vert.property(AAIProperties.LAST_MOD_TS.toString()).value())); + assertEquals("AAI-TEST-2", (String)vert.property(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH.toString()).value()); + engine.rollback(); + } + + @Test + public void verifyResourceVersion_SunnyDayTest() throws AAIException { + engine.startTransaction(); + + assertTrue(dbser.verifyResourceVersion("delete", "vnfc", "abc", "abc", "vnfcs/vnfc/vnfcId")); + engine.rollback(); + } + + @Test + public void verifyResourceVersion_CreateWithRVTest() throws AAIException { + engine.startTransaction(); + + thrown.expect(AAIException.class); + thrown.expectMessage("resource-version passed for create of generic-vnfs/generic-vnf/myid"); + try { + dbser.verifyResourceVersion("create", "generic-vnf", null, "old-res-ver", "generic-vnfs/generic-vnf/myid"); + } finally { + engine.rollback(); + } + } + + @Test + public void verifyResourceVersion_MissingRVTest() throws AAIException { + engine.startTransaction(); + + thrown.expect(AAIException.class); + thrown.expectMessage("resource-version not passed for update of generic-vnfs/generic-vnf/myid"); + try { + dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", null, "generic-vnfs/generic-vnf/myid"); + } finally { + engine.rollback(); + } + } + + @Test + public void verifyResourceVersion_MismatchRVTest() throws AAIException { + engine.startTransaction(); + + thrown.expect(AAIException.class); + thrown.expectMessage("resource-version MISMATCH for update of generic-vnfs/generic-vnf/myid"); + try { + dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", "old-res-ver", "generic-vnfs/generic-vnf/myid"); + } finally { + engine.rollback(); + } + } + + @Test + public void trimClassNameTest() throws AAIException { + assertEquals("GenericVnf", dbser.trimClassName("GenericVnf")); + assertEquals("GenericVnf", dbser.trimClassName("org.onap.aai.GenericVnf")); + } + + @Test + public void getURIForVertexTest() throws AAIException, URISyntaxException, UnsupportedEncodingException { + engine.startTransaction(); + + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); + EdgeRules rules = EdgeRules.getInstance(); + rules.addTreeEdge(engine.tx().traversal(), cr, ten); + + URI compare = new URI("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453"); + assertEquals(compare, dbser.getURIForVertex(ten)); + + cr.property("aai-node-type").remove(); + URI compareFailure = new URI("/unknown-uri"); + assertEquals(compareFailure, dbser.getURIForVertex(ten)); + engine.rollback(); + } + + @Test + public void getVertexPropertiesTest() throws AAIException, UnsupportedEncodingException { + engine.startTransaction(); + + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + + Introspector crIntro = dbser.getVertexProperties(cr); + assertEquals("cloud-region", crIntro.getDbName()); + assertEquals("me", crIntro.getValue("cloud-owner")); + assertEquals("123", crIntro.getValue("cloud-region-id")); + engine.rollback(); + } + + @Test + public void setCachedURIsTest() throws AAIException, UnsupportedEncodingException, URISyntaxException { + engine.startTransaction(); + + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); + Vertex vs = engine.tx().addVertex("aai-node-type", "vserver", "vserver-id", "vs1", + AAIProperties.AAI_URI.toString(), + "/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1"); + EdgeRules rules = EdgeRules.getInstance(); + rules.addTreeEdge(engine.tx().traversal(), cr, ten); + rules.addTreeEdge(engine.tx().traversal(), ten, vs); + + List vertices = new ArrayList(Arrays.asList(cr, ten, vs)); + Introspector crIn = dbser.getVertexProperties(cr); + Introspector tenIn = dbser.getVertexProperties(ten); + Introspector vsIn = dbser.getVertexProperties(vs); + List intros = new ArrayList(Arrays.asList(crIn, tenIn, vsIn)); + + dbser.setCachedURIs(vertices, intros); + + assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123", + (String)cr.property(AAIProperties.AAI_URI.toString()).value()); + assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453", + (String)ten.property(AAIProperties.AAI_URI.toString()).value()); + assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1", + (String)vs.property(AAIProperties.AAI_URI.toString()).value()); + engine.rollback(); + } + + @Test + public void getEdgeBetweenTest() throws AAIException { + engine.startTransaction(); + + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); + EdgeRules rules = EdgeRules.getInstance(); + rules.addTreeEdge(engine.tx().traversal(), cr, ten); + + Edge e = dbser.getEdgeBetween(EdgeType.TREE, ten, cr); + assertEquals("has", e.label()); + engine.rollback(); + } + + @Test + public void deleteEdgeTest() throws AAIException, UnsupportedEncodingException { + engine.startTransaction(); + + Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf"); + Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name"); + EdgeRules rules = EdgeRules.getInstance(); + rules.addEdge(engine.tx().traversal(), gvnf, vnfc); + + Introspector relData = loader.introspectorFromName("relationship-data"); + relData.setValue("relationship-key", "vnfc.vnfc-name"); + relData.setValue("relationship-value", "a-name"); + Introspector relationship = loader.introspectorFromName("relationship"); + relationship.setValue("related-to", "vnfc"); + relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name"); + relationship.setValue("relationship-data",relData); + + assertTrue(dbser.deleteEdge(relationship, gvnf)); + + assertFalse(engine.tx().traversal().V(gvnf).both("uses").hasNext()); + assertFalse(engine.tx().traversal().V(vnfc).both("uses").hasNext()); + engine.rollback(); + } + + @Test + public void createEdgeTest() throws AAIException, UnsupportedEncodingException { + engine.startTransaction(); + + Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf"); + Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name"); + + //sunny day case + Introspector relData = loader.introspectorFromName("relationship-data"); + relData.setValue("relationship-key", "vnfc.vnfc-name"); + relData.setValue("relationship-value", "a-name"); + Introspector relationship = loader.introspectorFromName("relationship"); + relationship.setValue("related-to", "vnfc"); + relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name"); + relationship.setValue("relationship-data",relData); + + assertTrue(dbser.createEdge(relationship, gvnf)); + assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext()); + assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext()); + + //rainy day case, edge to nonexistant object + Introspector relData2 = loader.introspectorFromName("relationship-data"); + relData2.setValue("relationship-key", "vnfc.vnfc-name"); + relData2.setValue("relationship-value", "b-name"); + Introspector relationship2 = loader.introspectorFromName("relationship"); + relationship2.setValue("related-to", "vnfc"); + relationship2.setValue("related-link", "/network/vnfcs/vnfc/b-name"); + relationship2.setValue("relationship-data",relData2); + + thrown.expect(AAIException.class); + thrown.expectMessage("Node of type vnfc. Could not find object at: /network/vnfcs/vnfc/b-name"); + try { + dbser.createEdge(relationship2, gvnf); + } finally { + engine.rollback(); + } + } + + @Test + public void serializeSingleVertexTopLevelTest() throws AAIException, UnsupportedEncodingException { + engine.startTransaction(); + + Introspector gvnf = loader.introspectorFromName("generic-vnf"); + Vertex gvnfVert = dbser.createNewVertex(gvnf); + + gvnf.setValue("vnf-id", "myvnf"); + dbser.serializeSingleVertex(gvnfVert, gvnf, "test"); + assertTrue(engine.tx().traversal().V().has("aai-node-type","generic-vnf").has("vnf-id","myvnf").hasNext()); + engine.rollback(); + } + + @Test + public void serializeSingleVertexChildTest() throws AAIException, UnsupportedEncodingException { + engine.startTransaction(); + + Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); + Introspector tenIn = loader.introspectorFromName("tenant"); + Vertex ten = dbser.createNewVertex(tenIn); + EdgeRules rules = EdgeRules.getInstance(); + rules.addTreeEdge(engine.tx().traversal(), cr, ten); + + tenIn.setValue("tenant-id", "453"); + tenIn.setValue("tenant-name", "mytenant"); + + dbser.serializeSingleVertex(ten, tenIn, "test"); + + assertTrue(engine.tx().traversal().V().has("aai-node-type","tenant").has("tenant-id","453").has("tenant-name","mytenant").hasNext()); + engine.rollback(); + } +} \ No newline at end of file diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/EdgePropertyMapTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/EdgePropertyMapTest.java new file mode 100644 index 00000000..8dbb8000 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/EdgePropertyMapTest.java @@ -0,0 +1,44 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.db; + +import org.junit.Test; + +import java.util.Map; + +import static org.junit.Assert.assertEquals; + +public class EdgePropertyMapTest { + + @Test + public void run() { + Map map = new EdgePropertyMap<>(); + map.put("direction", "OUT"); + map.put("test", "hello"); + map.put("isParent", "${direction}"); + map.put("SVC-INFRA", "!${direction}"); + + assertEquals("normal retrieval", "hello", map.get("test")); + assertEquals("variable retrieval", "OUT", map.get("isParent")); + assertEquals("negate variable retrieval", "IN", map.get("SVC-INFRA")); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/db/EdgeRulesTest.java b/aai-core/src/test/java/org/onap/aai/serialization/db/EdgeRulesTest.java new file mode 100644 index 00000000..4bf6a6c2 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/db/EdgeRulesTest.java @@ -0,0 +1,238 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.db; + + +import org.apache.tinkerpop.gremlin.structure.Direction; +import org.junit.Test; +import org.onap.aai.AAISetup; +import static org.junit.Assert.assertEquals; + +import java.util.Map; +import java.util.Set; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.junit.Rule; +import org.junit.rules.ExpectedException; + +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Version; +import org.onap.aai.serialization.db.exceptions.EdgeMultiplicityException; +import org.onap.aai.serialization.db.exceptions.NoEdgeRuleFoundException; + +import com.google.common.collect.Multimap; + +public class EdgeRulesTest extends AAISetup { + + //set thrown.expect to whatever a specific test needs + //this establishes a default of expecting no exceptions to be thrown + @Rule + public ExpectedException thrown = ExpectedException.none(); + + @Test + public void verifyOutDirection() throws AAIException, NoEdgeRuleFoundException { + EdgeRules rules = EdgeRules.getInstance(); + EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, "cloud-region", "flavor"); + + assertEquals("out direction", rule.getDirection(), Direction.OUT); + } + + @Test + public void verifyOutFlippedDirection() throws AAIException, NoEdgeRuleFoundException { + EdgeRules rules = EdgeRules.getInstance(); + EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, "flavor", "cloud-region"); + + assertEquals("in direction", rule.getDirection(), Direction.IN); + } + + @Test + public void verifyInDirection() throws AAIException, NoEdgeRuleFoundException { + EdgeRules rules = EdgeRules.getInstance(); + EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "model-ver", "model-element"); + + assertEquals("in direction", rule.getDirection(), Direction.IN); + } + + @Test + public void verifyInFlippedDirection() throws AAIException, NoEdgeRuleFoundException { + EdgeRules rules = EdgeRules.getInstance(); + EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "model-element", "model-ver"); + + assertEquals("out direction", rule.getDirection(), Direction.OUT); + } + @Test + public void verifyMultipleGet() throws AAIException { + EdgeRules rules = EdgeRules.getInstance(); + Map ruleMap = rules.getEdgeRules("model-element", "model-ver"); + assertEquals("has isA rule", "isA", ruleMap.get("isA").getLabel()); + assertEquals("has startsWith rule", "startsWith", ruleMap.get("startsWith").getLabel()); + } + + @Test + public void verifyMultipleGetSingleRule() throws AAIException { + EdgeRules rules = EdgeRules.getInstance(); + Map ruleMap = rules.getEdgeRules("availability-zone", "complex"); + assertEquals("has groupsResourcesIn rule", "groupsResourcesIn", ruleMap.get("groupsResourcesIn").getLabel()); + } + + @Test + public void verifyOldEdgeRule() throws AAIException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { + assertEquals(true, EdgeRules.getInstance().hasEdgeRule("model-element", "model-ver")); + assertEquals(true, EdgeRules.getInstance(Version.v8).hasEdgeRule("pserver", "complex")); + assertEquals(false, EdgeRules.getInstance(Version.v8).hasEdgeRule("model-element", "model-ver")); + } + + @Test + public void hasEdgeRuleVertexTest() { + Graph graph = TinkerGraph.open(); + Vertex v1 = graph.addVertex("aai-node-type", "cloud-region"); + Vertex v2 = graph.addVertex("aai-node-type", "tenant"); + assertEquals(true, EdgeRules.getInstance().hasEdgeRule(v1, v2)); + } + + @Test + public void getEdgeRuleByTypeAndVertices() throws AAIException { + Graph graph = TinkerGraph.open(); + Vertex v1 = graph.addVertex("aai-node-type", "cloud-region"); + Vertex v2 = graph.addVertex("aai-node-type", "tenant"); + EdgeRules rules = EdgeRules.getInstance(); + EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, v1, v2); + assertEquals(true, "OUT".equalsIgnoreCase(rule.getContains())); + assertEquals(true, "NONE".equalsIgnoreCase(rule.getDeleteOtherV())); + assertEquals(true, MultiplicityRule.ONE2MANY.equals(rule.getMultiplicityRule())); + assertEquals(true, "IN".equalsIgnoreCase(rule.getServiceInfrastructure())); + assertEquals(true, "OUT".equalsIgnoreCase(rule.getPreventDelete())); + } + + @Test + public void addTreeEdgeTest() throws AAIException { + Graph graph = TinkerGraph.open(); + Vertex v1 = graph.addVertex(T.id, "1", "aai-node-type", "cloud-region"); + Vertex v2 = graph.addVertex(T.id, "10", "aai-node-type", "tenant"); + EdgeRules rules = EdgeRules.getInstance(); + GraphTraversalSource g = graph.traversal(); + rules.addTreeEdge(g, v1, v2); + assertEquals(true, g.V(v1).out("has").has("aai-node-type", "tenant").hasNext()); + + Vertex v3 = graph.addVertex(T.id, "2", "aai-node-type", "cloud-region"); + assertEquals(null, rules.addTreeEdgeIfPossible(g, v3, v2)); + } + + @Test + public void addCousinEdgeTest() throws AAIException { + Graph graph = TinkerGraph.open(); + Vertex v1 = graph.addVertex(T.id, "1", "aai-node-type", "flavor"); + Vertex v2 = graph.addVertex(T.id, "10", "aai-node-type", "vserver"); + EdgeRules rules = EdgeRules.getInstance(Version.getLatest()); + GraphTraversalSource g = graph.traversal(); + rules.addEdge(g, v1, v2); + assertEquals(true, g.V(v2).out("hasFlavor").has("aai-node-type", "flavor").hasNext()); + + Vertex v3 = graph.addVertex(T.id, "2", "aai-node-type", "flavor"); + assertEquals(null, rules.addEdgeIfPossible(g, v3, v2)); + } + + @Test + public void multiplicityViolationTest() throws AAIException { + thrown.expect(EdgeMultiplicityException.class); + thrown.expectMessage("multiplicity rule violated: only one edge can exist with label: uses between vf-module and volume-group"); + + Graph graph = TinkerGraph.open(); + Vertex v1 = graph.addVertex(T.id, "1", "aai-node-type", "vf-module"); + Vertex v2 = graph.addVertex(T.id, "10", "aai-node-type", "volume-group"); + EdgeRules rules = EdgeRules.getInstance(Version.getLatest()); + GraphTraversalSource g = graph.traversal(); + + rules.addEdge(g, v2, v1); + Vertex v3 = graph.addVertex(T.id, "3", "aai-node-type", "vf-module"); + rules.addEdge(g, v2, v3); + } + + @Test + public void getChildrenTest() { + EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json"); + Set children = rules.getChildren("foo"); + assertEquals(2, children.size()); + boolean sawBazRule = false; + boolean sawQuuxRule = false; + for (EdgeRule r : children) { + if ("isVeryHappyAbout".equals(r.getLabel())) { + sawBazRule = true; + } else if ("dancesWith".equals(r.getLabel())) { + sawQuuxRule = true; + } + } + assertEquals(true, sawBazRule && sawQuuxRule); + } + + @Test + public void getAllRulesTest() { + EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json"); + Multimap allRules = rules.getAllRules(); + assertEquals(3, allRules.size()); + assertEquals(true, allRules.containsKey("foo|bar")); + assertEquals(true, allRules.containsKey("foo|bar")); + assertEquals(true, allRules.containsKey("quux|foo")); + } + + @Test + public void getAllRulesMissingPropertyTest() { + EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json"); + + thrown.expect(RuntimeException.class); + thrown.expectMessage("org.onap.aai.exceptions.AAIException: Rule between foo and bar is missing property delete-other-v."); + rules.getAllRules(); + } + + @Test + public void getChildrenMissingPropertyTest() { + EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json"); + + thrown.expect(RuntimeException.class); + thrown.expectMessage("org.onap.aai.exceptions.AAIException: Rule between quux and foo is missing property SVC-INFRA."); + rules.getChildren("foo"); + } + + @Test + public void getEdgeRuleMissingPropertyTest() throws AAIException { + EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json"); + + thrown.expect(RuntimeException.class); + thrown.expectMessage("org.onap.aai.exceptions.AAIException: Rule between quux and foo is missing property SVC-INFRA."); + rules.getEdgeRules("foo", "quux"); + } + + @Test + public void verifyAllRules() { + // This will cause every rule in the real json files to be verified + // so if any required properties are missing, the verification builds + // will catch it and incorrect rules can't get merged in. + for (Version v : Version.values()) { + EdgeRules rules = EdgeRules.getInstance(v); + rules.getAllRules(); + } + } +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/QueryFormatTestHelper.java b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/QueryFormatTestHelper.java new file mode 100644 index 00000000..53d1d293 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/QueryFormatTestHelper.java @@ -0,0 +1,76 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.queryformats; + +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.structure.io.IoCore; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.mockito.invocation.InvocationOnMock; +import org.mockito.stubbing.Answer; +import org.onap.aai.db.props.AAIProperties; +import org.onap.aai.serialization.queryformats.exceptions.AAIFormatVertexException; +import org.onap.aai.serialization.queryformats.utils.UrlBuilder; + +import java.io.IOException; +import java.lang.reflect.Field; +import java.lang.reflect.Modifier; + +import static org.mockito.Matchers.isA; +import static org.mockito.Mockito.when; + +public class QueryFormatTestHelper { + + + public static final String testResources = "src/test/resources/org.onap.aai/serialization/queryformats/"; + public static final String graphsonResources = "src/test/resources/org.onap.aai/serialization/queryformats/graphson/"; + + + public static void mockPathed(UrlBuilder mock) throws AAIFormatVertexException { + Answer answer = new Answer() { + public String answer(InvocationOnMock invocation) throws Throwable { + Vertex v = invocation.getArgumentAt(0, Vertex.class); + + return v.property(AAIProperties.AAI_URI).orElse("urimissing"); + } + }; + when(mock.pathed(isA(Vertex.class))).thenAnswer(answer); + + } + + public static Graph loadGraphson(String fileName) throws IOException { + final Graph graph = TinkerGraph.open(); + graph.io(IoCore.graphson()).readGraph(QueryFormatTestHelper.graphsonResources + fileName); + + return graph; + } + + public static void setFinalStatic(Field field, Object newValue) throws Exception { + field.setAccessible(true); + // remove final modifier from field + Field modifiersField = Field.class.getDeclaredField("modifiers"); + modifiersField.setAccessible(true); + modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); + field.set(null, newValue); + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/SimpleFormatTest.java b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/SimpleFormatTest.java new file mode 100644 index 00000000..5e400116 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/SimpleFormatTest.java @@ -0,0 +1,164 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.queryformats; + +import com.google.gson.JsonObject; +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy; +import org.apache.tinkerpop.gremlin.structure.Graph; +import org.apache.tinkerpop.gremlin.structure.T; +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.dbmap.DBConnectionType; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.introspection.LoaderFactory; +import org.onap.aai.introspection.ModelType; +import org.onap.aai.introspection.Version; +import org.onap.aai.introspection.exceptions.AAIUnknownObjectException; +import org.onap.aai.serialization.db.DBSerializer; +import org.onap.aai.serialization.engines.QueryStyle; +import org.onap.aai.serialization.engines.TitanDBEngine; +import org.onap.aai.serialization.engines.TransactionalGraphEngine; +import org.onap.aai.serialization.queryformats.exceptions.AAIFormatVertexException; +import org.onap.aai.serialization.queryformats.utils.UrlBuilder; + +import java.io.UnsupportedEncodingException; + +import static org.junit.Assert.*; +import static org.mockito.Matchers.anyBoolean; +import static org.mockito.Matchers.anyInt; +import static org.mockito.Matchers.anyObject; +import static org.mockito.Matchers.anyString; +import static org.mockito.Mockito.*; + +public class SimpleFormatTest { + + @Mock + private UrlBuilder urlBuilder; + + private Graph graph; + private TransactionalGraphEngine dbEngine; + private Loader loader; + private DBSerializer serializer; + private RawFormat simpleFormat; + private Vertex vfModule; + private final ModelType factoryType = ModelType.MOXY; + + @Before + public void setUp() throws Exception { + + MockitoAnnotations.initMocks(this); + + graph = TinkerGraph.open(); + + vfModule = graph.addVertex( + T.label, "vf-module", + T.id, "5", + "aai-node-type", "vf-module", + "vf-module-id", "vf-module-id-val-68205", + "vf-module-name", "example-vf-module-name-val-68205", + "heat-stack-id", "example-heat-stack-id-val-68205", + "orchestration-status", "example-orchestration-status-val-68205", + "is-base-vf-module", "true", + "resource-version", "1498166571906", + "model-invariant-id", "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", + "model-invariant-id-local", "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", + "model-version-id", "0d23052d-8ffe-433e-a25d-da5da027bb7c", + "model-version-id-local", "0d23052d-8ffe-433e-a25d-da5da027bb7c", + "widget-model-id", "example-widget-model-id-val-68205", + "widget-model-version", "example-widget--model-version-val-68205", + "contrail-service-instance-fqdn", "example-contrail-service-instance-fqdn-val-68205" + ); + } + + @Test + public void testCreatePropertiesObjectReturnsProperProperties() throws AAIFormatVertexException, AAIException { + + createLoaderEngineSetup(); + serializer = new DBSerializer(Version.v10, dbEngine, factoryType, "Junit"); + simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).nodesOnly(true).depth(0).modelDriven().build(); + + assertNotNull(dbEngine.tx()); + assertNotNull(dbEngine.asAdmin()); + + JsonObject json = simpleFormat.createPropertiesObject(vfModule); + + assertTrue(json.has("model-invariant-id")); + assertTrue(json.has("model-version-id")); + + assertFalse(json.has("model-invariant-id-local")); + assertFalse(json.has("model-version-id-local")); + + } + + @Ignore + @Test(expected = AAIFormatVertexException.class) + public void testCreatePropertiesObjectThrowsExceptionIfSerializationFails() throws AAIFormatVertexException, AAIException, UnsupportedEncodingException { + + serializer = mock(DBSerializer.class); + loader = mock(Loader.class); + + simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).nodesOnly(true).depth(0).build(); + + when(serializer.dbToObject(anyObject(), anyObject(), anyInt(), anyBoolean(), anyString())) + .thenThrow(new AAIException("Test Exception")); + + simpleFormat.createPropertiesObject(vfModule); + } + + @Ignore + @Test(expected = AAIFormatVertexException.class) + public void testCreatePropertiesObjectThrowsExceptionIfUnknownObject() throws AAIFormatVertexException, AAIException, UnsupportedEncodingException { + + loader = mock(Loader.class); + serializer = mock(DBSerializer.class); + + simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).nodesOnly(true).depth(0).build(); + + when(loader.introspectorFromName(anyString())) + .thenThrow(new AAIUnknownObjectException("Test Exception")); + + simpleFormat.createPropertiesObject(vfModule); + } + + public void createLoaderEngineSetup(){ + + if(loader == null){ + loader = LoaderFactory.createLoaderForVersion(factoryType, Version.v10); + dbEngine = spy(new TitanDBEngine(QueryStyle.TRAVERSAL, DBConnectionType.CACHED, loader)); + + TransactionalGraphEngine.Admin spyAdmin = spy(dbEngine.asAdmin()); + + when(dbEngine.tx()).thenReturn(graph); + when(dbEngine.asAdmin()).thenReturn(spyAdmin); + + when(spyAdmin.getReadOnlyTraversalSource()).thenReturn(graph.traversal(GraphTraversalSource.build().with(ReadOnlyStrategy.instance()))); + when(spyAdmin.getTraversalSource()).thenReturn(graph.traversal()); + } + } +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/QueryParamInjectorTest.java b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/QueryParamInjectorTest.java new file mode 100644 index 00000000..3c1b033c --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/QueryParamInjectorTest.java @@ -0,0 +1,60 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.queryformats.utils; + +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.exceptions.AAIException; +import org.onap.aai.introspection.Loader; +import org.onap.aai.serialization.db.DBSerializer; +import org.onap.aai.serialization.queryformats.Resource; +import org.onap.aai.serialization.queryformats.Resource.Builder; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; + +import static org.junit.Assert.assertEquals; + +public class QueryParamInjectorTest { + + + @Mock private Loader loader; + @Mock private DBSerializer serializer; + @Mock private UrlBuilder urlBuilder; + + @Test + public void test() throws AAIException { + MockitoAnnotations.initMocks(this); + QueryParamInjector injector = QueryParamInjector.getInstance(); + + Builder b = new Resource.Builder(loader, serializer, urlBuilder); + MultivaluedMap params = new MultivaluedHashMap<>(); + params.putSingle("nodesOnly", "true"); + params.putSingle("depth", "10"); + params.putSingle("invalid", "1000"); + injector.injectParams(b, params); + + assertEquals("is nodes only", true, b.isNodesOnly()); + assertEquals("is depth 10", 10, b.getDepth()); + } +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/UrlBuilderTest.java b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/UrlBuilderTest.java new file mode 100644 index 00000000..80ae7066 --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/queryformats/utils/UrlBuilderTest.java @@ -0,0 +1,101 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.queryformats.utils; + +import org.apache.tinkerpop.gremlin.structure.Vertex; +import org.junit.Before; +import org.junit.Test; +import org.mockito.Mock; +import org.mockito.MockitoAnnotations; +import org.onap.aai.AAISetup; +import org.onap.aai.introspection.Version; +import org.onap.aai.serialization.db.DBSerializer; +import org.onap.aai.serialization.queryformats.exceptions.AAIFormatVertexException; +import org.onap.aai.util.AAIConstants; + +import java.io.UnsupportedEncodingException; +import java.net.URI; +import java.net.URISyntaxException; + +import static org.junit.Assert.assertEquals; +import static org.mockito.Matchers.any; +import static org.mockito.Mockito.when; + +public class UrlBuilderTest extends AAISetup { + + @Mock + private DBSerializer serializer; + @Mock + private Vertex v; + + private static final String uri = "/test/uri"; + private static final Object vId = new Long(123); + private static final String protocolAndHost = "http://localhost/aai/"; + + @Before + public void before() throws UnsupportedEncodingException, URISyntaxException { + MockitoAnnotations.initMocks(this); + when(serializer.getURIForVertex(any(Vertex.class))).thenReturn(new URI(uri)); + when(v.id()).thenReturn(vId); + } + + @Test + public void v11Pathed() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { + Version version = Version.v11; + UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); + String result = builder.pathed(v); + + assertEquals("has no protocol and host", AAIConstants.AAI_APP_ROOT + version + uri, result); + + } + + @Test + public void v11Id() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { + Version version = Version.v11; + UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); + String result = builder.id(v); + + assertEquals("has no protocol and host", AAIConstants.AAI_APP_ROOT + version + "/resources/id/" + vId, result); + + } + + @Test + public void beforeV11Pathed() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { + Version version = Version.v10; + UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); + String result = builder.pathed(v); + + assertEquals("has protocol and host", protocolAndHost + version + uri, result); + + } + + @Test + public void beforeV11Id() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { + Version version = Version.v10; + UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); + String result = builder.id(v); + + assertEquals("has protocol and host", protocolAndHost + version + "/resources/id/" + vId, result); + + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/serialization/tinkerpop/TreeBackedVertexTest.java b/aai-core/src/test/java/org/onap/aai/serialization/tinkerpop/TreeBackedVertexTest.java new file mode 100644 index 00000000..9c1e922b --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/serialization/tinkerpop/TreeBackedVertexTest.java @@ -0,0 +1,153 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.serialization.tinkerpop; + +import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; +import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; +import org.apache.tinkerpop.gremlin.structure.*; +import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; +import org.junit.Before; +import org.junit.Ignore; +import org.junit.Test; +import org.onap.aai.serialization.db.EdgeProperty; +import org.onap.aai.serialization.engines.query.GraphTraversalQueryEngine; + +import static org.junit.Assert.assertEquals; + +@Ignore +public class TreeBackedVertexTest { + + private Graph graph = TinkerGraph.open(); + private Object startKey = null; + private Tree tree = null; + private Tree treeDepth1 = null; + private Tree treeDepth0NodeOnly = null; + + @Before + public void configure() { + GraphTraversalSource g = graph.traversal(); + + startKey = g.addV(T.label, "vserver").as("v1").property("test", "hello") + .addV(T.label, "vserver").as("v2") + .addV(T.label, "interface").property("name", "interface 1").as("v7").addInE("hasChild", "v2").property(EdgeProperty.CONTAINS.toString(), true) + .addV(T.label, "pserver").property("name", "pserver 1").as("v4").addOutE("runsOn", "v1").property(EdgeProperty.CONTAINS.toString(), false) + .addV(T.label, "interface").property("name", "interface 2").as("v3").addInE("hasChild", "v1").property(EdgeProperty.CONTAINS.toString(), true) + .addV(T.label, "address").property("name", "address 1").addInE("hasChild", "v3").property(EdgeProperty.CONTAINS.toString(), true) + .addV(T.label, "address").property("name", "address 2").addInE("hasChild", "v3").property(EdgeProperty.CONTAINS.toString(), true) + .addV(T.label, "complex").property("name", "complex 1").addInE("locatedIn", "v4").property(EdgeProperty.CONTAINS.toString(), false) + .addV(T.label, "interface").property("name", "interface 3").addInE("hasChild", "v4").property(EdgeProperty.CONTAINS.toString(), true) + .addV(T.label, "subnet").property("name", "subnet 1").as("v5").addInE("in", "v3").property(EdgeProperty.CONTAINS.toString(), false) + .addV(T.label, "address").property("name", "address 3").as("v6").addInE("hasChild", "v5").property(EdgeProperty.CONTAINS.toString(), true) + .select("v1").next(); + + tree = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey); + treeDepth1 = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 1, false); + treeDepth0NodeOnly = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 0, true); + } + + @Ignore + @Test + public void oneHopViaEdges() { + + //BulkSet set = (BulkSet)result; + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + + + assertEquals("locate child", v.edges(Direction.OUT).next().inVertex().property("name").orElse(""), "interface 2"); + assertEquals("locate cousin", v.edges(Direction.IN).next().outVertex().property("name").orElse(""), "pserver 1"); + + + } + + @Ignore + @Test + public void oneHopViaVertices() { + + //BulkSet set = (BulkSet)result; + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + + + assertEquals("locate child", "interface 2", v.vertices(Direction.OUT).next().property("name").orElse("")); + assertEquals("locate cousin", "pserver 1", v.vertices(Direction.IN).next().property("name").orElse("")); + + } + + @Ignore + @Test + public void twoHopCousinViaVertices() { + + //BulkSet set = (BulkSet)result; + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + + + assertEquals("locate child", "subnet 1", v.vertices(Direction.OUT).next().vertices(Direction.OUT, "in").next().property("name").orElse("")); + + } + + @Test + public void walkVerticesRestrictedDepth() { + + //BulkSet set = (BulkSet)result; + TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth1.getObjectsAtDepth(1).iterator().next(), treeDepth1); + + + assertEquals("nothing returned", false, v.vertices(Direction.OUT).next() + .vertices(Direction.OUT, "hasChild").hasNext()); + + } + + @Test + public void walkVertices() { + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + assertEquals("locate child", "address 2", v.vertices(Direction.OUT).next() + .vertices(Direction.OUT, "hasChild").next().property("name").orElse("")); + } + + @Test + public void walkEdges() { + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + + assertEquals("locate child", "address 2", v.edges(Direction.OUT).next().inVertex() + .edges(Direction.OUT, "hasChild").next().inVertex().property("name").orElse("")); + } + + @Test + public void noEdgesFoudWithLabelVertices() { + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + + assertEquals("missing hello label", false , v.vertices(Direction.OUT, "hello").hasNext()); + } + + @Test + public void noEdgesFoudWithLabelEdges() { + TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); + + assertEquals("missing hello label", false , v.edges(Direction.OUT, "hello").hasNext()); + } + + @Test + public void depthZeroNodeOnly() { + TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth0NodeOnly.getObjectsAtDepth(1).iterator().next(), treeDepth0NodeOnly); + assertEquals("no edges returned", false, v.edges(Direction.BOTH).hasNext()); + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java b/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java new file mode 100644 index 00000000..9a36680b --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/util/GenerateXsdTest.java @@ -0,0 +1,55 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.util; + +import org.junit.Test; +import org.onap.aai.introspection.Version; + +public class GenerateXsdTest { + + @Test + public void testGenerationOfXsdAndYaml() throws Exception { + + GenerateXsd generateXsd = new GenerateXsd(); + System.setProperty("gen_version", Version.getLatest().toString()); + System.setProperty("gen_type", "XSD"); + System.setProperty("yamlresponses_url", ""); + System.setProperty("yamlresponses_label", ""); + + generateXsd.main(new String[]{}); + + System.setProperty("gen_version", Version.getLatest().toString()); + System.setProperty("gen_type", "YAML"); + + String wikiLink = System.getProperty("aai.wiki.link"); + + if(wikiLink == null){ + wikiLink = "https://wiki.onap.org/"; + } + + System.setProperty("yamlresponses_url", wikiLink); + System.setProperty("yamlresponses_label", "Response codes found in [response codes]"); + + generateXsd.main(new String[]{}); + } + +} diff --git a/aai-core/src/test/java/org/onap/aai/workarounds/RemoveDME2QueryParamsTest.java b/aai-core/src/test/java/org/onap/aai/workarounds/RemoveDME2QueryParamsTest.java new file mode 100644 index 00000000..a5c7055d --- /dev/null +++ b/aai-core/src/test/java/org/onap/aai/workarounds/RemoveDME2QueryParamsTest.java @@ -0,0 +1,92 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + */ +package org.onap.aai.workarounds; + +import org.junit.Before; +import org.junit.Test; + +import javax.ws.rs.core.MultivaluedHashMap; +import javax.ws.rs.core.MultivaluedMap; + +import static org.junit.Assert.assertEquals; + +public class RemoveDME2QueryParamsTest { + + private MultivaluedMap hasParams; + private MultivaluedMap doesNotHaveParams; + private RemoveDME2QueryParams removeParams = new RemoveDME2QueryParams(); + + /** + * Setup. + */ + @Before + public void setup() { + hasParams = new MultivaluedHashMap<>(); + doesNotHaveParams = new MultivaluedHashMap<>(); + + hasParams.add("version", "1"); + hasParams.add("envContext", "DEV"); + hasParams.add("routeOffer", "INT1"); + hasParams.add("test1", "peppermints"); + hasParams.add("test2", "amber"); + + doesNotHaveParams.add("version", "1"); + doesNotHaveParams.add("envContext", "DEV"); + doesNotHaveParams.add("test1", "peppermints"); + doesNotHaveParams.add("test2", "amber"); + + } + + /** + * Test removal. + */ + @Test + public void testRemoval() { + + if (removeParams.shouldRemoveQueryParams(hasParams)) { + removeParams.removeQueryParams(hasParams); + } + + assertEquals("no version", false, hasParams.containsKey("version")); + assertEquals("no envContext", false, hasParams.containsKey("envContext")); + assertEquals("no routeOffer", false, hasParams.containsKey("routeOffer")); + assertEquals("has test1", true, hasParams.containsKey("test1")); + assertEquals("has test2", true, hasParams.containsKey("test2")); + + } + + /** + * Should not remove. + */ + @Test + public void shouldNotRemove() { + + if (removeParams.shouldRemoveQueryParams(doesNotHaveParams)) { + removeParams.removeQueryParams(doesNotHaveParams); + } + + assertEquals("no version", true, doesNotHaveParams.containsKey("version")); + assertEquals("no envContext", true, doesNotHaveParams.containsKey("envContext")); + assertEquals("has test1", true, doesNotHaveParams.containsKey("test1")); + assertEquals("has test2", true, doesNotHaveParams.containsKey("test2")); + } +} diff --git a/aai-core/src/test/java/org/openecomp/aai/AAISetup.java b/aai-core/src/test/java/org/openecomp/aai/AAISetup.java deleted file mode 100644 index b0fce58d..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/AAISetup.java +++ /dev/null @@ -1,34 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ -package org.openecomp.aai; - -import org.junit.BeforeClass; -import org.openecomp.aai.serialization.queryformats.QueryFormatTestHelper; -import org.openecomp.aai.util.AAIConstants; - -public abstract class AAISetup { - - @BeforeClass - public static void setupBundleconfig() throws Exception { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); - QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/"); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionTest.java b/aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionTest.java deleted file mode 100644 index 554b6418..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionTest.java +++ /dev/null @@ -1,113 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.exceptions; - -import org.junit.Test; -import org.openecomp.aai.AAISetup; - -import static org.junit.Assert.assertEquals; - -public class AAIExceptionTest extends AAISetup { - - private static final String code = "4004"; - private static final String details = "This is a detailed description of the exception."; - private static final Throwable cause = new RuntimeException("This is a runtime exception."); - private static final Throwable noMessage = new RuntimeException(); - - /** - * Test constructor with 0 params. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith0Params() throws Exception { - AAIException exception = new AAIException(); - assertEquals(exception, exception); - } - - /** - * Test constructor with 1 params. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith1Params() throws Exception { - AAIException exception = new AAIException(code); - assertEquals(exception, exception); - } - - /** - * Test constructor with 2 params details. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith2ParamsDetails() throws Exception { - AAIException exception = new AAIException(code, details); - assertEquals(details, exception.getMessage()); - } - - /** - * Test constructor with 2 params cause. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith2ParamsCause() throws Exception { - AAIException exception = new AAIException(code, cause); - assertEquals("java.lang.RuntimeException: This is a runtime exception.", exception.getMessage()); - } - - /** - * Test constructor with 2 params null message. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith2ParamsNullMessage() throws Exception { - AAIException exception = new AAIException(code, noMessage); - assertEquals(noMessage.toString(), exception.getMessage()); - } - - /** - * Test constructor with 3 params. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith3Params() throws Exception { - AAIException exception = new AAIException(code, cause, details); - String details = "This is a detailed description of the exception."; - assertEquals(details, exception.getMessage()); - } - - /** - * Test constructor with 3 params null message. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith3ParamsNullMessage() throws Exception { - AAIException exception = new AAIException(code, noMessage, details); - String detailString = new String(details); - assertEquals(detailString, exception.getMessage()); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionWithInfoTest.java b/aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionWithInfoTest.java deleted file mode 100644 index 41841ac7..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/exceptions/AAIExceptionWithInfoTest.java +++ /dev/null @@ -1,147 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.exceptions; - -import org.junit.Test; -import org.openecomp.aai.AAISetup; - -import java.util.HashMap; - -import static org.junit.Assert.assertEquals; - -public class AAIExceptionWithInfoTest extends AAISetup { - - - private static final HashMap map = new HashMap(); - - { - map.put("itemInteger", 1); - map.put("itemString", "Two"); - map.put("itemThree", Boolean.TRUE); - } - - private static final String info = "An error has occurred."; - private static final String code = "AAI_4004"; - private static final String details = "This is a detailed description of the exception."; - private static final Throwable cause = new RuntimeException("This is a runtime exception."); - - /** - * Test constructor with 2 params. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith2Params() throws Exception { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(map, info); - - assertEquals(map, exception.getInfoHash()); - assertEquals(info, exception.getInfo()); - } - - /** - * Test constructor with 3 params. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith3Params() throws Exception { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, map, info); - - assertEquals("4004", exception.getErrorObject().getErrorCode()); - assertEquals(map, exception.getInfoHash()); - assertEquals(info, exception.getInfo()); - } - - /** - * Test constructor with 4 params I. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith4ParamsI() throws Exception { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, details, map, info); - - assertEquals("4004", exception.getErrorObject().getErrorCode()); - assertEquals(details, exception.getMessage()); - assertEquals(map, exception.getInfoHash()); - assertEquals(info, exception.getInfo()); - } - - /** - * Test constructor with 4 params II. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith4ParamsII() throws Exception { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, cause, map, info); - - assertEquals("4004", exception.getErrorObject().getErrorCode()); - assertEquals(cause.toString(), exception.getMessage()); - assertEquals(map, exception.getInfoHash()); - assertEquals(info, exception.getInfo()); - } - - /** - * Test constructor with 5 params. - * - * @throws Exception the exception - */ - @Test - public void testConstructorWith5Params() throws Exception { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(code, cause, details, map, info); - - assertEquals("4004", exception.getErrorObject().getErrorCode()); - assertEquals(details, exception.getMessage()); - assertEquals(map, exception.getInfoHash()); - assertEquals(info, exception.getInfo()); - } - - /** - * Test set info hash. - */ - @Test - public void testSetInfoHash() { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(map, info); - - HashMap newMap = new HashMap(); - newMap.put("itemInteger", 2); - exception.setInfoHash(newMap); - - assertEquals(newMap, exception.getInfoHash()); - assertEquals(info, exception.getInfo()); - } - - /** - * Test set info. - */ - @Test - public void testSetInfo() { - AAIExceptionWithInfo exception = new AAIExceptionWithInfo(map, info); - - String newInfo = "This is updated info."; - exception.setInfo(newInfo); - - assertEquals(map, exception.getInfoHash()); - assertEquals(newInfo, exception.getInfo()); - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/IntrospectorTestSpec.java b/aai-core/src/test/java/org/openecomp/aai/introspection/IntrospectorTestSpec.java deleted file mode 100644 index 1ecc6923..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/IntrospectorTestSpec.java +++ /dev/null @@ -1,58 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException; - -import static org.junit.Assert.assertEquals; - -public class IntrospectorTestSpec extends AAISetup { - - - - /** - * Container test set. - * - * @param wrappedPortGroups the wrapped port groups - * @throws AAIUnknownObjectException - */ - protected void containerTestSet(Introspector wrappedPortGroups) throws AAIUnknownObjectException { - - assertEquals( - "isContainer", - true, - wrappedPortGroups.isContainer()); - - assertEquals( - "newInstanceOfNestedProperty", - "PortGroup", - wrappedPortGroups.newInstanceOfNestedProperty("port-group").getClass().getSimpleName()); - - assertEquals( - "isComplexGenericType", - true, - wrappedPortGroups.isComplexGenericType("port-group")); - - - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/MoxyEngineTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/MoxyEngineTest.java deleted file mode 100644 index 0f67ddfc..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/MoxyEngineTest.java +++ /dev/null @@ -1,45 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.junit.Test; -import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException; - -public class MoxyEngineTest extends IntrospectorTestSpec { - - /** - * Container object. - * @throws AAIUnknownObjectException - */ - @Test - public void containerObject() throws AAIUnknownObjectException { - - Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); - - Introspector obj = loader.introspectorFromName("port-groups"); - - this.containerTestSet(obj); - - } - - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/PojoInjestorTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/PojoInjestorTest.java deleted file mode 100644 index b820cfef..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/PojoInjestorTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.junit.Test; -import org.openecomp.aai.db.props.AAIProperties; - -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; -import javax.xml.bind.Marshaller; - -import static org.junit.Assert.*; - -public class PojoInjestorTest { - - @Test - public void getVersionTest() { - String latestVersion = "org.openecomp.aai.yang.VnfImage"; - PojoInjestor testPI = new PojoInjestor(); - assertEquals("", AAIProperties.LATEST, testPI.getVersion(latestVersion)); - - String oldVersion = "org.openecomp.aai.yang.v8.VnfImage"; - assertEquals("", Version.v8, testPI.getVersion(oldVersion)); - } - - @Test - public void getContextForVersionTest() { - PojoInjestor testPI = new PojoInjestor(); - JAXBContext context = testPI.getContextForVersion(Version.v9); - try { - Marshaller marshaller = context.createMarshaller(); - //this will fail if the context wasn't initialized successfully (I think) - marshaller.setProperty(org.eclipse.persistence.jaxb.MarshallerProperties.MEDIA_TYPE, "application/json"); - } catch (JAXBException e) { - e.printStackTrace(); - fail("failed on setting marshaller property"); - } - //if we get to here that means everything went ok - assertTrue(true); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/PojoLoaderTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/PojoLoaderTest.java deleted file mode 100644 index e4e58b60..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/PojoLoaderTest.java +++ /dev/null @@ -1,52 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.domain.yang.v9.VnfImage; -import org.openecomp.aai.introspection.exceptions.AAIUnmarshallingException; -import org.openecomp.aai.restcore.MediaType; - -import static org.junit.Assert.assertTrue; -import static org.junit.Assert.fail; - -public class PojoLoaderTest extends AAISetup { - - - @Test - public void test() { - Loader pojoLoader = LoaderFactory.createLoaderForVersion(ModelType.POJO, Version.v9); - String payload = "{\"vnf-image-uuid\":\"myuuid\",\"application\":\"testApp\",\"application-vendor\":\"testVendor\",\"application-version\":\"versionTest\"}"; - try { - Introspector intro = pojoLoader.unmarshal("vnf-image", payload, MediaType.APPLICATION_JSON_TYPE); - VnfImage myVnfImage = (VnfImage) intro.getUnderlyingObject(); - assertTrue("myuuid".equals(myVnfImage.getVnfImageUuid())); - assertTrue("testApp".equals(myVnfImage.getApplication())); - assertTrue("testVendor".equals(myVnfImage.getApplicationVendor())); - assertTrue("versionTest".equals(myVnfImage.getApplicationVersion())); - } catch (AAIUnmarshallingException e) { - e.printStackTrace(); - fail("AAIUnmarshallingException thrown"); - } - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/PojoStrategyTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/PojoStrategyTest.java deleted file mode 100644 index 0bd61178..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/PojoStrategyTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.junit.Test; -import org.openecomp.aai.domain.yang.CloudRegion; -import org.openecomp.aai.domain.yang.VolumeGroup; -import org.openecomp.aai.schema.enums.ObjectMetadata; - -import static org.junit.Assert.assertEquals; - -public class PojoStrategyTest { - - @Test - public void getMetadataTest() { - Introspector cloudregion = IntrospectorFactory.newInstance(ModelType.POJO, new CloudRegion()); - assertEquals("cloud-infrastructure", cloudregion.getMetadata(ObjectMetadata.NAMESPACE)); - assertEquals("cloud-regions", cloudregion.getMetadata(ObjectMetadata.CONTAINER)); - - Introspector volumegroup = IntrospectorFactory.newInstance(ModelType.POJO, new VolumeGroup()); - assertEquals("cloud-region", volumegroup.getMetadata(ObjectMetadata.DEPENDENT_ON)); - assertEquals("", volumegroup.getMetadata(ObjectMetadata.NAMESPACE)); - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/PropertyPredicatesTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/PropertyPredicatesTest.java deleted file mode 100644 index 50aea8fe..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/PropertyPredicatesTest.java +++ /dev/null @@ -1,74 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.junit.Before; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException; - -import java.util.Set; - -import static org.hamcrest.Matchers.hasItems; -import static org.hamcrest.Matchers.not; -import static org.junit.Assert.assertThat; - -public class PropertyPredicatesTest extends AAISetup { - - private final Version version = Version.getLatest(); - - private Loader loader; - private ModelType introspectorFactoryType = ModelType.MOXY; - private Introspector obj; - - @Before - public void setup() throws Exception { - loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); - obj = loader.introspectorFromName("test-object"); - } - - @Test - public void includeInTestGeneration() throws AAIUnknownObjectException { - - Set props = obj.getProperties(PropertyPredicates.includeInTestGeneration()); - - assertThat("props not found", props, - not(hasItems("persona-model-ver", "not-visible-test-element", "model-invariant-id", "model-version-id"))); - } - - @Test - public void isVisible() throws AAIUnknownObjectException { - - Set props = obj.getProperties(PropertyPredicates.isVisible()); - - assertThat("props not found", props, not(hasItems("persona-model-ver"))); - } - - @Test - public void all() throws AAIUnknownObjectException { - - Set props = obj.getProperties(); - - assertThat("all found", props, hasItems("persona-model-ver", "not-visible-test-element")); - } - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/ReflectionEngineTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/ReflectionEngineTest.java deleted file mode 100644 index d7cd7b18..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/ReflectionEngineTest.java +++ /dev/null @@ -1,46 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection; - -import org.junit.Test; -import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException; - -public class ReflectionEngineTest extends IntrospectorTestSpec { - - /** - * Container object. - * - * @throws InstantiationException the instantiation exception - * @throws IllegalAccessException the illegal access exception - * @throws ClassNotFoundException the class not found exception - * @throws AAIUnknownObjectException - */ - @Test - public void containerObject() throws InstantiationException, IllegalAccessException, ClassNotFoundException, AAIUnknownObjectException { - Object javaObj = null; - String className = "org.openecomp.aai.domain.yang.PortGroups"; - javaObj = Class.forName(className).newInstance(); - - Introspector obj = IntrospectorFactory.newInstance(ModelType.POJO, javaObj); - -// this.containerTestSet(obj); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataCopyTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataCopyTest.java deleted file mode 100644 index 8e37fe05..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataCopyTest.java +++ /dev/null @@ -1,267 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection.sideeffect; - -import com.thinkaurelius.titan.core.TitanFactory; -import com.thinkaurelius.titan.core.TitanGraph; -import org.apache.commons.io.IOUtils; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.VertexProperty; -import org.junit.*; -import org.junit.rules.ExpectedException; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.dbmap.DBConnectionType; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.introspection.sideeffect.exceptions.AAIMissingRequiredPropertyException; -import org.openecomp.aai.parsers.query.QueryParser; -import org.openecomp.aai.serialization.db.DBSerializer; -import org.openecomp.aai.serialization.db.EdgeProperty; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import java.io.FileInputStream; -import java.io.IOException; -import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -public class DataCopyTest { - - private static TitanGraph graph; - private final static Version version = Version.getLatest(); - private final static ModelType introspectorFactoryType = ModelType.MOXY; - private final static QueryStyle queryStyle = QueryStyle.TRAVERSAL; - private final static DBConnectionType type = DBConnectionType.REALTIME; - private static Loader loader; - private static TransactionalGraphEngine dbEngine; - @Mock private Vertex self; - @Mock private VertexProperty prop; - @Mock private QueryParser uriQuery; - @Rule - public ExpectedException thrown = ExpectedException.none(); - - - @BeforeClass - public static void setup() throws NoSuchFieldException, SecurityException, Exception { - graph = TitanFactory.build().set("storage.backend","inmemory").open(); - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); - loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); - dbEngine = new TitanDBEngine( - queryStyle, - type, - loader); - - graph.traversal().addV("aai-node-type", "model", "model-invariant-id", "key1").as("v1") - .addV("aai-node-type", "model-ver", "model-ver", "myValue", "model-version-id", "key2", "model-version", "testValue").addInE("has", "v1", EdgeProperty.CONTAINS.toString(), true) - .addV("aai-node-type", "model", "model-invariant-id", "key3").as("v2") - .addV("aai-node-type", "model-ver", "model-ver", "myValue", "model-version-id", "key4").addInE("has", "v2", EdgeProperty.CONTAINS.toString(), true) - .next(); - graph.tx().commit(); - } - - @AfterClass - public static void tearDown() { - graph.tx().rollback(); - graph.close(); - } - - @Before - public void initMock() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void runPopulatePersonaModelVer() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); - final Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "myId"); - obj.setValue("model-invariant-id", "key1"); - obj.setValue("model-version-id", "key2"); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); - - runner.execute(obj, self); - - assertEquals("value populated", "testValue", obj.getValue("persona-model-ver")); - - g.tx().rollback(); - - - } - - @Test - public void runPopulateModelVersionId() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); - final Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "myId"); - obj.setValue("persona-model-id", "key1"); - obj.setValue("persona-model-version", "testValue"); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); - - runner.execute(obj, self); - - assertEquals("value populated", "key2", obj.getValue("model-version-id")); - - g.tx().rollback(); - } - - @Test - public void verifyNestedSideEffect() throws URISyntaxException, AAIException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, IOException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); - final Introspector obj = loader.unmarshal("customer", this.getJsonString("nested-case.json")); - System.out.println(obj.marshal(true)); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.tx()).thenReturn(g); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - when(uriQuery.isDependent()).thenReturn(false); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - Vertex v= serializer.createNewVertex(obj); - serializer.serializeToDb(obj, v, uriQuery, obj.getURI(), "test"); - - assertEquals("nested value populated", "testValue", g.traversal().V().has("service-instance-id", "nested-instance-key").next().property("persona-model-version").orElse("")); - - g.tx().rollback(); - - } - - @Test - public void expectedMissingPropertyExceptionInURI() throws AAIException, UnsupportedEncodingException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); - final Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "myId"); - obj.setValue("model-invariant-id", "key1"); - - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); - - thrown.expect(AAIMissingRequiredPropertyException.class); - runner.execute(obj, self); - } - - @Test - public void expectedMissingPropertyExceptionForResultingObject() throws AAIException, UnsupportedEncodingException { - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); - final Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "myId"); - obj.setValue("model-invariant-id", "key3"); - obj.setValue("model-version-id", "key4"); - - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); - - thrown.expect(AAIMissingRequiredPropertyException.class); - runner.execute(obj, self); - } - - @Test - public void expectNoProcessingWithNoProperties() throws AAIException, UnsupportedEncodingException { - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); - final Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "myId"); - - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataCopy.class).build(); - - runner.execute(obj, self); - - assertEquals("no model-version-id", true, obj.getValue("model-version-id") == null); - assertEquals("no model-invariant-id", true, obj.getValue("model-invariant-id") == null); - - } - - private String getJsonString(String filename) throws IOException { - - - FileInputStream is = new FileInputStream("src/test/resources/bundleconfig-local/etc/oxm/sideeffect/" + filename); - String s = IOUtils.toString(is, "UTF-8"); - IOUtils.closeQuietly(is); - - return s; - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataLinkTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataLinkTest.java deleted file mode 100644 index 8220b86c..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/sideeffect/DataLinkTest.java +++ /dev/null @@ -1,258 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection.sideeffect; - -import com.thinkaurelius.titan.core.TitanFactory; -import com.thinkaurelius.titan.core.TitanGraph; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.VertexProperty; -import org.junit.*; -import org.junit.rules.ExpectedException; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.dbmap.DBConnectionType; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.parsers.query.QueryParser; -import org.openecomp.aai.serialization.db.DBSerializer; -import org.openecomp.aai.serialization.db.EdgeProperty; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URISyntaxException; -import java.util.List; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -public class DataLinkTest { - - private static TitanGraph graph; - private final static Version version = Version.getLatest(); - private final static ModelType introspectorFactoryType = ModelType.MOXY; - private final static QueryStyle queryStyle = QueryStyle.TRAVERSAL; - private final static DBConnectionType type = DBConnectionType.REALTIME; - private static Loader loader; - private static TransactionalGraphEngine dbEngine; - @Mock private QueryParser parser; - @Mock private Vertex self; - @Mock private VertexProperty prop; - @Rule - public ExpectedException thrown = ExpectedException.none(); - - - @BeforeClass - public static void setup() throws NoSuchFieldException, SecurityException, Exception { - graph = TitanFactory.build().set("storage.backend","inmemory").open(); - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); - loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); - dbEngine = new TitanDBEngine( - queryStyle, - type, - loader); - - graph.traversal().addV("aai-node-type", "vpn-binding", "vpn-id", "addKey").as("v1") - .addV("aai-node-type", "vpn-binding", "vpn-id", "modifyKey").as("v2") - .addV("aai-node-type", "route-target", "global-route-target", "modifyTargetKey", "route-target-role", "modifyRoleKey", "linked", true).addInE("has", "v2", EdgeProperty.CONTAINS.toString(), true) - .addV("aai-node-type", "vpn-binding", "vpn-id", "deleteKey").as("v3") - .addV("aai-node-type", "route-target", "global-route-target", "deleteTargetKey", "route-target-role", "deleteRoleKey", "linked", true).addInE("has", "v3", EdgeProperty.CONTAINS.toString(), true) - .addV("aai-node-type", "vpn-binding", "vpn-id", "getKey").as("v4") - .addV("aai-node-type", "route-target", "global-route-target", "getTargetKey", "route-target-role", "getRoleKey", "linked", true).addInE("has", "v4", EdgeProperty.CONTAINS.toString(), true) - .addV("aai-node-type", "vpn-binding", "vpn-id", "getKeyNoLink").as("v5") - .addV("aai-node-type", "route-target", "global-route-target", "getTargetKeyNoLink", "route-target-role", "getRoleKeyNoLink").addInE("has", "v5", EdgeProperty.CONTAINS.toString(), true) - .next(); - graph.tx().commit(); - } - - @AfterClass - public static void tearDown() { - graph.tx().rollback(); - graph.close(); - } - - @Before - public void initMock() { - MockitoAnnotations.initMocks(this); - } - - @Test - public void verifyCreationOfVertex() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); - final Introspector obj = loader.introspectorFromName("vpn-binding"); - obj.setValue("vpn-id", "addKey"); - obj.setValue("global-route-target", "key1"); - obj.setValue("route-target-role", "key2"); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(spy.tx()).thenReturn(g); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataLinkWriter.class).build(); - - runner.execute(obj, self); - - assertEquals("route-target vertex found", true, traversal.V() - .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "key1").has("route-target-role", "key2").has("linked", true).hasNext()); - - g.tx().rollback(); - - } - - @Test - public void verifyModificationOfVertex() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); - final Introspector obj = loader.introspectorFromName("vpn-binding"); - obj.setValue("vpn-id", "modifyKey"); - obj.setValue("global-route-target", "modifyTargetKey2"); - obj.setValue("route-target-role", "modifyRoleKey2"); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(spy.tx()).thenReturn(g); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataLinkWriter.class).build(); - - runner.execute(obj, self); - - assertEquals("route-target vertex found", true, traversal.V() - .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "modifyTargetKey2").has("route-target-role", "modifyRoleKey2").has("linked", true).hasNext()); - assertEquals("previous link removed", true, traversal.V() - .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "modifyTargetKey").has("route-target-role", "modifyRoleKey").hasNot("linked").hasNext()); - g.tx().rollback(); - - } - - @Test - public void verifyDeleteOfVertex() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); - final Introspector obj = loader.introspectorFromName("vpn-binding"); - obj.setValue("vpn-id", "deleteKey"); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal); - when(spy.tx()).thenReturn(g); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataLinkWriter.class).build(); - - runner.execute(obj, self); - - assertEquals("route-target vertex not found", false, traversal.V() - .has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "deleteTargetKey").has("route-target-role", "deleteRoleKey").has("linked", true).hasNext()); - g.tx().rollback(); - - } - - @Test - public void verifyPropertyPopulation() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - - final Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9); - final Introspector obj = loader.introspectorFromName("vpn-binding"); - obj.setValue("vpn-id", "getKey"); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(spy.tx()).thenReturn(g); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - SideEffectRunner runner = new SideEffectRunner - .Builder(spy, serializer).addSideEffect(DataLinkReader.class).build(); - - runner.execute(obj, self); - - assertEquals("both properties have been populated in target object", true, obj.getValue("global-route-target").equals("getTargetKey") && obj.getValue("route-target-role").equals("getRoleKey")); - g.tx().rollback(); - - } - - @Test - public void verifyPropertyPopulationWithV10OnlyPut() throws URISyntaxException, AAIException, UnsupportedEncodingException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, SecurityException, InstantiationException, NoSuchMethodException, MalformedURLException { - final Introspector obj = loader.introspectorFromName("vpn-binding"); - obj.setValue("vpn-id", "getKeyNoLink"); - final Introspector routeTargets = loader.introspectorFromName("route-targets"); - obj.setValue("route-targets", routeTargets.getUnderlyingObject()); - List targets = routeTargets.getValue("route-target"); - final Introspector routeTargetOne = loader.introspectorFromName("route-target"); - routeTargetOne.setValue("global-route-target", "getTargetKeyNoLink"); - routeTargetOne.setValue("route-target-role", "getRoleKeyNoLink"); - targets.add(routeTargetOne.getUnderlyingObject()); - final Introspector routeTargetTwo = loader.introspectorFromName("route-target"); - routeTargetTwo.setValue("global-route-target", "getTargetKeyNoLink2"); - routeTargetTwo.setValue("route-target-role", "getRoleKeyNoLink2"); - targets.add(routeTargetTwo.getUnderlyingObject()); - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.tx()).thenReturn(g); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(spy.tx()).thenReturn(g); - when(parser.isDependent()).thenReturn(false); - when(self.property(AAIProperties.AAI_URI)).thenReturn(prop); - when(prop.orElse(null)).thenReturn(obj.getURI()); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - Vertex v = serializer.createNewVertex(obj); - serializer.serializeToDb(obj, v, parser, obj.getURI(), "testing"); - Vertex routeTargetOneV = traversal.V().has("global-route-target", "getTargetKeyNoLink").next(); - Vertex routeTargetTwoV = traversal.V().has("global-route-target", "getTargetKeyNoLink2").next(); - - assertEquals("first route target put has linked", true, routeTargetOneV.property(AAIProperties.LINKED).orElse(false)); - assertEquals("second route target put does not have linked", false, routeTargetTwoV.property(AAIProperties.LINKED).orElse(false)); - - g.tx().rollback(); - - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/introspection/validation/IntrospectorValidationTest.java b/aai-core/src/test/java/org/openecomp/aai/introspection/validation/IntrospectorValidationTest.java deleted file mode 100644 index 8b76967a..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/introspection/validation/IntrospectorValidationTest.java +++ /dev/null @@ -1,95 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.introspection.validation; - -import org.junit.Before; -import org.junit.BeforeClass; -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.introspection.tools.IntrospectorValidator; -import org.openecomp.aai.introspection.tools.Issue; -import org.openecomp.aai.introspection.tools.IssueType; -import org.openecomp.aai.serialization.queryformats.QueryFormatTestHelper; -import org.openecomp.aai.util.AAIConstants; - -import java.util.List; - -import static org.junit.Assert.assertEquals; - -public class IntrospectorValidationTest { - - - private final static Version version = Version.v10; - private final static ModelType introspectorFactoryType = ModelType.MOXY; - private static Loader loader; - private IntrospectorValidator validator; - @BeforeClass - public static void setUp() throws NoSuchFieldException, SecurityException, Exception { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "bundleconfig-local"); - QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/org/openecomp/aai/introspection/"); - - loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); - - } - @Before - public void createValidator() { - validator = new IntrospectorValidator.Builder() - .validateRequired(false) - .restrictDepth(10000) - .build(); - } - @Ignore - @Test - public void verifySuccessWhenEmpty() throws AAIException { - Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "key1"); - validator.validate(obj); - List issues = validator.getIssues(); - assertEquals("no issues found", true, issues.isEmpty()); - } - - @Ignore - @Test - public void verifyRequiresSingleFieldFailure() throws AAIException { - Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "key1"); - obj.setValue("model-invariant-id", "id1"); - validator.validate(obj); - List issues = validator.getIssues(); - assertEquals("issues found", true, issues.size() == 1); - Issue issue = issues.get(0); - assertEquals("found expected issue", IssueType.DEPENDENT_PROP_NOT_FOUND, issue.getType()); - } - @Ignore - @Test - public void verifyRequiresSuccess() throws AAIException { - Introspector obj = loader.introspectorFromName("test-object"); - obj.setValue("vnf-id", "key1"); - obj.setValue("model-invariant-id", "id1"); - obj.setValue("model-version-id", "version-id1"); - validator.validate(obj); - List issues = validator.getIssues(); - assertEquals("no issues found", true, issues.isEmpty()); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/logging/CNNameTest.java b/aai-core/src/test/java/org/openecomp/aai/logging/CNNameTest.java deleted file mode 100644 index b4705030..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/logging/CNNameTest.java +++ /dev/null @@ -1,137 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.logging; - -import ch.qos.logback.access.spi.IAccessEvent; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mockito; -import org.openecomp.aai.logging.CNName; -import org.openecomp.aai.serialization.queryformats.QueryFormatTestHelper; -import org.openecomp.aai.util.AAIConstants; -import org.powermock.core.classloader.annotations.PowerMockIgnore; -import org.powermock.core.classloader.annotations.PrepareForTest; -import org.powermock.modules.agent.PowerMockAgent; - -import javax.security.auth.x500.X500Principal; -import javax.servlet.http.HttpServletRequest; -import java.security.cert.X509Certificate; - -import static org.junit.Assert.assertTrue; -import static org.mockito.Mockito.when; - -@PowerMockIgnore("javax.security.auth.x500.X500Principal") -@PrepareForTest({IAccessEvent.class, HttpServletRequest.class, X509Certificate.class}) -public class CNNameTest { - - static { - PowerMockAgent.initializeIfNeeded(); - } - - - IAccessEvent mockAccEvent; - HttpServletRequest mockHttpServletRequest; - CNName cnname; - X509Certificate cert; - - /** - * Initialize. - */ - @Before - public void initialize() throws Exception { - System.setProperty("AJSC_HOME", "."); - System.setProperty("BUNDLECONFIG_DIR", "src/test/resources/bundleconfig-local"); - QueryFormatTestHelper.setFinalStatic(AAIConstants.class.getField("AAI_HOME_ETC_OXM"), "src/test/resources/bundleconfig-local/etc/oxm/"); - mockAccEvent = Mockito.mock(IAccessEvent.class); - mockHttpServletRequest = Mockito.mock(HttpServletRequest.class); - cert = Mockito.mock(X509Certificate.class); - } - - - /** - * Test 'convert' when there is no AccessConverter. - */ - @Test - public void testConvert_withoutAccessConverter(){ - cnname = getTestObj(false); - assertTrue("Conversion failed with no AccessConverter", "INACTIVE_HEADER_CONV".equals(cnname.convert(mockAccEvent))); - } - - /** - * Test 'convert' with no CipherSuite. - */ - @Test - public void testConvert_withNullCipherSuite(){ - setupForCipherSuite(null); - assertTrue("Conversion failed for a null CipherSuite", "-".equals(cnname.convert(mockAccEvent))); - } - - - /** - * Test 'convert' with a non-null CipherSuite. - */ - @Test - public void testConvert_withNotNullCipherSuite(){ - - setupForCipherSuite("StrRepOfAValidSuite"); - - final X500Principal principal = new X500Principal("CN=AAI, OU=DOX, O=BWS, C=CA"); - - Mockito.when(cert.getSubjectX500Principal()).thenReturn(principal); - - final X509Certificate[] certChain = {cert}; - - when(mockHttpServletRequest.getAttribute("javax.servlet.request.X509Certificate")).thenReturn(certChain); - - assertTrue("Conversion failed for a valid CipherSuite", principal.toString().equals(cnname.convert(mockAccEvent))); - } - - - /** - * Helper method to mock IAccessEvent and HttpServletRequest. - * - * @param suite CipherSuite to be used in current test - */ - private void setupForCipherSuite(String suite){ - cnname = getTestObj(true); - when(mockAccEvent.getRequest()).thenReturn(mockHttpServletRequest); - when(mockHttpServletRequest.getAttribute("javax.servlet.request.cipher_suite")).thenReturn(suite); - } - - - /** - * Helper method to create a CNName object with overridden 'start status' . - * - * @param instanceStarted Start status to be used - * @return CNName object to test - */ - private CNName getTestObj(final boolean instanceStarted){ - return new CNName(){ - @Override - public boolean isStarted(){ - return instanceStarted; - } - }; - } -} - - - diff --git a/aai-core/src/test/java/org/openecomp/aai/logging/CustomLogPatternLayoutTest.java b/aai-core/src/test/java/org/openecomp/aai/logging/CustomLogPatternLayoutTest.java deleted file mode 100644 index 3e79646b..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/logging/CustomLogPatternLayoutTest.java +++ /dev/null @@ -1,51 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.logging; - -import org.junit.Test; -import org.openecomp.aai.logging.CNName; -import org.openecomp.aai.logging.CustomLogPatternLayout; - -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertTrue; - -public class CustomLogPatternLayoutTest { - - /** - * Test null when defaultConverterMap doesn't have corresponding entry. - */ - @Test - public void testNull(){ - String s = CustomLogPatternLayout.defaultConverterMap.get("z"); - assertFalse("Entry not found for key 'z'", CNName.class.getName().equals(s)); - } - - /** - * Test defaultConverterMap when valid entry exists. - */ - @Test - public void testEntryFor_Z(){ - CustomLogPatternLayout layout = new CustomLogPatternLayout(); - String s = CustomLogPatternLayout.defaultConverterMap.get("z"); - assertTrue("Entry not found for key 'z'", CNName.class.getName().equals(s)); - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/logging/DME2RestFlagTest.java b/aai-core/src/test/java/org/openecomp/aai/logging/DME2RestFlagTest.java deleted file mode 100644 index 1ac17dad..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/logging/DME2RestFlagTest.java +++ /dev/null @@ -1,82 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.logging; -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; -import ch.qos.logback.access.spi.IAccessEvent; -import org.junit.*; - - -public class DME2RestFlagTest { - - IAccessEvent mockAccEvent; - DME2RestFlag _DME2RestFlag; - - String[] temp = new String[4]; - - - @Before - public void setUp() throws Exception { - - mockAccEvent = mock(IAccessEvent.class); - _DME2RestFlag= spy(DME2RestFlag.class); - - } - private DME2RestFlag getTestObj(final boolean instanceStarted){ - return new DME2RestFlag(){ - @Override - public - boolean isStarted(){ - return instanceStarted; - } - }; - } - - @Test - public void convertTestAllValid(){ - temp[0]= "temp1"; - temp[1] = "-"; - when(mockAccEvent.getRequestParameter("envContext")).thenReturn(temp); - when(mockAccEvent.getRequestParameter("routeOffer")).thenReturn(temp); - when(mockAccEvent.getRequestParameter("version")).thenReturn(temp); - _DME2RestFlag = getTestObj(true); - assertEquals(_DME2RestFlag.convert(mockAccEvent),"DME2"); - } - - @Test - public void convertMissingRouteTest(){ - temp[0]= ""; - temp[1] = "-"; - when(mockAccEvent.getRequestParameter("envContext")).thenReturn(temp); - when(mockAccEvent.getRequestParameter("routeOffer")).thenReturn(temp); - when(mockAccEvent.getRequestParameter("version")).thenReturn(temp); - _DME2RestFlag = getTestObj(true); - assertEquals(_DME2RestFlag.convert(mockAccEvent),"REST"); - } - - @Test - public void convertIsStartedFalseTest(){ - _DME2RestFlag = getTestObj(false); - assertEquals(_DME2RestFlag.convert(mockAccEvent),"INACTIVE_HEADER_CONV"); - } - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/logging/EelfClassOfCallerTest.java b/aai-core/src/test/java/org/openecomp/aai/logging/EelfClassOfCallerTest.java deleted file mode 100644 index 63ac5683..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/logging/EelfClassOfCallerTest.java +++ /dev/null @@ -1,70 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.logging; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.*; -import ch.qos.logback.classic.spi.ILoggingEvent; -import org.junit.*; - -public class EelfClassOfCallerTest { - - EelfClassOfCaller _eelfClassOfCaller; - ILoggingEvent mockEvent; - StackTraceElement[] cdafive = new StackTraceElement[5]; - StackTraceElement[] cdaone = new StackTraceElement[1]; - StackTraceElement[] cdazero = new StackTraceElement[0]; - - - @Before - public void setUp() throws Exception { - - mockEvent = mock(ILoggingEvent.class); - _eelfClassOfCaller= spy(EelfClassOfCaller.class); - - } - - - @Test - public void getFullyQualifiedNameCDALENFiveTest(){ - StackTraceElement temp = new StackTraceElement("classname_five","methodname","filename", 4); - cdafive[2]=temp; - when(mockEvent.getCallerData()).thenReturn(cdafive); - assertEquals(_eelfClassOfCaller.getFullyQualifiedName(mockEvent),"classname_five"); - - } - @Test - public void getFullyQualifiedNameCDALenOneTest(){ - StackTraceElement temp = new StackTraceElement("classname_one","methodname","filename", 4); - cdaone[0]=temp; - when(mockEvent.getCallerData()).thenReturn(cdaone); - assertEquals(_eelfClassOfCaller.getFullyQualifiedName(mockEvent),"classname_one"); - - } - - @Test - public void getFullyQualifiedNameCDALenZeroTest(){ - when(mockEvent.getCallerData()).thenReturn(cdazero); - assertEquals(_eelfClassOfCaller.getFullyQualifiedName(mockEvent),"?"); - - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/logging/ErrorObjectTest.java b/aai-core/src/test/java/org/openecomp/aai/logging/ErrorObjectTest.java deleted file mode 100644 index 6a5bb843..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/logging/ErrorObjectTest.java +++ /dev/null @@ -1,162 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.logging; - -import javax.ws.rs.core.Response; -import javax.ws.rs.core.Response.Status; -import static org.junit.Assert.*; - -import org.junit.*; - -public class ErrorObjectTest { - - ErrorObject newErrorObject = new ErrorObject("disposition","category","severity", 200, "restErrorCode","errorCode","errorText"); - - //Constructor Tests - @Test - public void createObjectTest1(){ - //No HTTP Status argument - ErrorObject errorObject = new ErrorObject("severity","errorcode","errortext","disposition","category"); - assertNotNull(errorObject); - } - @Test - public void createObjectTest2(){ - //HTTP Status code as integer - ErrorObject errorObject = new ErrorObject("severity",200,"errorcode","errortext","disposition","category"); - assertNotNull(errorObject); - } - @Test - public void createObjectTest3(){ - //HTTP Status code as Status - ErrorObject errorObject = new ErrorObject("severity",Status.OK,"errorcode","errortext","disposition","category"); - assertNotNull(errorObject); - } - //Disposition Tests - @Test - public void getDispositionTest() { - assertEquals(newErrorObject.getDisposition(), "disposition"); - } - @Test - public void setDispositionTest() { - newErrorObject.setDisposition("newDisposition"); - assertEquals(newErrorObject.getDisposition(), "newDisposition"); - } - - //Category Tests - @Test - public void getCategoryTest(){ - assertEquals(newErrorObject.getCategory(), "category"); - } - @Test - public void setCategoryTest(){ - newErrorObject.setCategory("newCategory"); - assertEquals(newErrorObject.getCategory(), "newCategory"); - } - - //Severity Tests - @Test - public void getSeverityTest(){ - assertEquals(newErrorObject.getSeverity(), "severity"); - } - @Test - public void setSeverityTest(){ - newErrorObject.setSeverity("newSeverity"); - assertEquals(newErrorObject.getSeverity(), "newSeverity"); - } - - //Error Code Tests - @Test - public void getErrorCodeTest(){ - assertEquals(newErrorObject.getErrorCode(), "errorCode"); - } - @Test - public void SetErrorCodeTest(){ - newErrorObject.setErrorCode("newErrorCode"); - assertEquals(newErrorObject.getErrorCode(), "newErrorCode"); - } - - //HTTP Response Code Tests - @Test - public void getHTTPCodeTest(){ - assertEquals(newErrorObject.getHTTPResponseCode(), Status.OK); - } - @Test - public void setHTTPCodeTest(){ - newErrorObject.setHTTPResponseCode(201); - assertEquals(newErrorObject.getHTTPResponseCode(), Status.CREATED); - } - @Test(expected=IllegalArgumentException.class) - public void invalidHttpCodeTest(){ - newErrorObject.setHTTPResponseCode(6281723); - } - @Test(expected=IllegalArgumentException.class) - public void invalidHttpCodeTest2(){ - newErrorObject.setHTTPResponseCode("82901"); - } - - //Rest Error Code Tests - @Test - public void getRestErrorCodeTest(){ - assertEquals(newErrorObject.getRESTErrorCode(), "restErrorCode"); - } - @Test - public void setRestErrorCodeTest(){ - newErrorObject.setRESTErrorCode("newRestErrorCode"); - assertEquals(newErrorObject.getRESTErrorCode(), "newRestErrorCode"); - } - - //Error Text Tests - @Test - public void getErrorTextTest(){ - assertEquals(newErrorObject.getErrorText(), "errorText"); - } - @Test - public void setErrorTextTest(){ - newErrorObject.setErrorText("newErrorText"); - assertEquals(newErrorObject.getErrorText(), "newErrorText"); - } - @Test - public void getErrorCodeStringTest(){ - assertEquals(newErrorObject.getErrorCodeString(), "disposition.category.errorCode"); - } - @Test - public void getErrorCodeStringDisposition5Test(){ - //get Error Code String while Disposition = 5 - newErrorObject.setDisposition("5"); - assertEquals(newErrorObject.getErrorCodeString(), "ERR.5.category.errorCode"); - } - @Test - public void getSeverityCodeTest(){ - newErrorObject.setSeverity("WARN"); - assertEquals(newErrorObject.getSeverityCode(newErrorObject.getSeverity()), "1"); - - newErrorObject.setSeverity("ERROR"); - assertEquals(newErrorObject.getSeverityCode(newErrorObject.getSeverity()), "2"); - - newErrorObject.setSeverity("FATAL"); - assertEquals(newErrorObject.getSeverityCode(newErrorObject.getSeverity()), "3"); - } - //To String Test - @Test - public void toStringTest(){ - assertEquals(newErrorObject.toString(), "ErrorObject [errorCode=errorCode, errorText=errorText, restErrorCode=restErrorCode, httpResponseCode=OK, severity=severity, disposition=disposition, category=category]"); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/logging/LoggingContextTest.java b/aai-core/src/test/java/org/openecomp/aai/logging/LoggingContextTest.java deleted file mode 100644 index 9cc522eb..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/logging/LoggingContextTest.java +++ /dev/null @@ -1,107 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.logging; - -import org.junit.Test; - -import java.util.*; - -import static org.junit.Assert.*; - -public class LoggingContextTest { - - private static final int MAX_STORED_CONTEXTS = 100; - - @Test - public void testStopWatch() { - try { - LoggingContext.stopWatchStop(); - throw new AssertionError("No exception thrown when LoggingContext.stopWatchStop() called without a prior LoggingContext.stopWatchStart()"); - } catch (StopWatchNotStartedException e) { - //Expected - } - - LoggingContext.stopWatchStart(); - - assertTrue(LoggingContext.stopWatchStop() >= 0); - - try { - LoggingContext.stopWatchStop(); - throw new AssertionError("No exception thrown when LoggingContext.stopWatchStop() twice in succession"); - } catch (StopWatchNotStartedException e) { - //Expected - } - } - - @Test - public void testRequestId() { //AKA Transaction ID - final String sUuid = "57d51eaa-edc6-4f50-a69d-f2d4d2445120"; - - LoggingContext.requestId(sUuid); - - assertEquals(LoggingContext.requestId(), UUID.fromString(sUuid)); - - final UUID uuid = UUID.randomUUID(); - - LoggingContext.requestId(uuid); - - assertEquals(LoggingContext.requestId(), uuid); - - LoggingContext.requestId("foo"); //Illegal - this will result in a new, randomly - //generated UUID as per the logging spec - - assertNotNull(LoggingContext.requestId()); //Make sure ANY UUID was assigned - assertNotEquals(LoggingContext.requestId(), uuid); //Make sure it actually changed from the last - //known valid UUID - } - - @Test - public void testClear() { - LoggingContext.init(); - LoggingContext.clear(); - - assertEquals(Collections.emptyMap(), LoggingContext.getCopy()); - } - - @Test - public void testSaveRestore() { - - final Deque> contexts = new LinkedList> (); - - LoggingContext.init(); - - for (int i = 0; i < MAX_STORED_CONTEXTS; i++) { - LoggingContext.customField1(String.valueOf(i)); - - assertEquals(LoggingContext.customField1(), String.valueOf(i)); - - LoggingContext.save(); - - contexts.push(LoggingContext.getCopy()); - } - - while (contexts.peek() != null) { - LoggingContext.restore(); - - assertEquals(LoggingContext.getCopy(), contexts.pop()); - } - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/query/GraphTraversalTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/query/GraphTraversalTest.java deleted file mode 100644 index a4070b02..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/query/GraphTraversalTest.java +++ /dev/null @@ -1,814 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.query; - -import org.apache.tinkerpop.gremlin.process.traversal.P; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.rest.RestTokens; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; -import javax.ws.rs.core.UriBuilder; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.util.ArrayList; -import java.util.List; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; - -public class GraphTraversalTest extends AAISetup { - - private TransactionalGraphEngine dbEngine; - private TransactionalGraphEngine dbEnginev9; - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - /** - * Configure. - * @throws Exception - * @throws SecurityException - * @throws NoSuchFieldException - */ - @Before - public void configure() throws Exception { - dbEngine = - new TitanDBEngine(QueryStyle.TRAVERSAL, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST), - false); - - dbEnginev9 = - new TitanDBEngine(QueryStyle.TRAVERSAL, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v9), - false); - } - - /** - * Parent query. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentQuery() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1").build(); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - - GraphTraversal expected = __.start().has("physical-location-id", "key1").has("aai-node-type", "complex"); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal to normal query", - expected.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be complex", - "complex", - query.getResultType()); - assertEquals( - "result type should be empty", - "", - query.getParentResultType()); - assertEquals("dependent",false, query.isDependent()); - - - } - - /** - * Child query. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void childQuery() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("physical-location-id", "key1").has("aai-node-type", "complex") - .out("hasCtagPool") - .has("aai-node-type", "ctag-pool") - .has("target-pe", "key2").has("availability-zone-name", "key3"); - GraphTraversal expectedParent = __.start() - .has("physical-location-id", "key1").has("aai-node-type", "complex"); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for complex", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be complex", - "complex", - query.getParentResultType()); - assertEquals( - "result type should be ctag-pool", - "ctag-pool", - query.getResultType()); - assertEquals("dependent",true, query.isDependent()); - - - } - - /** - * Naming exceptions. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void namingExceptions() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("vnf-id", "key1").has("aai-node-type", "vce") - .out("hasPortGroup") - .has("aai-node-type", "port-group") - .has("interface-id", "key2").out("hasCTag") - .has("aai-node-type", "cvlan-tag") - .has("cvlan-tag", 655); - GraphTraversal expectedParent = __.start() - .has("vnf-id", "key1").has("aai-node-type", "vce") - .out("hasPortGroup") - .has("aai-node-type", "port-group") - .has("interface-id", "key2"); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - assertEquals( - "result type should be port-group", - "port-group", - query.getParentResultType()); - assertEquals( - "contaner type should be empty", - "", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - - } - - /** - * Gets the all. - * - * @return the all - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void getAll() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("vnf-id", "key1").has("aai-node-type", "vce") - .out("hasPortGroup") - .has("aai-node-type", "port-group") - .has("interface-id", "key2").out("hasCTag") - .has("aai-node-type", "cvlan-tag"); - GraphTraversal expectedParent = __.start() - .has("vnf-id", "key1").has("aai-node-type", "vce") - .out("hasPortGroup") - .has("aai-node-type", "port-group") - .has("interface-id", "key2"); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be port-group", - "port-group", - query.getParentResultType()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - assertEquals( - "container type should be cvlan-tags", - "cvlan-tags", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - - } - - @Test - public void getAllParent() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("aai-node-type", "pserver"); - GraphTraversal expectedParent = __.start() - .has("aai-node-type", "pserver"); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for pserver", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "parent result type should be empty", - "", - query.getParentResultType()); - assertEquals( - "result type should be pserver", - "pserver", - query.getResultType()); - assertEquals( - "container type should be pservers", - "pservers", - query.getContainerType()); - assertEquals("dependent",false, query.isDependent()); - - - } - - - /** - * Gets the via query param. - * - * @return the via query param - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void getViaQueryParam() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("tenant-name", "Tenant1"); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - GraphTraversal expected = __.start() - .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") - .has("aai-node-type", "cloud-region") - .out("has") - .has("aai-node-type", "tenant") - .has("tenant-name", "Tenant1"); - - GraphTraversal expectedParent = __.start() - .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") - .has("aai-node-type", "cloud-region"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for cloud-region", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be cloud-region", - "cloud-region", - query.getParentResultType()); - assertEquals( - "result type should be tenant", - "tenant", - query.getResultType()); - assertEquals( - "container type should be empty", - "", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - } - - @Test - public void getViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - List values = new ArrayList<>(); - values.add("Tenant1"); - values.add("Tenant2"); - map.put("tenant-name", values); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - GraphTraversal expected = __.start() - .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") - .has("aai-node-type", "cloud-region") - .out("has") - .has("aai-node-type", "tenant") - .has("tenant-name", P.within(values)); - - GraphTraversal expectedParent = __.start() - .has("cloud-owner", "mycloudowner").has("cloud-region-id", "mycloudregionid") - .has("aai-node-type", "cloud-region"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for cloud-region", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be cloud-region", - "cloud-region", - query.getParentResultType()); - assertEquals( - "result type should be tenant", - "tenant", - query.getResultType()); - assertEquals( - "container type should be empty", - "", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - } - - /** - * Gets the plural via query param. - * - * @return the plural via query param - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void getPluralViaQueryParam() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vnfcs").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("prov-status", "up"); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - GraphTraversal expected = __.start() - .has("aai-node-type", "vnfc") - .has("prov-status", "up"); - - GraphTraversal expectedParent = __.start() - .has("aai-node-type", "vnfc"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "parent result type should be empty", - "", - query.getParentResultType()); - assertEquals( - "result type should be vnfc", - "vnfc", - query.getResultType()); - assertEquals( - "container type should be empty", - "vnfcs", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - } - - /** - * Gets the all query param naming exception. - * - * @return the all query param naming exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void getAllQueryParamNamingException() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("cvlan-tag", "333"); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - - GraphTraversal expected = __.start() - .has("vnf-id", "key1").has("aai-node-type", "vce") - .out("hasPortGroup") - .has("aai-node-type", "port-group") - .has("interface-id", "key2").out("hasCTag") - .has("aai-node-type", "cvlan-tag") - .has("cvlan-tag", 333); - GraphTraversal expectedParent = __.start() - .has("vnf-id", "key1").has("aai-node-type", "vce") - .out("hasPortGroup") - .has("aai-node-type", "port-group") - .has("interface-id", "key2"); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be port-group", - "port-group", - query.getParentResultType()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - assertEquals( - "container type should be cvlan-tags", - "cvlan-tags", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - - } - - /** - * Abstract type. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void abstractType() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("vnf/key1").build(); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - - GraphTraversal expected = __.start() - .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf")); - - GraphTraversal expectedParent = expected; - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be empty", - "", - query.getParentResultType()); - assertEquals( - "result type should be vnf", - "vnf", - query.getResultType()); - - assertEquals("dependent",false, query.isDependent()); - - - } - - /** - * Non parent abstract type. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void nonParentAbstractType() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key2/vnf/key1").build(); - thrown.expect(AAIException.class); - thrown.expectMessage(containsString("not a valid path")); - dbEngine.getQueryBuilder().createQueryFromURI(uri); - } - - @Test - public void parentAbstractTypeWithNesting() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("vnf/key1/vf-modules/vf-module/key2").build(); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - - GraphTraversal expected = __.start() - .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf")) - .union(__.out("has").has(AAIProperties.NODE_TYPE, "vf-module")).has("vf-module-id", "key2"); - - GraphTraversal expectedParent = __.start() - .has("vnf-id", "key1").has(AAIProperties.NODE_TYPE, P.within("vce", "generic-vnf")); - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent gremlin query should be equal the query for ", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "result type should be vnf", - "vnf", - query.getParentResultType()); - assertEquals( - "result type should be vf-module", - "vf-module", - query.getResultType()); - - assertEquals("dependent",true, query.isDependent()); - - } - - @Test - public void getViaBadQueryParam() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants/tenant").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("tenant-n231ame", "Tenant1"); - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - - } - - @Test - public void getPluralViaBadQueryParam() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/cloud-regions/cloud-region/a/b/tenants").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("tenant-n231ame", "Tenant1"); - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - - } - - @Test - public void getPluralViaDuplicateQueryParam() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vnfcs").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - List values = new ArrayList<>(); - values.add("up"); - values.add("down"); - values.add("left"); - values.add("right"); - values.add("start"); - map.put("prov-status", values); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri, map); - GraphTraversal expected = __.start() - .has("aai-node-type", "vnfc") - .has("prov-status", P.within(values)); - - GraphTraversal expectedParent = __.start() - .has("aai-node-type", "vnfc"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - assertEquals( - "parent result type should be empty", - "", - query.getParentResultType()); - assertEquals( - "result type should be vnfc", - "vnfc", - query.getResultType()); - assertEquals( - "container type should be empty", - "vnfcs", - query.getContainerType()); - assertEquals("dependent",true, query.isDependent()); - - } - - @Test - public void dbAliasedSearch() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/test-objects").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("persona-model-customization-id", "key2"); - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri, map); - GraphTraversal expected = __.start() - .has("aai-node-type", "test-object") - .has("model-customization-id", "key2"); - GraphTraversal expectedParent = __.start() - .has("aai-node-type", "test-object"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - - assertEquals( - "result type should be", - "test-object", - query.getResultType()); - assertEquals( - "result type should be empty", - "", - query.getParentResultType()); - assertEquals("dependent",true, query.isDependent()); - - - } - - @Test - public void dataLinkedSearch() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vpn-bindings").build(); - MultivaluedMap map = new MultivaluedHashMap<>(); - map.putSingle("global-route-target", "key2"); - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri, map); - GraphTraversal expected = __.start() - .has("aai-node-type", "vpn-binding") - .where(__.out("has").has(AAIProperties.NODE_TYPE, "route-target").has("global-route-target", "key2")); - GraphTraversal expectedParent = __.start() - .has("aai-node-type", "vpn-binding"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - - assertEquals( - "result type should be", - "vpn-binding", - query.getResultType()); - assertEquals( - "result type should be empty", - "", - query.getParentResultType()); - assertEquals("dependent",true, query.isDependent()); - } - - @Test - public void pluralCousin() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers").build(); - - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("physical-location-id", "key1") - .has("aai-node-type", "complex") - .in("locatedIn").has("aai-node-type", "pserver"); - GraphTraversal expectedParent = __.start() - .has("physical-location-id", "key1") - .has("aai-node-type", "complex"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - - assertEquals( - "result type should be", - "pserver", - query.getResultType()); - assertEquals( - "result type should be", - "complex", - query.getParentResultType()); - //this is controversial but we're not allowing writes on this currently - assertEquals("dependent",true, query.isDependent()); - } - - @Test - public void specificCousin() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2").build(); - - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("physical-location-id", "key1") - .has("aai-node-type", "complex") - .in("locatedIn").has("aai-node-type", "pserver") - .has("hostname", "key2"); - GraphTraversal expectedParent = __.start() - .has("physical-location-id", "key1") - .has("aai-node-type", "complex"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - - assertEquals( - "result type should be", - "pserver", - query.getResultType()); - assertEquals( - "result type should be", - "complex", - query.getParentResultType()); - //this is controversial but we're not allowing writes on this currently - assertEquals("dependent",true, query.isDependent()); - } - - @Test - public void doubleSpecificCousin() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to/pservers/pserver/key2/related-to/vservers/vserver/key3").build(); - - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start() - .has("physical-location-id", "key1") - .has("aai-node-type", "complex") - .in("locatedIn").has("aai-node-type", "pserver") - .has("hostname", "key2") - .in("runsOnPserver").has("aai-node-type", "vserver") - .has("vserver-id", "key3"); - GraphTraversal expectedParent = __.start() - .has("physical-location-id", "key1") - .has("aai-node-type", "complex") - .in("locatedIn").has("aai-node-type", "pserver") - .has("hostname", "key2"); - - assertEquals( - "gremlin query should be " + expected.toString(), - expected.toString(), - query.getQueryBuilder().getQuery().toString()); - assertEquals( - "parent", - expectedParent.toString(), - query.getQueryBuilder().getParentQuery().getQuery().toString()); - - assertEquals( - "result type should be", - "vserver", - query.getResultType()); - assertEquals( - "result type should be", - "pserver", - query.getParentResultType()); - //this is controversial but we're not allowing writes on this currently - assertEquals("dependent",true, query.isDependent()); - } - - @Test - public void traversalEndsInRelatedTo() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/related-to").build(); - - thrown.expect(AAIException.class); - thrown.expectMessage(containsString(RestTokens.COUSIN.toString())); - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); - - } - - @Test - public void pluralCousinToPluralCousin() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/related-to/pservers").build(); - - thrown.expect(AAIException.class); - thrown.expectMessage(containsString("chain plurals")); - QueryParser query = dbEnginev9.getQueryBuilder().createQueryFromURI(uri); - - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/query/LegacyQueryTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/query/LegacyQueryTest.java deleted file mode 100644 index baaad6c9..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/query/LegacyQueryTest.java +++ /dev/null @@ -1,157 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.query; - -import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelInjestor; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import javax.ws.rs.core.UriBuilder; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.URI; - -import static org.junit.Assert.assertEquals; - - -@Ignore -public class LegacyQueryTest extends AAISetup { - - private ModelInjestor injestor = ModelInjestor.getInstance(); - - private TransactionalGraphEngine dbEngine = - new TitanDBEngine(QueryStyle.GREMLIN_TRAVERSAL, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), - false); - private final Version version = Version.v8; - private DynamicJAXBContext context = injestor.getContextForVersion(version); - - - /** - * Parent query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - - URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key1").build(); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - - String expected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal to normal query", - expected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be pserver", - "pserver", - query.getResultType()); - - } - - /** - * Child query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/pservers/pserver/key1/lag-interfaces/lag-interface/key2").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - - String expected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')" - + ".out('hasLAGInterface').has('aai-node-type', 'lag-interface')" - + ".has('interface-name', 'key2')"; - String parentExpected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; - assertEquals( - "gremlin query should be for node", - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be for parent", - parentExpected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be lag-interface", - "lag-interface", - query.getResultType()); - } - - /** - * Naming exceptions. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); - - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - String expected = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" - + ".has('cvlan-tag', 655)"; - String expectedParent = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipGremlinQueryTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipGremlinQueryTest.java deleted file mode 100644 index 0aad09c4..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipGremlinQueryTest.java +++ /dev/null @@ -1,662 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.query; - -import org.eclipse.persistence.dynamic.DynamicEntity; -import org.eclipse.persistence.jaxb.UnmarshallerProperties; -import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; - -import static org.hamcrest.CoreMatchers.containsString; -import static org.junit.Assert.assertEquals; - -@Ignore -public class RelationshipGremlinQueryTest extends AAISetup { - - private ModelInjestor injestor = ModelInjestor.getInstance(); - private TransactionalGraphEngine dbEngine = - new TitanDBEngine(QueryStyle.GREMLIN_TRAVERSAL, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), - false); - private final Version version = Version.v8; - private DynamicJAXBContext context = injestor.getContextForVersion(version); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - /** - * Parent query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - - String content = - "{" - + "\"related-to\" : \"pserver\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"pserver.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String expected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal to normal query", - expected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be pserver", - "pserver", - query.getResultType()); - - } - - /** - * Child query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"lag-interface\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"pserver.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String expected = ".has('hostname', 'key1').has('aai-node-type', 'pserver').in('tosca.relationships.BindsTo').has('aai-node-type', 'lag-interface')" - + ".has('interface-name', 'key2')"; - String parentExpected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; - assertEquals( - "gremlin query should be for node", - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be for parent", - parentExpected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be lag-interface", - "lag-interface", - query.getResultType()); - } - - /** - * Naming exceptions. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"cvlan-tag\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"vce.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"port-group.interface-id\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," - + "\"relationship-value\" : \"655\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String expected = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" - + ".has('cvlan-tag', 655)"; - String expectedParent = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - - } - - /** - * Scrambled relationship. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void scrambledRelationship() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"l3-interface-ipv4-address-list\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," - + "\"relationship-value\" : \"key5\"" - + "},{" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"l-interface.interface-name\"," - + "\"relationship-value\" : \"key3\"" - + "},{" - + "\"relationship-key\" : \"vlan.vlan-interface\"," - + "\"relationship-value\" : \"key4\"" - + "},{" - + "\"relationship-key\" : \"generic-vnf.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "}]" - + "}"; - scrambledRelationshipSpec(content); - } - - /** - * Reversed relationship. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void reversedRelationship() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"l3-interface-ipv4-address-list\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," - + "\"relationship-value\" : \"key5\"" - + "},{" - + "\"relationship-key\" : \"vlan.vlan-interface\"," - + "\"relationship-value\" : \"key4\"" - + "},{" - + "\"relationship-key\" : \"l-interface.interface-name\"," - + "\"relationship-value\" : \"key3\"" - + "},{" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"generic-vnf.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "}]" - + "}"; - scrambledRelationshipSpec(content); - } - - /** - * Ordered ambiguous relationship. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void orderedAmbiguousRelationship() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"l3-interface-ipv4-address-list\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"generic-vnf.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "},{" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"l-interface.interface-name\"," - + "\"relationship-value\" : \"key3\"" - + "},{" - + "\"relationship-key\" : \"vlan.vlan-interface\"," - + "\"relationship-value\" : \"key4\"" - + "},{" - + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," - + "\"relationship-value\" : \"key5\"" - + "}]" - + "}"; - scrambledRelationshipSpec(content); - } - - /** - * Scrambled relationship spec. - * - * @param content the content - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - public void scrambledRelationshipSpec(String content) throws JAXBException, UnsupportedEncodingException, AAIException { - - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String expected = - ".has('vnf-id', 'key1').has('aai-node-type', 'generic-vnf')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'lag-interface')" - + ".has('interface-name', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'l-interface')" - + ".has('interface-name', 'key3').out('tosca.relationships.LinksTo').has('aai-node-type', 'vlan')" - + ".has('vlan-interface', 'key4').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'l3-interface-ipv4-address-list')" - + ".has('l3-interface-ipv4-address', 'key5')"; - String expectedParent = - ".has('vnf-id', 'key1').has('aai-node-type', 'generic-vnf')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'lag-interface')" - + ".has('interface-name', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'l-interface')" - + ".has('interface-name', 'key3').out('tosca.relationships.LinksTo').has('aai-node-type', 'vlan')" - + ".has('vlan-interface', 'key4')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for vlan", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be l3-interface-ipv4-address-list", - "l3-interface-ipv4-address-list", - query.getResultType()); - - } - - /** - * Short circuit. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void shortCircuit() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"cvlan-tag\"," - + "\"related-link\" : \"http://mock-system-name.com:8443/aai/v6/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"vce.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"port-group.interface-id\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," - + "\"relationship-value\" : \"655\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String expected = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" - + ".has('cvlan-tag', 655)"; - String expectedParent = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - - } - - @Test - public void shorterCircuit() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"cvlan-tag\"," - + "\"related-link\" : \"file:///network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655\"" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String expected = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" - + ".has('cvlan-tag', 655)"; - String expectedParent = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'port-group')" - + ".has('interface-id', 'key2')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - - } - - /** - * Double key. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void doubleKey() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"ctag-pool\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"complex.physical-location-id\"," - + "\"relationship-value\" : \"key1\"" - + " }, { " - + "\"relationship-key\" : \"ctag-pool.target-pe\"," - + " \"relationship-value\" : \"key2\"" - + " },{" - + "\"relationship-key\" : \"ctag-pool.availability-zone-name\"," - + "\"relationship-value\" : \"key3\"" - + "}]" - + "}"; - - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String expected = - ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'ctag-pool')" - + ".has('target-pe', 'key2')" - + ".has('availability-zone-name', 'key3')"; - String expectedParent = - ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')"; - - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be ctag-pool", - "ctag-pool", - query.getResultType()); - - } - - /** - * Abstract type. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void abstractType() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"vnf\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"vnf.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + " }]" - + "}"; - - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String expected = - ".has('vnf-id', 'key1')" - + ".has('aai-node-type', P.within('vce','generic-vnf'))"; - - String expectedParent = - ".has('vnf-id', 'key1')" - + ".has('aai-node-type', P.within('vce','generic-vnf'))"; - - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be vnf", - "vnf", - query.getResultType()); - - } - - /** - * Invalid node name. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void invalidNodeName() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"l3-interface-ipv4-address-list\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"generic-vnf.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "},{" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"l-infeaterface.interface-name\"," - + "\"relationship-value\" : \"key3\"" - + "},{" - + "\"relationship-key\" : \"vlan.vlan-interface\"," - + "\"relationship-value\" : \"key4\"" - + "},{" - + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," - + "\"relationship-value\" : \"key5\"" - + "}]" - + "}"; - thrown.expect(AAIException.class); - thrown.expectMessage(containsString("invalid object name")); - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - } - - /** - * Invalid property name. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void invalidPropertyName() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"l3-interface-ipv4-address-list\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"generic-vnf.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "},{" - + "\"relationship-key\" : \"lag-interface.intfdaferface-name\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"l-interface.interface-name\"," - + "\"relationship-value\" : \"key3\"" - + "},{" - + "\"relationship-key\" : \"vlan.vlan-interface\"," - + "\"relationship-value\" : \"key4\"" - + "},{" - + "\"relationship-key\" : \"l3-interface-ipv4-address-list.l3-interface-ipv4-address\"," - + "\"relationship-value\" : \"key5\"" - + "}]" - + "}"; - thrown.expect(AAIException.class); - thrown.expectMessage(containsString("invalid property name")); - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipQueryTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipQueryTest.java deleted file mode 100644 index 94fe0c59..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/query/RelationshipQueryTest.java +++ /dev/null @@ -1,271 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.query; - -import org.eclipse.persistence.dynamic.DynamicEntity; -import org.eclipse.persistence.jaxb.UnmarshallerProperties; -import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; - -import static org.junit.Assert.assertEquals; - -@Ignore -public class RelationshipQueryTest extends AAISetup { - - private ModelInjestor injestor = ModelInjestor.getInstance(); - - private TransactionalGraphEngine dbEngine = - new TitanDBEngine(QueryStyle.GREMLIN_TRAVERSAL, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), - false); - private final Version version = Version.v8; - private DynamicJAXBContext context = injestor.getContextForVersion(version); - - /** - * Parent query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - - String content = - "{" - + "\"related-to\" : \"pserver\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"pserver.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String expected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal to normal query", - expected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be pserver", - "pserver", - query.getResultType()); - - } - - /** - * Child query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Ignore - @Test - public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"lag-interface\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"pserver.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String expected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver').out('hasLAGInterface').has('aai-node-type', 'lag-interface')" - + ".has('interface-name', 'key2')"; - String parentExpected = - ".has('hostname', 'key1').has('aai-node-type', 'pserver')"; - assertEquals( - "gremlin query should be for node", - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be for parent", - parentExpected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be lag-interface", - "lag-interface", - query.getResultType()); - } - - /** - * Naming exceptions. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Ignore - @Test - public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"cvlan-tag\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"vce.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"port-group.interface-id\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," - + "\"relationship-value\" : \"655\"" - + "}]" - + "}"; - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String expected = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce').in('org.onap.relationships.inventory.BelongsTo')" - + ".has('aai-node-type', 'port-group').has('interface-id', 'key2').in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'cvlan-tag')" - + ".has('cvlan-tag', 655)"; - String expectedParent = - ".has('vnf-id', 'key1').has('aai-node-type', 'vce').in('org.onap.relationships.inventory.BelongsTo')" - + ".has('aai-node-type', 'port-group').has('interface-id', 'key2')"; - - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be cvlan-tag", - "cvlan-tag", - query.getResultType()); - - } - - /** - * Double key. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Ignore - @Test - public void doubleKey() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"ctag-pool\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"complex.physical-location-id\"," - + "\"relationship-value\" : \"key1\"" - + " }, { " - + "\"relationship-key\" : \"ctag-pool.target-pe\"," - + " \"relationship-value\" : \"key2\"" - + " },{" - + "\"relationship-key\" : \"ctag-pool.availability-zone-name\"," - + "\"relationship-value\" : \"key3\"" - + "}]" - + "}"; - - - Unmarshaller unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String expected = - ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')" - + ".in('org.onap.relationships.inventory.BelongsTo').has('aai-node-type', 'ctag-pool')" - + ".has('target-pe', 'key2')" - + ".has('availability-zone-name', 'key3')"; - String expectedParent = - ".has('physical-location-id', 'key1').has('aai-node-type', 'complex')"; - - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be equal the query for port group", - expectedParent, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "result type should be ctag-pool", - "ctag-pool", - query.getResultType()); - - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueRelationshipQueryTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueRelationshipQueryTest.java deleted file mode 100644 index 870bbd36..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueRelationshipQueryTest.java +++ /dev/null @@ -1,296 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.query; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.eclipse.persistence.dynamic.DynamicEntity; -import org.eclipse.persistence.jaxb.UnmarshallerProperties; -import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import javax.xml.bind.JAXBException; -import javax.xml.bind.Unmarshaller; -import javax.xml.transform.stream.StreamSource; -import java.io.StringReader; -import java.io.UnsupportedEncodingException; - -import static org.junit.Assert.assertEquals; - -@Ignore -public class UniqueRelationshipQueryTest extends AAISetup { - - private ModelInjestor injestor = ModelInjestor.getInstance(); - private TransactionalGraphEngine dbEngine = - new TitanDBEngine(QueryStyle.GREMLIN_UNIQUE, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), - false); - private final Version version = Version.v8; - private DynamicJAXBContext context = injestor.getContextForVersion(version); - private Unmarshaller unmarshaller = null; - - /** - * Setup. - * - * @throws JAXBException the JAXB exception - */ - @Before - public void setup() throws JAXBException { - unmarshaller = context.createUnmarshaller(); - unmarshaller.setProperty(UnmarshallerProperties.MEDIA_TYPE, "application/json"); - unmarshaller.setProperty(UnmarshallerProperties.JSON_INCLUDE_ROOT, false); - unmarshaller.setProperty(UnmarshallerProperties.JSON_WRAPPER_AS_ARRAY_NAME, true); - } - - /** - * Parent query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - - String content = - "{" - + "\"related-to\" : \"pserver\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"pserver.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}]" - + "}"; - - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String key = "pserver/key1"; - GraphTraversal expected = - __.start().has("aai-unique-key", key); - String resultType = "pserver"; - String containerType = ""; - - testSet(query, expected, expected, resultType, containerType); - - } - - /** - * Child query. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void childQuery() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"lag-interface\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"pserver.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"lag-interface.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "}]" - + "}"; - - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String key = "pserver/key1/lag-interface/key2"; - GraphTraversal expected = - __.start().has("aai-unique-key", key); - GraphTraversal parentExpected = - __.start().has("aai-unique-key", "pserver/key1"); - String resultType = "lag-interface"; - String containerType = ""; - - testSet(query, expected, parentExpected, resultType, containerType); - } - - /** - * Naming exceptions. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void namingExceptions() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"cvlan-tag\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"vce.vnf-id\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"port-group.interface-id\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"cvlan-tag.cvlan-tag\"," - + "\"relationship-value\" : \"655\"" - + "}]" - + "}"; - - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String key = "vce/key1/port-group/key2/cvlan-tag/655"; - GraphTraversal expected = - __.start().has("aai-unique-key", key); - GraphTraversal parentExpected = - __.start().has("aai-unique-key", "vce/key1/port-group/key2"); - String resultType = "cvlan-tag"; - String containerType = ""; - - testSet(query, expected, parentExpected, resultType, containerType); - - } - - /** - * Double key. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void doubleKey() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"service-capability\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"service-capability.service-type\"," - + "\"relationship-value\" : \"key1\"" - + " }, { " - + "\"relationship-key\" : \"service-capability.vnf-type\"," - + " \"relationship-value\" : \"key2\"" - + " }]" - + "}"; - - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - - String key = "service-capability/key1/key2"; - GraphTraversal expected = - __.start().has("aai-unique-key", key); - GraphTraversal parentExpected = - __.start().has("aai-unique-key", "service-capability/key1/key2"); - String resultType = "service-capability"; - String containerType = ""; - - testSet(query, expected, parentExpected, resultType, containerType); - - } - - /** - * Short circuit. - * - * @throws JAXBException the JAXB exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void shortCircuit() throws JAXBException, UnsupportedEncodingException, AAIException { - String content = - "{" - + "\"related-to\" : \"cvlan-tag\"," - + "\"related-link\" : \"http://mock-system-name.com:8443/aai/v6/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655\"," - + "\"relationship-data\" : [{" - + "\"relationship-key\" : \"vce.hostname\"," - + "\"relationship-value\" : \"key1\"" - + "}, {" - + "\"relationship-key\" : \"port-group.interface-name\"," - + "\"relationship-value\" : \"key2\"" - + "},{" - + "\"relationship-key\" : \"cvlan-tag.-name\"," - + "\"relationship-value\" : \"655\"" - + "}]" - + "}"; - - Object obj = context.newDynamicEntity("Relationship"); - - DynamicEntity entity = (DynamicEntity)unmarshaller.unmarshal(new StreamSource(new StringReader(content)), obj.getClass()).getValue(); - - Introspector wrappedObj = IntrospectorFactory.newInstance(ModelType.MOXY, entity); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromRelationship(wrappedObj); - String key = "vce/key1/port-group/key2/cvlan-tag/655"; - GraphTraversal expected = __.start().has("aai-unique-key", key); - GraphTraversal parentExpected = __.start().has("aai-unique-key", "vce/key1/port-group/key2"); - String resultType = "cvlan-tag"; - String containerType = ""; - - testSet(query, expected, parentExpected, resultType, containerType); - - } - - /** - * Test set. - * - * @param query the query - * @param expected the expected - * @param parentExpected the parent expected - * @param resultType the result type - * @param containerType the container type - */ - public void testSet(QueryParser query, GraphTraversal expected, GraphTraversal parentExpected, String resultType, String containerType) { - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be " + parentExpected, - parentExpected, - query.getParentQueryBuilder().getParentQuery()); - assertEquals( - "result type should be " + resultType, - resultType, - query.getResultType()); - assertEquals( - "container type should be " + containerType, - containerType, - query.getContainerType()); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueURIQueryTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueURIQueryTest.java deleted file mode 100644 index e1be7f25..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/query/UniqueURIQueryTest.java +++ /dev/null @@ -1,194 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.query; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.eclipse.persistence.jaxb.dynamic.DynamicJAXBContext; -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelInjestor; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import javax.ws.rs.core.UriBuilder; -import java.io.UnsupportedEncodingException; -import java.net.URI; - -import static org.junit.Assert.assertEquals; - -@Ignore -public class UniqueURIQueryTest extends AAISetup { - - private ModelInjestor injestor = ModelInjestor.getInstance(); - private TransactionalGraphEngine dbEngine = - new TitanDBEngine(QueryStyle.GREMLIN_UNIQUE, - LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8), - false); - private final Version version = Version.v8; - private DynamicJAXBContext context = injestor.getContextForVersion(version); - - /** - * Parent query. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentQuery() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1").build(); - String key = "complex/key1"; - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start().has("aai-unique-key", key); - String parentResultType = ""; - String resultType = "complex"; - String containerType = ""; - - testSet(query, expected, expected, parentResultType, resultType, containerType); - - } - - /** - * Parent plural query. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void parentPluralQuery() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start().has("aai-node-type", "complex"); - String parentResultType = ""; - String resultType = "complex"; - String containerType = "complexes"; - - testSet(query, expected, expected, parentResultType, resultType, containerType); - - } - - /** - * Child query. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void childQuery() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - String parentKey = "complex/key1"; - String key = parentKey + "/ctag-pool/key2/key3"; - GraphTraversal expected = __.start().has("aai-unique-key", key); - GraphTraversal parentExpected = __.start().has("aai-unique-key", parentKey); - String parentResultType = "complex"; - String resultType = "ctag-pool"; - String containerType = ""; - - testSet(query, expected, parentExpected, parentResultType, resultType, containerType); - - } - - /** - * Naming exceptions. - * - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void namingExceptions() throws UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - String parentKey = "vce/key1/port-group/key2"; - String key = parentKey + "/cvlan-tag/655"; - GraphTraversal expected = __.start().has("aai-unique-key", key); - GraphTraversal parentExpected = __.start().has("aai-unique-key", parentKey); - String parentResultType = "port-group"; - String resultType = "cvlan-tag"; - String containerType = ""; - - testSet(query, expected, parentExpected, parentResultType, resultType, containerType); - - } - - /** - * Gets the all. - * - * @return the all - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - public void getAll() throws UnsupportedEncodingException, AAIException { - String parentURI = "network/vces/vce/key1/port-groups/port-group/key2"; - String parentKey = "vce/key1/port-group/key2"; - URI uri = UriBuilder.fromPath(parentURI + "/cvlan-tags").build(); - QueryParser query = dbEngine.getQueryBuilder().createQueryFromURI(uri); - GraphTraversal expected = __.start().has("aai-unique-key", parentKey).out("hasCTag").has("aai-node-type", "cvlan-tag"); - GraphTraversal parentExpected = __.start().has("aai-unique-key",parentKey); - String parentResultType = "port-group"; - String resultType = "cvlan-tag"; - String containerType = "cvlan-tags"; - - testSet(query, expected, parentExpected, parentResultType, resultType, containerType); - - } - - /** - * Test set. - * - * @param query the query - * @param expected the expected - * @param parentExpected the parent expected - * @param parentResultType the parent result type - * @param resultType the result type - * @param containerType the container type - */ - public void testSet(QueryParser query, GraphTraversal expected, GraphTraversal parentExpected, String parentResultType, String resultType, String containerType) { - assertEquals( - "gremlin query should be " + expected, - expected, - query.getQueryBuilder().getQuery()); - assertEquals( - "parent gremlin query should be " + parentExpected, - parentExpected, - query.getQueryBuilder().getParentQuery().getQuery()); - assertEquals( - "parent result type should be " + parentResultType, - parentResultType, - query.getParentResultType()); - assertEquals( - "result type should be " + resultType, - resultType, - query.getResultType()); - assertEquals( - "container type should be " + containerType, - containerType, - query.getContainerType()); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/relationship/RelationshipToURITest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/relationship/RelationshipToURITest.java deleted file mode 100644 index 092d5c66..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/relationship/RelationshipToURITest.java +++ /dev/null @@ -1,224 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.relationship; - -import org.apache.commons.io.IOUtils; -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.parsers.exceptions.AAIIdentityMapParseException; -import org.openecomp.aai.parsers.exceptions.AmbiguousMapAAIException; - -import java.io.FileInputStream; -import java.io.IOException; -import java.net.URI; -import java.net.URISyntaxException; - -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; - -public class RelationshipToURITest extends AAISetup { - - private final ModelType modelType = ModelType.MOXY; - private final Version version10 = Version.v10; - private final Version version9 = Version.v9; - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @Test - public void onlyLink() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("only-related-link.json")); - URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected.getPath(), uri.getPath()); - } - - @Test - public void onlyData() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("only-relationship-data.json")); - URI expected = new URI("/network/test-objects/test-object/key1"); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected, uri); - } - - @Test - public void failV10() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-failv10-successv9.json")); - URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); - - thrown.expect(AAIIdentityMapParseException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - RelationshipToURI parse = new RelationshipToURI(loader, obj); - URI uri = parse.getUri(); - - } - - @Test - public void successV9() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version9); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-failv10-successv9.json")); - URI expected = new URI("/network/test-objects/test-object/key2"); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected, uri); - - - } - - @Test - public void failV9() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version9); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-successv10-failv9.json")); - URI expected = new URI("/network/test-objects/test-object/key1"); - - thrown.expect(AAIIdentityMapParseException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - - URI uri = parse.getUri(); - - } - - @Test - public void failNothingToParse() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("nothing-to-parse.json")); - URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); - - thrown.expect(AAIIdentityMapParseException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - } - - @Test - public void successV10() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("both-successv10-failv9.json")); - URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected, uri); - - - } - - @Test - public void ambiguousRelationship() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("ambiguous-relationship.json")); - URI expected = new URI("/aai/v10/network/test-objects/test-object/key1"); - - thrown.expect(AmbiguousMapAAIException.class); - thrown.expect(hasProperty("code", is("AAI_6146"))); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected, uri); - - - } - - @Ignore - @Test - public void moreItemsThanRequired() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("too-many-items-relationship.json")); - URI expected = new URI("/network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2"); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected.toString(), uri.toString()); - - } - - @Test - public void twoTopLevelNodes() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("two-top-level-relationship.json")); - URI expected = new URI("/network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2"); - - thrown.expect(AmbiguousMapAAIException.class); - thrown.expect(hasProperty("code", is("AAI_6146"))); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected, uri); - - } - - @Test - public void topLevelWithTwoKeys() throws AAIException, URISyntaxException, IOException { - Loader loader = LoaderFactory.createLoaderForVersion(modelType, version10); - Introspector obj = loader.unmarshal("relationship", this.getJsonString("top-level-two-keys-relationship.json")); - URI expected = new URI("/cloud-infrastructure/cloud-regions/cloud-region/key1/key2/availability-zones/availability-zone/key3"); - - RelationshipToURI parse = new RelationshipToURI(loader, obj); - - URI uri = parse.getUri(); - - assertEquals("related-link is equal", expected.toString(), uri.toString()); - - } - - - private String getJsonString(String filename) throws IOException { - - - FileInputStream is = new FileInputStream("src/test/resources/bundleconfig-local/etc/relationship/" + filename); - String s = IOUtils.toString(is, "UTF-8"); - IOUtils.closeQuietly(is); - - return s; - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIParserTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIParserTest.java deleted file mode 100644 index da863c1e..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIParserTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.uri; - -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; - -import javax.ws.rs.core.UriBuilder; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.URI; - -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.is; - -public class URIParserTest extends AAISetup { - - private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v8); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - /** - * Invalid path. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void invalidPath() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/network/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - new URIToDBKey(loader, uri); - } - - /** - * Invalid path no name space. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void invalidPathNoNameSpace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - new URIToDBKey(loader, uri); - } - - /** - * Invalid path partial. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void invalidPathPartial() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - new URIToDBKey(loader, uri); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToDBKeyTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToDBKeyTest.java deleted file mode 100644 index 626e97ab..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToDBKeyTest.java +++ /dev/null @@ -1,185 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.uri; - -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.parsers.exceptions.DoesNotStartWithValidNamespaceException; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.introspection.*; -import org.powermock.core.classloader.annotations.PrepareForTest; - -import javax.ws.rs.core.UriBuilder; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.URI; - -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; - - - -@PrepareForTest(ModelInjestor.class) -public class URIToDBKeyTest extends AAISetup { - - private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - /** - * Uri. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); - URIToDBKey parse = new URIToDBKey(loader, uri); - Object result = parse.getResult(); - - String expected = "cloud-region/tenant/vserver/l-interface"; - - assertEquals("blah", expected, result); - - } - - /** - * Uri no version. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); - URIToDBKey parse = new URIToDBKey(loader, uri); - Object result = parse.getResult(); - - String expected = "cloud-region/tenant/vserver/l-interface"; - - assertEquals("blah", expected, result); - - } - - - /** - * Bad URI. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3001"))); - - new URIToDBKey(loader, uri); - } - - /** - * NotValid namespace. - * - * @throws JAXBException the JAXB exception - * @throws DoesNotStartWithValidNamespaceException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void notValidNamespace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/cloud-region/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); - thrown.expect(DoesNotStartWithValidNamespaceException.class); - URIToDBKey parse = new URIToDBKey(loader, uri); - } - - - /** - * No valid tokens. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void noValidTokens() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud/blah/blah").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - new URIToDBKey(loader, uri); - } - - /** - * Starts with valid namespace. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void startsWithValidNamespace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/cloudOwner-key/cloudRegion-key/tenants/tenant/tenantId-key/vservers/vserver/vserverId-key/l-interfaces/l-interface/key3").build(); - - URIToDBKey parse = new URIToDBKey(loader, uri); - Object result = parse.getResult(); - - String expected = "cloud-region/tenant/vserver/l-interface"; - - assertEquals("blah", expected, result); - } - - /** - * Naming exceptions. - * - * @throws IllegalArgumentException the illegal argument exception - * @throws AAIException the AAI exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void namingExceptions() throws IllegalArgumentException, AAIException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); - URIToDBKey parse = new URIToDBKey(loader, uri); - Object result = parse.getResult(); - - String expected = "vce/port-group/cvlan-tag"; - - assertEquals("blah", expected, result); - - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToExtensionInformationTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToExtensionInformationTest.java deleted file mode 100644 index 38377f73..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToExtensionInformationTest.java +++ /dev/null @@ -1,94 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.uri; - -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.restcore.HttpMethod; - -import javax.ws.rs.core.UriBuilder; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.URI; - -import static org.junit.Assert.assertEquals; - - -public class URIToExtensionInformationTest extends AAISetup { - - private Loader v8Loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.v10); - - /** - * Vservers V 7. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void vserversV8() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + v8Loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/att-aic/AAIAIC25/tenants/tenant/key1/vservers/vserver/key2").build(); - URIToExtensionInformation parse = new URIToExtensionInformation(v8Loader, uri); - - String namespace = "cloudInfrastructure"; - String preMethodName = "DynamicAddCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverPreProc"; - String postMethodName = "DynamicAddCloudInfrastructureCloudRegionsCloudRegionTenantsTenantVserversVserverPostProc"; - String topLevel = "CloudRegion"; - testSpec(parse, HttpMethod.PUT, namespace, preMethodName, postMethodName, topLevel); - - } - - /** - * Test spec. - * - * @param info the info - * @param httpMethod the http method - * @param namespace the namespace - * @param preMethodName the pre method name - * @param postMethodName the post method name - * @param topLevel the top level - */ - private void testSpec(URIToExtensionInformation info, HttpMethod httpMethod, String namespace, String preMethodName, String postMethodName, String topLevel) { - - - String namespaceResult = info.getNamespace(); - String methodNameResult = info.getMethodName(httpMethod, true); - - assertEquals("namespace", namespace, namespaceResult); - assertEquals("preprocess method name", preMethodName, methodNameResult); - methodNameResult = info.getMethodName(httpMethod, false); - - assertEquals("postprocess method name", postMethodName, methodNameResult); - - String topLevelResult = info.getTopObject(); - - assertEquals("topLevel", topLevel, topLevelResult); - } - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToObjectTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToObjectTest.java deleted file mode 100644 index 9eb013f6..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToObjectTest.java +++ /dev/null @@ -1,248 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.uri; - -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException; - -import javax.ws.rs.core.UriBuilder; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.util.HashMap; - -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertEquals; - - - -public class URIToObjectTest extends AAISetup { - - private Version version = Version.v10; - private Version currentVersion = AAIProperties.LATEST; - private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, version); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - /** - * Uri. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - URIToObject parse = new URIToObject(loader, uri); - Introspector result = parse.getTopEntity(); - String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; - String topEntity = "cloud-region"; - String entity = "l-interface"; - - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - - } - - /** - * Uri no version. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIUnknownObjectException - */ - @Test - public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, AAIUnknownObjectException { - URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - HashMap relatedObjects = new HashMap<>(); - Introspector tenantObj = this.loader.introspectorFromName("tenant"); - tenantObj.setValue("tenant-id", "key1"); - tenantObj.setValue("tenant-name", "name1"); - relatedObjects.put(tenantObj.getObjectId(), tenantObj); - Introspector vserverObj = this.loader.introspectorFromName("vserver"); - vserverObj.setValue("vserver-id", "key2"); - vserverObj.setValue("vserver-name", "name2"); - relatedObjects.put(vserverObj.getObjectId(), vserverObj); - - URIToObject parse = new URIToObject(loader, uri, relatedObjects); - Introspector result = parse.getTopEntity(); - String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"tenant-name\":\"name1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"vserver-name\":\"name2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; - String topEntity = "cloud-region"; - String entity = "l-interface"; - - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - - - } - - - /** - * Bad URI. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - new URIToObject(loader, uri); - } - - /** - * Starts with valid namespace. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void startsWithValidNamespace() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/mycloudowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - URIToObject parse = new URIToObject(loader, uri); - Introspector result = parse.getTopEntity(); - String expected = "{\"cloud-owner\":\"mycloudowner\",\"cloud-region-id\":\"mycloudregionid\",\"tenants\":{\"tenant\":[{\"tenant-id\":\"key1\",\"vservers\":{\"vserver\":[{\"vserver-id\":\"key2\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"key3\"}]}}]}}]}}"; - String topEntity = "cloud-region"; - String entity = "l-interface"; - - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - } - - /** - * Single top level. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void singleTopLevel() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/network/generic-vnfs/generic-vnf/key1").build(); - URIToObject parse = new URIToObject(loader, uri); - Introspector result = parse.getTopEntity(); - String expected = "{\"vnf-id\":\"key1\"}"; - - String topEntity = "generic-vnf"; - String entity = "generic-vnf"; - - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - - } - - /** - * Naming exceptions. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - @Ignore - public void namingExceptions() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/655").build(); - URIToObject parse = new URIToObject(loader, uri); - Introspector result = parse.getTopEntity(); - String expected = "{\"vnf-id\":\"key1\",\"port-groups\":{\"port-group\":[{\"interface-id\":\"key2\",\"cvlan-tags\":{\"cvlan-tag-entry\":[{\"cvlan-tag\":655}]}}]}}"; - String topEntity = "vce"; - String entity = "cvlan-tag"; - - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - - } - - /** - * No list object. - * - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws AAIException the AAI exception - */ - @Test - @Ignore - public void noListObject() throws IllegalArgumentException, UnsupportedEncodingException, AAIException { - URI uri = UriBuilder.fromPath("/aai/v6/network/vpls-pes/vpls-pe/0e6189fd-9257-49b9-a3be-d7ba980ccfc9/lag-interfaces/lag-interface/8ae5aa76-d597-4382-b219-04f266fe5e37/l-interfaces/l-interface/9e141d03-467b-437f-b4eb-b3133ec1e205/l3-interface-ipv4-address-list/8f19f0ea-a81f-488e-8d5c-9b7b53696c11").build(); - URIToObject parse = new URIToObject(loader, uri); - Introspector result = parse.getTopEntity(); - String topEntity = "vpls-pe"; - String entity = "l3-interface-ipv4-address-list"; - String expected = "{\"equipment-name\":\"0e6189fd-9257-49b9-a3be-d7ba980ccfc9\",\"lag-interfaces\":{\"lag-interface\":[{\"interface-name\":\"8ae5aa76-d597-4382-b219-04f266fe5e37\",\"l-interfaces\":{\"l-interface\":[{\"interface-name\":\"9e141d03-467b-437f-b4eb-b3133ec1e205\",\"l3-interface-ipv4-address-list\":[{\"l3-interface-ipv4-address\":\"8f19f0ea-a81f-488e-8d5c-9b7b53696c11\"}]}]}}]}}"; - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - - } - - @Test - public void relativePath() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("./l-interfaces/l-interface/key1").build(); - URIToObject parse = new URIToObject(loader, uri); - Introspector result = parse.getEntity(); - String expected = "{\"interface-name\":\"key1\"}"; - - String topEntity = "l-interface"; - String entity = "l-interface"; - - testSet(result.marshal(false), parse, expected, topEntity, entity, version); - - } - - /** - * Test set. - * - * @param json the json - * @param parse the parse - * @param expected the expected - * @param topEntity the top entity - * @param entity the entity - * @param version the version - */ - public void testSet(String json, URIToObject parse, String expected, String topEntity, String entity, Version version) { - assertEquals("blah", expected, json); - - assertEquals("top entity", topEntity, parse.getTopEntityName()); - - assertEquals("entity", entity, parse.getEntityName()); - - assertEquals("entity object", entity, parse.getEntity().getDbName()); - - assertEquals("parent list object", 1, parse.getParentList().size()); - - assertEquals("object version", version, parse.getObjectVersion()); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToRelationshipObjectTest.java b/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToRelationshipObjectTest.java deleted file mode 100644 index ee7b8651..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/parsers/uri/URIToRelationshipObjectTest.java +++ /dev/null @@ -1,150 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.parsers.uri; - -import org.junit.Ignore; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; - -import javax.ws.rs.core.UriBuilder; -import javax.xml.bind.JAXBException; -import java.io.UnsupportedEncodingException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; - -import static org.hamcrest.Matchers.hasProperty; -import static org.hamcrest.Matchers.is; -import static org.junit.Assert.assertTrue; - - -public class URIToRelationshipObjectTest extends AAISetup { - - private Version latest = Version.v10; - private Loader loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, latest); - - @Rule - public ExpectedException thrown = ExpectedException.none(); - - /** - * Uri. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws URISyntaxException - * @throws MalformedURLException the malformed URL exception - */ - @Test - public void uri() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { - - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); - Introspector result = parse.getResult(); - String expected = "\\{\"related-to\":\"l-interface\",\"related-link\":\"/aai/" + latest + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3\",\"relationship-data\":\\[\\{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"mycloudregionowner\"\\},\\{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"mycloudregionid\"\\},\\{\"relationship-key\":\"tenant.tenant-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"vserver.vserver-id\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"l-interface.interface-name\",\"relationship-value\":\"key3\"\\}\\]\\}"; - assertTrue("blah", result.marshal(false).matches(expected)); - - } - - /** - * Uri no version. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws URISyntaxException - * @throws MalformedURLException the malformed URL exception - */ - @Test - public void uriNoVersion() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { - URI uri = UriBuilder.fromPath("/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3").build(); - URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); - Introspector result = parse.getResult(); - String expected = "\\{\"related-to\":\"l-interface\",\"related-link\":\"/aai/" + latest + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interfaces/l-interface/key3\",\"relationship-data\":\\[\\{\"relationship-key\":\"cloud-region.cloud-owner\",\"relationship-value\":\"mycloudregionowner\"\\},\\{\"relationship-key\":\"cloud-region.cloud-region-id\",\"relationship-value\":\"mycloudregionid\"\\},\\{\"relationship-key\":\"tenant.tenant-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"vserver.vserver-id\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"l-interface.interface-name\",\"relationship-value\":\"key3\"\\}\\]\\}"; - assertTrue("blah", result.marshal(false).matches(expected)); - - - } - - /** - * Double key relationship. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws URISyntaxException - * @throws MalformedURLException the malformed URL exception - */ - @Test - public void doubleKeyRelationship() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { - URI uri = UriBuilder.fromPath("/aai/" + latest + "/cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3/").build(); - URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); - Introspector result = parse.getResult(); - String expected = "\\{\"related-to\":\"ctag-pool\",\"related-link\":\"/aai/" + latest + "/cloud-infrastructure/complexes/complex/key1/ctag-pools/ctag-pool/key2/key3\",\"relationship-data\":\\[\\{\"relationship-key\":\"complex.physical-location-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"ctag-pool.target-pe\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"ctag-pool.availability-zone-name\",\"relationship-value\":\"key3\"\\}\\]\\}"; - assertTrue("blah", result.marshal(false).matches(expected)); - - } - - /** - * Uri with non string key. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - * @throws URISyntaxException - * @throws MalformedURLException the malformed URL exception - */ - @Test - public void uriWithNonStringKey() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException, URISyntaxException { - URI uri = UriBuilder.fromPath("/aai/" + latest + "/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/144").build(); - URIToRelationshipObject parse = new URIToRelationshipObject(loader, uri); - Introspector result = parse.getResult(); - String expected = "\\{\"related-to\":\"cvlan-tag\",\"related-link\":\"/aai/" + latest + "/network/vces/vce/key1/port-groups/port-group/key2/cvlan-tags/cvlan-tag/144\",\"relationship-data\":\\[\\{\"relationship-key\":\"vce.vnf-id\",\"relationship-value\":\"key1\"\\},\\{\"relationship-key\":\"port-group.interface-id\",\"relationship-value\":\"key2\"\\},\\{\"relationship-key\":\"cvlan-tag.cvlan-tag\",\"relationship-value\":\"144\"\\}\\]\\}"; - assertTrue("blah", result.marshal(false).matches(expected)); - } - /** - * Bad URI. - * - * @throws JAXBException the JAXB exception - * @throws AAIException the AAI exception - * @throws IllegalArgumentException the illegal argument exception - * @throws UnsupportedEncodingException the unsupported encoding exception - */ - @Test - public void badURI() throws JAXBException, AAIException, IllegalArgumentException, UnsupportedEncodingException { - URI uri = UriBuilder.fromPath("/aai/" + loader.getVersion() + "/cloud-infrastructure/cloud-regions/cloud-region/mycloudregionowner/mycloudregionid/tenants/tenant/key1/vservers/vserver/key2/l-interadsfaces/l-interface/key3").build(); - - thrown.expect(AAIException.class); - thrown.expect(hasProperty("code", is("AAI_3000"))); - - URIToObject parse = new URIToObject(loader, uri); - - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/query/builder/SimplePathTest.java b/aai-core/src/test/java/org/openecomp/aai/query/builder/SimplePathTest.java deleted file mode 100644 index e57fb0e5..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/query/builder/SimplePathTest.java +++ /dev/null @@ -1,123 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.query.builder; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.T; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.junit.Before; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.serialization.db.EdgeRules; -import org.openecomp.aai.serialization.db.EdgeType; - -import java.util.List; - -import static org.junit.Assert.assertTrue; - -public class SimplePathTest extends AAISetup { - - public Loader loader; - - @Before - public void setup() throws Exception { - loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, Version.getLatest()); - } - - private QueryBuilder buildTestQuery(QueryBuilder qb) throws AAIException { - return qb.createEdgeTraversal(EdgeType.TREE, "generic-vnf", "l-interface") - .until(qb.newInstance().getVerticesByProperty("aai-node-type", "generic-vnf")) - .repeat(qb.newInstance().union( - qb.newInstance().createEdgeTraversal(EdgeType.TREE, "generic-vnf", "l-interface"), - qb.newInstance().createEdgeTraversal(EdgeType.TREE, "l-interface", "generic-vnf"), - qb.newInstance().createEdgeTraversal(EdgeType.COUSIN, "l-interface", "logical-link"), - qb.newInstance().createEdgeTraversal(EdgeType.COUSIN, "logical-link", "l-interface") - ).simplePath()) - .store("x").cap("x").unfold().dedup(); - } - - private GraphTraversalSource setupGraph() throws AAIException{ - Graph graph = TinkerGraph.open(); - GraphTraversalSource g = graph.traversal(); - EdgeRules rules = EdgeRules.getInstance(); - - Vertex gvnf1 = graph.addVertex(T.label, "generic-vnf", T.id, "00", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf1", "vnf-name", "genvnfname1", "nf-type", "sample-nf-type"); - - Vertex lint1 = graph.addVertex(T.label, "l-interface", T.id, "10", "aai-node-type", "l-interface", - "interface-name", "lint1", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex loglink1 = graph.addVertex(T.label, "logical-link", T.id, "20", "aai-node-type", "logical-link", - "link-name", "loglink1", "in-maint", "false", "link-type", "sausage"); - - Vertex lint2 = graph.addVertex(T.label, "l-interface", T.id, "11", "aai-node-type", "l-interface", - "interface-name", "lint2", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex loglink2 = graph.addVertex(T.label, "logical-link", T.id, "21", "aai-node-type", "logical-link", - "link-name", "loglink2", "in-maint", "false", "link-type", "sausage"); - - Vertex lint3 = graph.addVertex(T.label, "l-interface", T.id, "12", "aai-node-type", "l-interface", - "interface-name", "lint3", "is-port-mirrored", "true", "in-maint", "true", "is-ip-unnumbered", "false"); - - Vertex gvnf2 = graph.addVertex(T.label, "generic-vnf", T.id, "01", "aai-node-type", "generic-vnf", - "vnf-id", "gvnf2", "vnf-name", "genvnfname2", "nf-type", "sample-nf-type"); - - rules.addTreeEdge(g, gvnf1, lint1); - rules.addEdge(g, lint1, loglink1); - rules.addEdge(g, loglink1, lint2); - rules.addEdge(g, lint2, loglink2); - rules.addEdge(g, loglink2, lint3); - rules.addTreeEdge(g, gvnf2, lint3); - - return g; - } - - @Test - public void gremlinQueryTest() throws AAIException { - GraphTraversalSource g = setupGraph(); - List expected = g.V("01").toList(); - Vertex start = g.V("00").toList().get(0); - - GremlinTraversal qb = new GremlinTraversal<>(loader, g, start); - QueryBuilder q = buildTestQuery(qb); - List results = q.toList(); - assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); - } - - @Test - public void traversalQueryTest() throws AAIException { - GraphTraversalSource g = setupGraph(); - List expected = g.V("01").toList(); - Vertex start = g.V("00").toList().get(0); - - TraversalQuery qb = new TraversalQuery<>(loader, g, start); - QueryBuilder q = buildTestQuery(qb); - List results = q.toList(); - assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/query/builder/TraversalQueryTest.java b/aai-core/src/test/java/org/openecomp/aai/query/builder/TraversalQueryTest.java deleted file mode 100644 index f8418bd1..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/query/builder/TraversalQueryTest.java +++ /dev/null @@ -1,101 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.query.builder; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.mockito.Mock; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; - -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; - -import static org.junit.Assert.assertEquals; - -public class TraversalQueryTest extends AAISetup { - - private Loader loader; - - @Mock - private GraphTraversalSource g; - - @Before - public void configure() throws Exception { - loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); - } - - @Test - public void unionQuery() { - TraversalQuery tQ = new TraversalQuery<>(loader, g); - TraversalQuery tQ2 = new TraversalQuery<>(loader, g); - TraversalQuery tQ3 = new TraversalQuery<>(loader, g); - tQ.union( - tQ2.getVerticesByProperty("test1", "value1"), - tQ3.getVerticesByIndexedProperty("test2", "value2")); - - GraphTraversal expected = __.start() - .union(__.has("test1", "value1"),__.has("test2", "value2")); - - assertEquals("they are equal", expected, tQ.getQuery()); - - } - - @Ignore - @Test - public void traversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException { - TraversalQuery tQ = new TraversalQuery<>(loader, g); - QueryBuilder builder = tQ.createQueryFromURI(new URI("network/test-objects/test-object/key1")).getQueryBuilder(); - GraphTraversal expected = __.start().has("vnf-id", "key1").has("aai-node-type", "test-object"); - GraphTraversal containerExpected = __.start().has("aai-node-type", "test-object"); - - assertEquals("query object", expected.toString(), builder.getQuery().toString()); - assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString()); - - } - - @Ignore - @Test - public void nestedTraversalClones() throws UnsupportedEncodingException, AAIException, URISyntaxException { - - TraversalQuery tQ = new TraversalQuery<>(loader, g); - QueryBuilder builder = tQ.createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1/l-interfaces/l-interface/key2")).getQueryBuilder(); - GraphTraversal expected = __.start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf").out("hasLInterface").has(AAIProperties.NODE_TYPE, "l-interface").has("interface-name", "key2"); - GraphTraversal containerExpected = __.start().has("vnf-id", "key1").has("aai-node-type", "generic-vnf").out("hasLInterface").has(AAIProperties.NODE_TYPE, "l-interface"); - - assertEquals("query object", expected.toString(), builder.getQuery().toString()); - assertEquals("container query object", containerExpected.toString(), builder.getContainerQuery().getQuery().toString()); - - } - - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/query/builder/UntilTest.java b/aai-core/src/test/java/org/openecomp/aai/query/builder/UntilTest.java deleted file mode 100644 index b6c6025a..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/query/builder/UntilTest.java +++ /dev/null @@ -1,112 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.query.builder; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.T; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.junit.Before; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.serialization.db.EdgeRules; -import org.openecomp.aai.serialization.db.EdgeType; - -import java.util.ArrayList; -import java.util.List; - -import static org.junit.Assert.assertTrue; - -public class UntilTest extends AAISetup { - - private Loader loader; - - @Before - public void setup() throws Exception { - loader = LoaderFactory.createLoaderForVersion(ModelType.MOXY, AAIProperties.LATEST); - } - - private QueryBuilder buildTestQuery(QueryBuilder qb) throws AAIException{ - return qb.until(qb.newInstance().getVerticesByProperty("aai-node-type", "l-interface")).repeat( - qb.newInstance().union( - qb.newInstance().createEdgeTraversal(EdgeType.TREE, "cloud-region", "tenant"), - qb.newInstance().createEdgeTraversal(EdgeType.TREE, "tenant", "vserver"), - qb.newInstance().createEdgeTraversal(EdgeType.TREE, "vserver", "l-interface") - )).store("x").cap("x").unfold().dedup(); - } - - @Test - public void gremlinQueryUntilTest() throws AAIException { - Graph graph = TinkerGraph.open(); - EdgeRules rules = EdgeRules.getInstance(); - GraphTraversalSource g = graph.traversal(); - - Vertex v1 = graph.addVertex(T.id, 1, "aai-node-type", "cloud-region"); - Vertex v2 = graph.addVertex(T.id, 2, "aai-node-type", "tenant"); - Vertex v3 = graph.addVertex(T.id, 3, "aai-node-type", "vserver"); - Vertex v4 = graph.addVertex(T.id, 4, "aai-node-type", "l-interface"); - rules.addTreeEdge(g, v1, v2); - rules.addTreeEdge(g, v2, v3); - rules.addTreeEdge(g, v3, v4); - List expected = new ArrayList<>(); - expected.add(v4); - - GremlinTraversal qb = new GremlinTraversal<>(loader, g, v1); - QueryBuilder q = buildTestQuery(qb); - - List results = q.toList(); - - assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); - } - - @Test - public void traversalQueryUntilTest() throws AAIException { - Graph graph = TinkerGraph.open(); - EdgeRules rules = EdgeRules.getInstance(); - GraphTraversalSource g = graph.traversal(); - - Vertex v1 = graph.addVertex(T.id, 1, "aai-node-type", "cloud-region"); - Vertex v2 = graph.addVertex(T.id, 2, "aai-node-type", "tenant"); - Vertex v3 = graph.addVertex(T.id, 3, "aai-node-type", "vserver"); - Vertex v4 = graph.addVertex(T.id, 4, "aai-node-type", "l-interface"); - rules.addTreeEdge(g, v1, v2); - rules.addTreeEdge(g, v2, v3); - rules.addTreeEdge(g, v3, v4); - List expected = new ArrayList<>(); - expected.add(v4); - - TraversalQuery qb = new TraversalQuery<>(loader, g, v1); - QueryBuilder q = buildTestQuery(qb); - - List results = q.toList(); - - assertTrue("results match", expected.containsAll(results) && results.containsAll(expected)); - } - - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/db/DbAliasTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/db/DbAliasTest.java deleted file mode 100644 index d4793939..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/db/DbAliasTest.java +++ /dev/null @@ -1,132 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.db; - -import com.thinkaurelius.titan.core.TitanFactory; -import com.thinkaurelius.titan.core.TitanGraph; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.dbmap.DBConnectionType; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.*; -import org.openecomp.aai.parsers.query.QueryParser; -import org.openecomp.aai.schema.enums.PropertyMetadata; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import java.io.UnsupportedEncodingException; -import java.lang.reflect.InvocationTargetException; -import java.net.MalformedURLException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.Collections; -import java.util.Map; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -public class DbAliasTest extends AAISetup { - - private TitanGraph graph; - - private final Version version = Version.v9; - private final ModelType introspectorFactoryType = ModelType.MOXY; - private final QueryStyle queryStyle = QueryStyle.TRAVERSAL; - private final DBConnectionType type = DBConnectionType.REALTIME; - private Loader loader; - private TransactionalGraphEngine dbEngine; - - @Before - public void setup() throws Exception { - graph = TitanFactory.build().set("storage.backend","inmemory").open(); - loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); - dbEngine = new TitanDBEngine( - queryStyle, - type, - loader); - } - - @After - public void tearDown() { - graph.tx().rollback(); - graph.close(); - } - - @Test - public void checkOnWrite() throws AAIException, UnsupportedEncodingException, URISyntaxException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, InterruptedException { - final String property = "persona-model-customization-id"; - String dbPropertyName = property; - TransactionalGraphEngine spy = spy(this.dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - QueryParser uriQuery = spy.getQueryBuilder().createQueryFromURI(new URI("network/generic-vnfs/generic-vnf/key1")); - Introspector obj = loader.introspectorFromName("generic-vnf"); - Vertex v = g.addVertex(); - Object id = v.id(); - obj.setValue("vnf-id", "key1"); - obj.setValue(property, "hello"); - serializer.serializeToDb(obj, v, uriQuery, "", ""); - g.tx().commit(); - v = graph.traversal().V(id).next(); - Map map = obj.getPropertyMetadata(property); - if (map.containsKey(PropertyMetadata.DB_ALIAS)) { - dbPropertyName = map.get(PropertyMetadata.DB_ALIAS); - } - - assertEquals("dbAlias is ", "model-customization-id", dbPropertyName); - assertEquals("dbAlias property exists", "hello", v.property(dbPropertyName).orElse("")); - assertEquals("model property does not", "missing", v.property(property).orElse("missing")); - - } - - @Test - public void checkOnRead() throws AAIException, UnsupportedEncodingException, URISyntaxException, SecurityException, IllegalAccessException, IllegalArgumentException, InvocationTargetException, InstantiationException, NoSuchMethodException, InterruptedException, MalformedURLException { - final String property = "persona-model-customization-id"; - - TransactionalGraphEngine spy = spy(dbEngine); - TransactionalGraphEngine.Admin adminSpy = spy(dbEngine.asAdmin()); - Vertex v = graph.traversal().addV("vnf-id", "key1", "model-customization-id", "hello").next(); - graph.tx().commit(); - Graph g = graph.newTransaction(); - GraphTraversalSource traversal = g.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - Introspector obj = loader.introspectorFromName("generic-vnf"); - serializer.dbToObject(Collections.singletonList(v), obj, 0, true, "false"); - - assertEquals("dbAlias property exists", "hello", obj.getValue(property)); - - } - - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/db/DbSerializerTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/db/DbSerializerTest.java deleted file mode 100644 index b30c9367..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/db/DbSerializerTest.java +++ /dev/null @@ -1,440 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.db; - -import com.thinkaurelius.titan.core.TitanFactory; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Edge; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.junit.After; -import org.junit.Before; -import org.junit.Rule; -import org.junit.Test; -import org.junit.rules.ExpectedException; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.dbmap.DBConnectionType; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Introspector; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; - -import static org.junit.Assert.*; -import static org.mockito.Mockito.spy; -import static org.mockito.Mockito.when; - -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; - -public class DbSerializerTest extends AAISetup { - - //to use, set thrown.expect to whatever your test needs - //this line establishes default of expecting no exception to be thrown - @Rule - public ExpectedException thrown = ExpectedException.none(); - - protected Graph graph; - protected final EdgeRules rules = EdgeRules.getInstance(); - - private final Version version = Version.getLatest(); - private final ModelType introspectorFactoryType = ModelType.MOXY; - private final QueryStyle queryStyle = QueryStyle.TRAVERSAL; - private final DBConnectionType type = DBConnectionType.REALTIME; - private Loader loader; - private TransactionalGraphEngine dbEngine; - private TransactionalGraphEngine engine; //for tests that aren't mocking the engine - private DBSerializer dbser; - TransactionalGraphEngine spy; - TransactionalGraphEngine.Admin adminSpy; - - @Before - public void setup() throws Exception { - graph = TitanFactory.build().set("storage.backend", "inmemory").open(); - loader = LoaderFactory.createLoaderForVersion(introspectorFactoryType, version); - dbEngine = new TitanDBEngine(queryStyle, type, loader); - spy = spy(dbEngine); - adminSpy = spy(dbEngine.asAdmin()); - - createGraph(); - - engine = new TitanDBEngine(queryStyle, type, loader); - dbser = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST"); - } - - public void createGraph() throws AAIException { - /* - * This setus up the test graph, For future junits , add more vertices - * and edges - */ - - Vertex l3interipv4addresslist_1 = graph.traversal().addV("aai-node-type", "l3-interface-ipv4-address-list", - "l3-interface-ipv4-address", "l3-interface-ipv4-address-1").next(); - Vertex subnet_2 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-2").next(); - Vertex l3interipv6addresslist_3 = graph.traversal().addV("aai-node-type", "l3-interface-ipv6-address-list", - "l3-interface-ipv6-address", "l3-interface-ipv6-address-3").next(); - Vertex subnet_4 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-4").next(); - Vertex subnet_5 = graph.traversal().addV("aai-node-type", "subnet", "subnet-id", "subnet-id-5").next(); - Vertex l3network_6 = graph.traversal() - .addV("aai-node-type", "l3-network", "network-id", "network-id-6", "network-name", "network-name-6") - .next(); - - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, l3interipv4addresslist_1, subnet_2); - rules.addEdge(g, l3interipv6addresslist_3, subnet_4); - rules.addTreeEdge(g, subnet_5, l3network_6); - - } - - @After - public void tearDown() throws Exception { - graph.close(); - } - - @Test - public void subnetDelwithInEdgesIpv4Test() throws AAIException { - String expected_message = "Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types [l3-interface-ipv4-address-list]"; - - /* - * This subnet has in-edges with l3-ipv4 and NOT ok to delete - */ - Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-2").next(); - - String exceptionMessage = testDelete(subnet); - assertEquals(expected_message, exceptionMessage); - - } - - @Test - public void subnetDelwithInEdgesIpv6Test() throws AAIException { - String expected_message = "Object is being reference by additional objects preventing it from being deleted. Please clean up references from the following types [l3-interface-ipv6-address-list]"; - - /* - * This subnet has in-edges with l3-ipv6 and NOT ok to delete - */ - Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-4").next(); - String exceptionMessage = testDelete(subnet); - assertEquals(expected_message, exceptionMessage); - - } - - @Test - public void subnetDelwithInEdgesL3network() throws AAIException { - String expected_message = ""; - - /* - * This subnet has in-edges with l3-network and ok to delete - */ - Vertex subnet = graph.traversal().V().has("aai-node-type", "subnet").has("subnet-id", "subnet-id-5").next(); - - String exceptionMessage = testDelete(subnet); - assertEquals(expected_message, exceptionMessage); - - } - - public String testDelete(Vertex v) throws AAIException { - - // Graph g_tx = graph.newTransaction(); - GraphTraversalSource traversal = graph.traversal(); - when(spy.asAdmin()).thenReturn(adminSpy); - when(adminSpy.getTraversalSource()).thenReturn(traversal); - when(adminSpy.getReadOnlyTraversalSource()).thenReturn(traversal); - - String exceptionMessage = ""; - DBSerializer serializer = new DBSerializer(version, spy, introspectorFactoryType, "AAI_TEST"); - try { - serializer.delete(v, "resourceVersion", false); - } catch (AAIException exception) { - exceptionMessage = exception.getMessage(); - - } - return exceptionMessage; - - } - - @Test - public void createNewVertexTest() throws AAIException { - engine.startTransaction(); - - Introspector testObj = loader.introspectorFromName("generic-vnf"); - - Vertex testVertex = dbser.createNewVertex(testObj); - Vertex fromGraph = engine.tx().traversal().V().has("aai-node-type","generic-vnf").toList().get(0); - assertEquals(testVertex.id(), fromGraph.id()); - assertEquals("AAI-TEST", fromGraph.property(AAIProperties.SOURCE_OF_TRUTH.toString()).value()); - engine.rollback(); - } - - @Test - public void touchStandardVertexPropertiesTest() throws AAIException, InterruptedException { - engine.startTransaction(); - DBSerializer dbser2 = new DBSerializer(Version.getLatest(), engine, introspectorFactoryType, "AAI-TEST-2"); - - Graph graph = TinkerGraph.open(); - Vertex vert = graph.addVertex("aai-node-type", "generic-vnf"); - - dbser.touchStandardVertexProperties(vert, true); - String resverStart = (String)vert.property(AAIProperties.RESOURCE_VERSION.toString()).value(); - String lastModTimeStart = (String)vert.property(AAIProperties.LAST_MOD_TS.toString()).value(); - - Thread.sleep(10); //bc the resource version is set based on current time in milliseconds, - //if this test runs through too fast the value may not change - //causing the test to fail. sleeping ensures a different value - - dbser2.touchStandardVertexProperties(vert, false); - assertFalse(resverStart.equals((String)vert.property(AAIProperties.RESOURCE_VERSION.toString()).value())); - assertFalse(lastModTimeStart.equals((String)vert.property(AAIProperties.LAST_MOD_TS.toString()).value())); - assertEquals("AAI-TEST-2", (String)vert.property(AAIProperties.LAST_MOD_SOURCE_OF_TRUTH.toString()).value()); - engine.rollback(); - } - - @Test - public void verifyResourceVersion_SunnyDayTest() throws AAIException { - engine.startTransaction(); - - assertTrue(dbser.verifyResourceVersion("delete", "vnfc", "abc", "abc", "vnfcs/vnfc/vnfcId")); - engine.rollback(); - } - - @Test - public void verifyResourceVersion_CreateWithRVTest() throws AAIException { - engine.startTransaction(); - - thrown.expect(AAIException.class); - thrown.expectMessage("resource-version passed for create of generic-vnfs/generic-vnf/myid"); - try { - dbser.verifyResourceVersion("create", "generic-vnf", null, "old-res-ver", "generic-vnfs/generic-vnf/myid"); - } finally { - engine.rollback(); - } - } - - @Test - public void verifyResourceVersion_MissingRVTest() throws AAIException { - engine.startTransaction(); - - thrown.expect(AAIException.class); - thrown.expectMessage("resource-version not passed for update of generic-vnfs/generic-vnf/myid"); - try { - dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", null, "generic-vnfs/generic-vnf/myid"); - } finally { - engine.rollback(); - } - } - - @Test - public void verifyResourceVersion_MismatchRVTest() throws AAIException { - engine.startTransaction(); - - thrown.expect(AAIException.class); - thrown.expectMessage("resource-version MISMATCH for update of generic-vnfs/generic-vnf/myid"); - try { - dbser.verifyResourceVersion("update", "generic-vnf", "current-res-ver", "old-res-ver", "generic-vnfs/generic-vnf/myid"); - } finally { - engine.rollback(); - } - } - - @Test - public void trimClassNameTest() throws AAIException { - assertEquals("GenericVnf", dbser.trimClassName("GenericVnf")); - assertEquals("GenericVnf", dbser.trimClassName("org.onap.aai.GenericVnf")); - } - - @Test - public void getURIForVertexTest() throws AAIException, URISyntaxException, UnsupportedEncodingException { - engine.startTransaction(); - - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); - Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); - EdgeRules rules = EdgeRules.getInstance(); - rules.addTreeEdge(engine.tx().traversal(), cr, ten); - - URI compare = new URI("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453"); - assertEquals(compare, dbser.getURIForVertex(ten)); - - cr.property("aai-node-type").remove(); - URI compareFailure = new URI("/unknown-uri"); - assertEquals(compareFailure, dbser.getURIForVertex(ten)); - engine.rollback(); - } - - @Test - public void getVertexPropertiesTest() throws AAIException, UnsupportedEncodingException { - engine.startTransaction(); - - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); - - Introspector crIntro = dbser.getVertexProperties(cr); - assertEquals("cloud-region", crIntro.getDbName()); - assertEquals("me", crIntro.getValue("cloud-owner")); - assertEquals("123", crIntro.getValue("cloud-region-id")); - engine.rollback(); - } - - @Test - public void setCachedURIsTest() throws AAIException, UnsupportedEncodingException, URISyntaxException { - engine.startTransaction(); - - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); - Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); - Vertex vs = engine.tx().addVertex("aai-node-type", "vserver", "vserver-id", "vs1", - AAIProperties.AAI_URI.toString(), - "/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1"); - EdgeRules rules = EdgeRules.getInstance(); - rules.addTreeEdge(engine.tx().traversal(), cr, ten); - rules.addTreeEdge(engine.tx().traversal(), ten, vs); - - List vertices = new ArrayList(Arrays.asList(cr, ten, vs)); - Introspector crIn = dbser.getVertexProperties(cr); - Introspector tenIn = dbser.getVertexProperties(ten); - Introspector vsIn = dbser.getVertexProperties(vs); - List intros = new ArrayList(Arrays.asList(crIn, tenIn, vsIn)); - - dbser.setCachedURIs(vertices, intros); - - assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123", - (String)cr.property(AAIProperties.AAI_URI.toString()).value()); - assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453", - (String)ten.property(AAIProperties.AAI_URI.toString()).value()); - assertEquals("/cloud-infrastructure/cloud-regions/cloud-region/me/123/tenants/tenant/453/vservers/vserver/vs1", - (String)vs.property(AAIProperties.AAI_URI.toString()).value()); - engine.rollback(); - } - - @Test - public void getEdgeBetweenTest() throws AAIException { - engine.startTransaction(); - - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); - Vertex ten = engine.tx().addVertex("aai-node-type", "tenant", "tenant-id", "453"); - EdgeRules rules = EdgeRules.getInstance(); - rules.addTreeEdge(engine.tx().traversal(), cr, ten); - - Edge e = dbser.getEdgeBetween(EdgeType.TREE, ten, cr); - assertEquals("has", e.label()); - engine.rollback(); - } - - @Test - public void deleteEdgeTest() throws AAIException, UnsupportedEncodingException { - engine.startTransaction(); - - Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf"); - Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name"); - EdgeRules rules = EdgeRules.getInstance(); - rules.addEdge(engine.tx().traversal(), gvnf, vnfc); - - Introspector relData = loader.introspectorFromName("relationship-data"); - relData.setValue("relationship-key", "vnfc.vnfc-name"); - relData.setValue("relationship-value", "a-name"); - Introspector relationship = loader.introspectorFromName("relationship"); - relationship.setValue("related-to", "vnfc"); - relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name"); - relationship.setValue("relationship-data",relData); - - assertTrue(dbser.deleteEdge(relationship, gvnf)); - - assertFalse(engine.tx().traversal().V(gvnf).both("uses").hasNext()); - assertFalse(engine.tx().traversal().V(vnfc).both("uses").hasNext()); - engine.rollback(); - } - - @Test - public void createEdgeTest() throws AAIException, UnsupportedEncodingException { - engine.startTransaction(); - - Vertex gvnf = engine.tx().addVertex("aai-node-type","generic-vnf","vnf-id","myvnf"); - Vertex vnfc = engine.tx().addVertex("aai-node-type","vnfc","vnfc-name","a-name"); - - //sunny day case - Introspector relData = loader.introspectorFromName("relationship-data"); - relData.setValue("relationship-key", "vnfc.vnfc-name"); - relData.setValue("relationship-value", "a-name"); - Introspector relationship = loader.introspectorFromName("relationship"); - relationship.setValue("related-to", "vnfc"); - relationship.setValue("related-link", "/network/vnfcs/vnfc/a-name"); - relationship.setValue("relationship-data",relData); - - assertTrue(dbser.createEdge(relationship, gvnf)); - assertTrue(engine.tx().traversal().V(gvnf).both("uses").hasNext()); - assertTrue(engine.tx().traversal().V(vnfc).both("uses").hasNext()); - - //rainy day case, edge to nonexistant object - Introspector relData2 = loader.introspectorFromName("relationship-data"); - relData2.setValue("relationship-key", "vnfc.vnfc-name"); - relData2.setValue("relationship-value", "b-name"); - Introspector relationship2 = loader.introspectorFromName("relationship"); - relationship2.setValue("related-to", "vnfc"); - relationship2.setValue("related-link", "/network/vnfcs/vnfc/b-name"); - relationship2.setValue("relationship-data",relData2); - - thrown.expect(AAIException.class); - thrown.expectMessage("Node of type vnfc. Could not find object at: /network/vnfcs/vnfc/b-name"); - try { - dbser.createEdge(relationship2, gvnf); - } finally { - engine.rollback(); - } - } - - @Test - public void serializeSingleVertexTopLevelTest() throws AAIException, UnsupportedEncodingException { - engine.startTransaction(); - - Introspector gvnf = loader.introspectorFromName("generic-vnf"); - Vertex gvnfVert = dbser.createNewVertex(gvnf); - - gvnf.setValue("vnf-id", "myvnf"); - dbser.serializeSingleVertex(gvnfVert, gvnf, "test"); - assertTrue(engine.tx().traversal().V().has("aai-node-type","generic-vnf").has("vnf-id","myvnf").hasNext()); - engine.rollback(); - } - - @Test - public void serializeSingleVertexChildTest() throws AAIException, UnsupportedEncodingException { - engine.startTransaction(); - - Vertex cr = engine.tx().addVertex("aai-node-type", "cloud-region", "cloud-owner", "me", "cloud-region-id", "123"); - Introspector tenIn = loader.introspectorFromName("tenant"); - Vertex ten = dbser.createNewVertex(tenIn); - EdgeRules rules = EdgeRules.getInstance(); - rules.addTreeEdge(engine.tx().traversal(), cr, ten); - - tenIn.setValue("tenant-id", "453"); - tenIn.setValue("tenant-name", "mytenant"); - - dbser.serializeSingleVertex(ten, tenIn, "test"); - - assertTrue(engine.tx().traversal().V().has("aai-node-type","tenant").has("tenant-id","453").has("tenant-name","mytenant").hasNext()); - engine.rollback(); - } -} \ No newline at end of file diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgePropertyMapTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgePropertyMapTest.java deleted file mode 100644 index fb3c0469..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgePropertyMapTest.java +++ /dev/null @@ -1,43 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.db; - -import org.junit.Test; - -import java.util.Map; - -import static org.junit.Assert.assertEquals; - -public class EdgePropertyMapTest { - - @Test - public void run() { - Map map = new EdgePropertyMap<>(); - map.put("direction", "OUT"); - map.put("test", "hello"); - map.put("isParent", "${direction}"); - map.put("SVC-INFRA", "!${direction}"); - - assertEquals("normal retrieval", "hello", map.get("test")); - assertEquals("variable retrieval", "OUT", map.get("isParent")); - assertEquals("negate variable retrieval", "IN", map.get("SVC-INFRA")); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgeRulesTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgeRulesTest.java deleted file mode 100644 index 0257e6b1..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/db/EdgeRulesTest.java +++ /dev/null @@ -1,237 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.db; - - -import org.apache.tinkerpop.gremlin.structure.Direction; -import org.junit.Test; -import org.openecomp.aai.AAISetup; -import static org.junit.Assert.assertEquals; - -import java.util.Map; -import java.util.Set; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.T; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.junit.Rule; -import org.junit.rules.ExpectedException; - -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.serialization.db.exceptions.EdgeMultiplicityException; -import org.openecomp.aai.serialization.db.exceptions.NoEdgeRuleFoundException; - -import com.google.common.collect.Multimap; - -public class EdgeRulesTest extends AAISetup { - - //set thrown.expect to whatever a specific test needs - //this establishes a default of expecting no exceptions to be thrown - @Rule - public ExpectedException thrown = ExpectedException.none(); - - @Test - public void verifyOutDirection() throws AAIException, NoEdgeRuleFoundException { - EdgeRules rules = EdgeRules.getInstance(); - EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, "cloud-region", "flavor"); - - assertEquals("out direction", rule.getDirection(), Direction.OUT); - } - - @Test - public void verifyOutFlippedDirection() throws AAIException, NoEdgeRuleFoundException { - EdgeRules rules = EdgeRules.getInstance(); - EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, "flavor", "cloud-region"); - - assertEquals("in direction", rule.getDirection(), Direction.IN); - } - - @Test - public void verifyInDirection() throws AAIException, NoEdgeRuleFoundException { - EdgeRules rules = EdgeRules.getInstance(); - EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "model-ver", "model-element"); - - assertEquals("in direction", rule.getDirection(), Direction.IN); - } - - @Test - public void verifyInFlippedDirection() throws AAIException, NoEdgeRuleFoundException { - EdgeRules rules = EdgeRules.getInstance(); - EdgeRule rule = rules.getEdgeRule(EdgeType.COUSIN, "model-element", "model-ver"); - - assertEquals("out direction", rule.getDirection(), Direction.OUT); - } - @Test - public void verifyMultipleGet() throws AAIException { - EdgeRules rules = EdgeRules.getInstance(); - Map ruleMap = rules.getEdgeRules("model-element", "model-ver"); - assertEquals("has isA rule", "isA", ruleMap.get("isA").getLabel()); - assertEquals("has startsWith rule", "startsWith", ruleMap.get("startsWith").getLabel()); - } - - @Test - public void verifyMultipleGetSingleRule() throws AAIException { - EdgeRules rules = EdgeRules.getInstance(); - Map ruleMap = rules.getEdgeRules("availability-zone", "complex"); - assertEquals("has groupsResourcesIn rule", "groupsResourcesIn", ruleMap.get("groupsResourcesIn").getLabel()); - } - - @Test - public void verifyOldEdgeRule() throws AAIException, ClassNotFoundException, IllegalArgumentException, IllegalAccessException, NoSuchFieldException, SecurityException { - assertEquals(true, EdgeRules.getInstance().hasEdgeRule("model-element", "model-ver")); - assertEquals(true, EdgeRules.getInstance(Version.v8).hasEdgeRule("pserver", "complex")); - assertEquals(false, EdgeRules.getInstance(Version.v8).hasEdgeRule("model-element", "model-ver")); - } - - @Test - public void hasEdgeRuleVertexTest() { - Graph graph = TinkerGraph.open(); - Vertex v1 = graph.addVertex("aai-node-type", "cloud-region"); - Vertex v2 = graph.addVertex("aai-node-type", "tenant"); - assertEquals(true, EdgeRules.getInstance().hasEdgeRule(v1, v2)); - } - - @Test - public void getEdgeRuleByTypeAndVertices() throws AAIException { - Graph graph = TinkerGraph.open(); - Vertex v1 = graph.addVertex("aai-node-type", "cloud-region"); - Vertex v2 = graph.addVertex("aai-node-type", "tenant"); - EdgeRules rules = EdgeRules.getInstance(); - EdgeRule rule = rules.getEdgeRule(EdgeType.TREE, v1, v2); - assertEquals(true, "OUT".equalsIgnoreCase(rule.getContains())); - assertEquals(true, "NONE".equalsIgnoreCase(rule.getDeleteOtherV())); - assertEquals(true, MultiplicityRule.ONE2MANY.equals(rule.getMultiplicityRule())); - assertEquals(true, "IN".equalsIgnoreCase(rule.getServiceInfrastructure())); - assertEquals(true, "OUT".equalsIgnoreCase(rule.getPreventDelete())); - } - - @Test - public void addTreeEdgeTest() throws AAIException { - Graph graph = TinkerGraph.open(); - Vertex v1 = graph.addVertex(T.id, "1", "aai-node-type", "cloud-region"); - Vertex v2 = graph.addVertex(T.id, "10", "aai-node-type", "tenant"); - EdgeRules rules = EdgeRules.getInstance(); - GraphTraversalSource g = graph.traversal(); - rules.addTreeEdge(g, v1, v2); - assertEquals(true, g.V(v1).out("has").has("aai-node-type", "tenant").hasNext()); - - Vertex v3 = graph.addVertex(T.id, "2", "aai-node-type", "cloud-region"); - assertEquals(null, rules.addTreeEdgeIfPossible(g, v3, v2)); - } - - @Test - public void addCousinEdgeTest() throws AAIException { - Graph graph = TinkerGraph.open(); - Vertex v1 = graph.addVertex(T.id, "1", "aai-node-type", "flavor"); - Vertex v2 = graph.addVertex(T.id, "10", "aai-node-type", "vserver"); - EdgeRules rules = EdgeRules.getInstance(Version.getLatest()); - GraphTraversalSource g = graph.traversal(); - rules.addEdge(g, v1, v2); - assertEquals(true, g.V(v2).out("hasFlavor").has("aai-node-type", "flavor").hasNext()); - - Vertex v3 = graph.addVertex(T.id, "2", "aai-node-type", "flavor"); - assertEquals(null, rules.addEdgeIfPossible(g, v3, v2)); - } - - @Test - public void multiplicityViolationTest() throws AAIException { - thrown.expect(EdgeMultiplicityException.class); - thrown.expectMessage("multiplicity rule violated: only one edge can exist with label: uses between vf-module and volume-group"); - - Graph graph = TinkerGraph.open(); - Vertex v1 = graph.addVertex(T.id, "1", "aai-node-type", "vf-module"); - Vertex v2 = graph.addVertex(T.id, "10", "aai-node-type", "volume-group"); - EdgeRules rules = EdgeRules.getInstance(Version.getLatest()); - GraphTraversalSource g = graph.traversal(); - - rules.addEdge(g, v2, v1); - Vertex v3 = graph.addVertex(T.id, "3", "aai-node-type", "vf-module"); - rules.addEdge(g, v2, v3); - } - - @Test - public void getChildrenTest() { - EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json"); - Set children = rules.getChildren("foo"); - assertEquals(2, children.size()); - boolean sawBazRule = false; - boolean sawQuuxRule = false; - for (EdgeRule r : children) { - if ("isVeryHappyAbout".equals(r.getLabel())) { - sawBazRule = true; - } else if ("dancesWith".equals(r.getLabel())) { - sawQuuxRule = true; - } - } - assertEquals(true, sawBazRule && sawQuuxRule); - } - - @Test - public void getAllRulesTest() { - EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test.json"); - Multimap allRules = rules.getAllRules(); - assertEquals(3, allRules.size()); - assertEquals(true, allRules.containsKey("foo|bar")); - assertEquals(true, allRules.containsKey("foo|bar")); - assertEquals(true, allRules.containsKey("quux|foo")); - } - - @Test - public void getAllRulesMissingPropertyTest() { - EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json"); - - thrown.expect(RuntimeException.class); - thrown.expectMessage("org.openecomp.aai.exceptions.AAIException: Rule between foo and bar is missing property delete-other-v."); - rules.getAllRules(); - } - - @Test - public void getChildrenMissingPropertyTest() { - EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json"); - - thrown.expect(RuntimeException.class); - thrown.expectMessage("org.openecomp.aai.exceptions.AAIException: Rule between quux and foo is missing property SVC-INFRA."); - rules.getChildren("foo"); - } - - @Test - public void getEdgeRuleMissingPropertyTest() throws AAIException { - EdgeRules rules = EdgeRules.getInstance("/dbedgerules/DbEdgeRules_test_broken.json"); - - thrown.expect(RuntimeException.class); - thrown.expectMessage("org.openecomp.aai.exceptions.AAIException: Rule between quux and foo is missing property SVC-INFRA."); - rules.getEdgeRules("foo", "quux"); - } - - @Test - public void verifyAllRules() { - // This will cause every rule in the real json files to be verified - // so if any required properties are missing, the verification builds - // will catch it and incorrect rules can't get merged in. - for (Version v : Version.values()) { - EdgeRules rules = EdgeRules.getInstance(v); - rules.getAllRules(); - } - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/QueryFormatTestHelper.java b/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/QueryFormatTestHelper.java deleted file mode 100644 index f9a511a2..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/QueryFormatTestHelper.java +++ /dev/null @@ -1,75 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.queryformats; - -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.structure.io.IoCore; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.mockito.invocation.InvocationOnMock; -import org.mockito.stubbing.Answer; -import org.openecomp.aai.db.props.AAIProperties; -import org.openecomp.aai.serialization.queryformats.exceptions.AAIFormatVertexException; -import org.openecomp.aai.serialization.queryformats.utils.UrlBuilder; - -import java.io.IOException; -import java.lang.reflect.Field; -import java.lang.reflect.Modifier; - -import static org.mockito.Matchers.isA; -import static org.mockito.Mockito.when; - -public class QueryFormatTestHelper { - - - public static final String testResources = "src/test/resources/org/openecomp/aai/serialization/queryformats/"; - public static final String graphsonResources = "src/test/resources/org/openecomp/aai/serialization/queryformats/graphson/"; - - - public static void mockPathed(UrlBuilder mock) throws AAIFormatVertexException { - Answer answer = new Answer() { - public String answer(InvocationOnMock invocation) throws Throwable { - Vertex v = invocation.getArgumentAt(0, Vertex.class); - - return v.property(AAIProperties.AAI_URI).orElse("urimissing"); - } - }; - when(mock.pathed(isA(Vertex.class))).thenAnswer(answer); - - } - - public static Graph loadGraphson(String fileName) throws IOException { - final Graph graph = TinkerGraph.open(); - graph.io(IoCore.graphson()).readGraph(QueryFormatTestHelper.graphsonResources + fileName); - - return graph; - } - - public static void setFinalStatic(Field field, Object newValue) throws Exception { - field.setAccessible(true); - // remove final modifier from field - Field modifiersField = Field.class.getDeclaredField("modifiers"); - modifiersField.setAccessible(true); - modifiersField.setInt(field, field.getModifiers() & ~Modifier.FINAL); - field.set(null, newValue); - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/SimpleFormatTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/SimpleFormatTest.java deleted file mode 100644 index 766274cd..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/SimpleFormatTest.java +++ /dev/null @@ -1,163 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.queryformats; - -import com.google.gson.JsonObject; -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ReadOnlyStrategy; -import org.apache.tinkerpop.gremlin.structure.Graph; -import org.apache.tinkerpop.gremlin.structure.T; -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.openecomp.aai.dbmap.DBConnectionType; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.introspection.LoaderFactory; -import org.openecomp.aai.introspection.ModelType; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.introspection.exceptions.AAIUnknownObjectException; -import org.openecomp.aai.serialization.db.DBSerializer; -import org.openecomp.aai.serialization.engines.QueryStyle; -import org.openecomp.aai.serialization.engines.TitanDBEngine; -import org.openecomp.aai.serialization.engines.TransactionalGraphEngine; -import org.openecomp.aai.serialization.queryformats.exceptions.AAIFormatVertexException; -import org.openecomp.aai.serialization.queryformats.utils.UrlBuilder; - -import java.io.UnsupportedEncodingException; - -import static org.junit.Assert.*; -import static org.mockito.Matchers.anyBoolean; -import static org.mockito.Matchers.anyInt; -import static org.mockito.Matchers.anyObject; -import static org.mockito.Matchers.anyString; -import static org.mockito.Mockito.*; - -public class SimpleFormatTest { - - @Mock - private UrlBuilder urlBuilder; - - private Graph graph; - private TransactionalGraphEngine dbEngine; - private Loader loader; - private DBSerializer serializer; - private RawFormat simpleFormat; - private Vertex vfModule; - private final ModelType factoryType = ModelType.MOXY; - - @Before - public void setUp() throws Exception { - - MockitoAnnotations.initMocks(this); - - graph = TinkerGraph.open(); - - vfModule = graph.addVertex( - T.label, "vf-module", - T.id, "5", - "aai-node-type", "vf-module", - "vf-module-id", "vf-module-id-val-68205", - "vf-module-name", "example-vf-module-name-val-68205", - "heat-stack-id", "example-heat-stack-id-val-68205", - "orchestration-status", "example-orchestration-status-val-68205", - "is-base-vf-module", "true", - "resource-version", "1498166571906", - "model-invariant-id", "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", - "model-invariant-id-local", "fe8aac07-ce6c-4f9f-aa0d-b561c77da9e8", - "model-version-id", "0d23052d-8ffe-433e-a25d-da5da027bb7c", - "model-version-id-local", "0d23052d-8ffe-433e-a25d-da5da027bb7c", - "widget-model-id", "example-widget-model-id-val-68205", - "widget-model-version", "example-widget--model-version-val-68205", - "contrail-service-instance-fqdn", "example-contrail-service-instance-fqdn-val-68205" - ); - } - - @Test - public void testCreatePropertiesObjectReturnsProperProperties() throws AAIFormatVertexException, AAIException { - - createLoaderEngineSetup(); - serializer = new DBSerializer(Version.v10, dbEngine, factoryType, "Junit"); - simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).nodesOnly(true).depth(0).modelDriven().build(); - - assertNotNull(dbEngine.tx()); - assertNotNull(dbEngine.asAdmin()); - - JsonObject json = simpleFormat.createPropertiesObject(vfModule); - - assertTrue(json.has("model-invariant-id")); - assertTrue(json.has("model-version-id")); - - assertFalse(json.has("model-invariant-id-local")); - assertFalse(json.has("model-version-id-local")); - - } - - @Ignore - @Test(expected = AAIFormatVertexException.class) - public void testCreatePropertiesObjectThrowsExceptionIfSerializationFails() throws AAIFormatVertexException, AAIException, UnsupportedEncodingException { - - serializer = mock(DBSerializer.class); - loader = mock(Loader.class); - - simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).nodesOnly(true).depth(0).build(); - - when(serializer.dbToObject(anyObject(), anyObject(), anyInt(), anyBoolean(), anyString())) - .thenThrow(new AAIException("Test Exception")); - - simpleFormat.createPropertiesObject(vfModule); - } - - @Ignore - @Test(expected = AAIFormatVertexException.class) - public void testCreatePropertiesObjectThrowsExceptionIfUnknownObject() throws AAIFormatVertexException, AAIException, UnsupportedEncodingException { - - loader = mock(Loader.class); - serializer = mock(DBSerializer.class); - - simpleFormat = new RawFormat.Builder(loader, serializer, urlBuilder).nodesOnly(true).depth(0).build(); - - when(loader.introspectorFromName(anyString())) - .thenThrow(new AAIUnknownObjectException("Test Exception")); - - simpleFormat.createPropertiesObject(vfModule); - } - - public void createLoaderEngineSetup(){ - - if(loader == null){ - loader = LoaderFactory.createLoaderForVersion(factoryType, Version.v10); - dbEngine = spy(new TitanDBEngine(QueryStyle.TRAVERSAL, DBConnectionType.CACHED, loader)); - - TransactionalGraphEngine.Admin spyAdmin = spy(dbEngine.asAdmin()); - - when(dbEngine.tx()).thenReturn(graph); - when(dbEngine.asAdmin()).thenReturn(spyAdmin); - - when(spyAdmin.getReadOnlyTraversalSource()).thenReturn(graph.traversal(GraphTraversalSource.build().with(ReadOnlyStrategy.instance()))); - when(spyAdmin.getTraversalSource()).thenReturn(graph.traversal()); - } - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/QueryParamInjectorTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/QueryParamInjectorTest.java deleted file mode 100644 index 3eade856..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/QueryParamInjectorTest.java +++ /dev/null @@ -1,59 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.queryformats.utils; - -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.openecomp.aai.exceptions.AAIException; -import org.openecomp.aai.introspection.Loader; -import org.openecomp.aai.serialization.db.DBSerializer; -import org.openecomp.aai.serialization.queryformats.Resource; -import org.openecomp.aai.serialization.queryformats.Resource.Builder; - -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; - -import static org.junit.Assert.assertEquals; - -public class QueryParamInjectorTest { - - - @Mock private Loader loader; - @Mock private DBSerializer serializer; - @Mock private UrlBuilder urlBuilder; - - @Test - public void test() throws AAIException { - MockitoAnnotations.initMocks(this); - QueryParamInjector injector = QueryParamInjector.getInstance(); - - Builder b = new Resource.Builder(loader, serializer, urlBuilder); - MultivaluedMap params = new MultivaluedHashMap<>(); - params.putSingle("nodesOnly", "true"); - params.putSingle("depth", "10"); - params.putSingle("invalid", "1000"); - injector.injectParams(b, params); - - assertEquals("is nodes only", true, b.isNodesOnly()); - assertEquals("is depth 10", 10, b.getDepth()); - } -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/UrlBuilderTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/UrlBuilderTest.java deleted file mode 100644 index 605bbcd9..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/queryformats/utils/UrlBuilderTest.java +++ /dev/null @@ -1,100 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.queryformats.utils; - -import org.apache.tinkerpop.gremlin.structure.Vertex; -import org.junit.Before; -import org.junit.Test; -import org.mockito.Mock; -import org.mockito.MockitoAnnotations; -import org.openecomp.aai.AAISetup; -import org.openecomp.aai.introspection.Version; -import org.openecomp.aai.serialization.db.DBSerializer; -import org.openecomp.aai.serialization.queryformats.exceptions.AAIFormatVertexException; -import org.openecomp.aai.util.AAIConstants; - -import java.io.UnsupportedEncodingException; -import java.net.URI; -import java.net.URISyntaxException; - -import static org.junit.Assert.assertEquals; -import static org.mockito.Matchers.any; -import static org.mockito.Mockito.when; - -public class UrlBuilderTest extends AAISetup { - - @Mock - private DBSerializer serializer; - @Mock - private Vertex v; - - private static final String uri = "/test/uri"; - private static final Object vId = new Long(123); - private static final String protocolAndHost = "http://localhost/aai/"; - - @Before - public void before() throws UnsupportedEncodingException, URISyntaxException { - MockitoAnnotations.initMocks(this); - when(serializer.getURIForVertex(any(Vertex.class))).thenReturn(new URI(uri)); - when(v.id()).thenReturn(vId); - } - - @Test - public void v11Pathed() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { - Version version = Version.v11; - UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); - String result = builder.pathed(v); - - assertEquals("has no protocol and host", AAIConstants.AAI_APP_ROOT + version + uri, result); - - } - - @Test - public void v11Id() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { - Version version = Version.v11; - UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); - String result = builder.id(v); - - assertEquals("has no protocol and host", AAIConstants.AAI_APP_ROOT + version + "/resources/id/" + vId, result); - - } - - @Test - public void beforeV11Pathed() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { - Version version = Version.v10; - UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); - String result = builder.pathed(v); - - assertEquals("has protocol and host", protocolAndHost + version + uri, result); - - } - - @Test - public void beforeV11Id() throws UnsupportedEncodingException, URISyntaxException, AAIFormatVertexException { - Version version = Version.v10; - UrlBuilder builder = new UrlBuilder(version, serializer, protocolAndHost); - String result = builder.id(v); - - assertEquals("has protocol and host", protocolAndHost + version + "/resources/id/" + vId, result); - - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/serialization/tinkerpop/TreeBackedVertexTest.java b/aai-core/src/test/java/org/openecomp/aai/serialization/tinkerpop/TreeBackedVertexTest.java deleted file mode 100644 index c4440527..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/serialization/tinkerpop/TreeBackedVertexTest.java +++ /dev/null @@ -1,152 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.serialization.tinkerpop; - -import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource; -import org.apache.tinkerpop.gremlin.process.traversal.step.util.Tree; -import org.apache.tinkerpop.gremlin.structure.*; -import org.apache.tinkerpop.gremlin.tinkergraph.structure.TinkerGraph; -import org.junit.Before; -import org.junit.Ignore; -import org.junit.Test; -import org.openecomp.aai.serialization.db.EdgeProperty; -import org.openecomp.aai.serialization.engines.query.GraphTraversalQueryEngine; - -import static org.junit.Assert.assertEquals; - -@Ignore -public class TreeBackedVertexTest { - - private Graph graph = TinkerGraph.open(); - private Object startKey = null; - private Tree tree = null; - private Tree treeDepth1 = null; - private Tree treeDepth0NodeOnly = null; - - @Before - public void configure() { - GraphTraversalSource g = graph.traversal(); - - startKey = g.addV(T.label, "vserver").as("v1").property("test", "hello") - .addV(T.label, "vserver").as("v2") - .addV(T.label, "interface").property("name", "interface 1").as("v7").addInE("hasChild", "v2").property(EdgeProperty.CONTAINS.toString(), true) - .addV(T.label, "pserver").property("name", "pserver 1").as("v4").addOutE("runsOn", "v1").property(EdgeProperty.CONTAINS.toString(), false) - .addV(T.label, "interface").property("name", "interface 2").as("v3").addInE("hasChild", "v1").property(EdgeProperty.CONTAINS.toString(), true) - .addV(T.label, "address").property("name", "address 1").addInE("hasChild", "v3").property(EdgeProperty.CONTAINS.toString(), true) - .addV(T.label, "address").property("name", "address 2").addInE("hasChild", "v3").property(EdgeProperty.CONTAINS.toString(), true) - .addV(T.label, "complex").property("name", "complex 1").addInE("locatedIn", "v4").property(EdgeProperty.CONTAINS.toString(), false) - .addV(T.label, "interface").property("name", "interface 3").addInE("hasChild", "v4").property(EdgeProperty.CONTAINS.toString(), true) - .addV(T.label, "subnet").property("name", "subnet 1").as("v5").addInE("in", "v3").property(EdgeProperty.CONTAINS.toString(), false) - .addV(T.label, "address").property("name", "address 3").as("v6").addInE("hasChild", "v5").property(EdgeProperty.CONTAINS.toString(), true) - .select("v1").next(); - - tree = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey); - treeDepth1 = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 1, false); - treeDepth0NodeOnly = new GraphTraversalQueryEngine(g).findSubGraph((Vertex)startKey, 0, true); - } - - @Ignore - @Test - public void oneHopViaEdges() { - - //BulkSet set = (BulkSet)result; - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - - - assertEquals("locate child", v.edges(Direction.OUT).next().inVertex().property("name").orElse(""), "interface 2"); - assertEquals("locate cousin", v.edges(Direction.IN).next().outVertex().property("name").orElse(""), "pserver 1"); - - - } - - @Ignore - @Test - public void oneHopViaVertices() { - - //BulkSet set = (BulkSet)result; - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - - - assertEquals("locate child", "interface 2", v.vertices(Direction.OUT).next().property("name").orElse("")); - assertEquals("locate cousin", "pserver 1", v.vertices(Direction.IN).next().property("name").orElse("")); - - } - - @Ignore - @Test - public void twoHopCousinViaVertices() { - - //BulkSet set = (BulkSet)result; - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - - - assertEquals("locate child", "subnet 1", v.vertices(Direction.OUT).next().vertices(Direction.OUT, "in").next().property("name").orElse("")); - - } - - @Test - public void walkVerticesRestrictedDepth() { - - //BulkSet set = (BulkSet)result; - TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth1.getObjectsAtDepth(1).iterator().next(), treeDepth1); - - - assertEquals("nothing returned", false, v.vertices(Direction.OUT).next() - .vertices(Direction.OUT, "hasChild").hasNext()); - - } - - @Test - public void walkVertices() { - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - assertEquals("locate child", "address 2", v.vertices(Direction.OUT).next() - .vertices(Direction.OUT, "hasChild").next().property("name").orElse("")); - } - - @Test - public void walkEdges() { - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - - assertEquals("locate child", "address 2", v.edges(Direction.OUT).next().inVertex() - .edges(Direction.OUT, "hasChild").next().inVertex().property("name").orElse("")); - } - - @Test - public void noEdgesFoudWithLabelVertices() { - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - - assertEquals("missing hello label", false , v.vertices(Direction.OUT, "hello").hasNext()); - } - - @Test - public void noEdgesFoudWithLabelEdges() { - TreeBackedVertex v = new TreeBackedVertex((Vertex)tree.getObjectsAtDepth(1).iterator().next(), tree); - - assertEquals("missing hello label", false , v.edges(Direction.OUT, "hello").hasNext()); - } - - @Test - public void depthZeroNodeOnly() { - TreeBackedVertex v = new TreeBackedVertex((Vertex)treeDepth0NodeOnly.getObjectsAtDepth(1).iterator().next(), treeDepth0NodeOnly); - assertEquals("no edges returned", false, v.edges(Direction.BOTH).hasNext()); - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/util/GenerateXsdTest.java b/aai-core/src/test/java/org/openecomp/aai/util/GenerateXsdTest.java deleted file mode 100644 index 230efaaf..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/util/GenerateXsdTest.java +++ /dev/null @@ -1,54 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.util; - -import org.junit.Test; -import org.openecomp.aai.introspection.Version; - -public class GenerateXsdTest { - - @Test - public void testGenerationOfXsdAndYaml() throws Exception { - - GenerateXsd generateXsd = new GenerateXsd(); - System.setProperty("gen_version", Version.getLatest().toString()); - System.setProperty("gen_type", "XSD"); - System.setProperty("yamlresponses_url", ""); - System.setProperty("yamlresponses_label", ""); - - generateXsd.main(new String[]{}); - - System.setProperty("gen_version", Version.getLatest().toString()); - System.setProperty("gen_type", "YAML"); - - String wikiLink = System.getProperty("aai.wiki.link"); - - if(wikiLink == null){ - wikiLink = "https://wiki.onap.org/"; - } - - System.setProperty("yamlresponses_url", wikiLink); - System.setProperty("yamlresponses_label", "Response codes found in [response codes]"); - - generateXsd.main(new String[]{}); - } - -} diff --git a/aai-core/src/test/java/org/openecomp/aai/workarounds/RemoveDME2QueryParamsTest.java b/aai-core/src/test/java/org/openecomp/aai/workarounds/RemoveDME2QueryParamsTest.java deleted file mode 100644 index 51636271..00000000 --- a/aai-core/src/test/java/org/openecomp/aai/workarounds/RemoveDME2QueryParamsTest.java +++ /dev/null @@ -1,91 +0,0 @@ -/*- - * ============LICENSE_START======================================================= - * org.openecomp.aai - * ================================================================================ - * Copyright (C) 2017 AT&T Intellectual Property. 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========================================================= - */ - -package org.openecomp.aai.workarounds; - -import org.junit.Before; -import org.junit.Test; - -import javax.ws.rs.core.MultivaluedHashMap; -import javax.ws.rs.core.MultivaluedMap; - -import static org.junit.Assert.assertEquals; - -public class RemoveDME2QueryParamsTest { - - private MultivaluedMap hasParams; - private MultivaluedMap doesNotHaveParams; - private RemoveDME2QueryParams removeParams = new RemoveDME2QueryParams(); - - /** - * Setup. - */ - @Before - public void setup() { - hasParams = new MultivaluedHashMap<>(); - doesNotHaveParams = new MultivaluedHashMap<>(); - - hasParams.add("version", "1"); - hasParams.add("envContext", "DEV"); - hasParams.add("routeOffer", "INT1"); - hasParams.add("test1", "peppermints"); - hasParams.add("test2", "amber"); - - doesNotHaveParams.add("version", "1"); - doesNotHaveParams.add("envContext", "DEV"); - doesNotHaveParams.add("test1", "peppermints"); - doesNotHaveParams.add("test2", "amber"); - - } - - /** - * Test removal. - */ - @Test - public void testRemoval() { - - if (removeParams.shouldRemoveQueryParams(hasParams)) { - removeParams.removeQueryParams(hasParams); - } - - assertEquals("no version", false, hasParams.containsKey("version")); - assertEquals("no envContext", false, hasParams.containsKey("envContext")); - assertEquals("no routeOffer", false, hasParams.containsKey("routeOffer")); - assertEquals("has test1", true, hasParams.containsKey("test1")); - assertEquals("has test2", true, hasParams.containsKey("test2")); - - } - - /** - * Should not remove. - */ - @Test - public void shouldNotRemove() { - - if (removeParams.shouldRemoveQueryParams(doesNotHaveParams)) { - removeParams.removeQueryParams(doesNotHaveParams); - } - - assertEquals("no version", true, doesNotHaveParams.containsKey("version")); - assertEquals("no envContext", true, doesNotHaveParams.containsKey("envContext")); - assertEquals("has test1", true, doesNotHaveParams.containsKey("test1")); - assertEquals("has test2", true, doesNotHaveParams.containsKey("test2")); - } -} diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/appprops/aaiconfig.properties b/aai-core/src/test/resources/bundleconfig-local/etc/appprops/aaiconfig.properties index 9532c7c1..3da02475 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/appprops/aaiconfig.properties +++ b/aai-core/src/test/resources/bundleconfig-local/etc/appprops/aaiconfig.properties @@ -1,22 +1,24 @@ -### +# # ============LICENSE_START======================================================= -# org.openecomp.aai +# org.onap.aai # ================================================================================ -# Copyright (C) 2017 AT&T Intellectual Property. All rights reserved. +# Copyright © 2017 AT&T Intellectual Property. 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 -# +# +# 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. +# aai.server.url.base=https://baseurl:8443/aai/ aai.resourceversion.enableflag=true diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-cached.properties b/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-cached.properties index 2afe2234..84f56d1c 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-cached.properties +++ b/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-cached.properties @@ -1,3 +1,25 @@ +# +# ============LICENSE_START======================================================= +# org.onap.aai +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. +# + query.fast-property=true # the following parameters are not reloaded automatically and require a manual bounce storage.backend=inmemory diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-realtime.properties b/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-realtime.properties index 9c5c0299..3ee65306 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-realtime.properties +++ b/aai-core/src/test/resources/bundleconfig-local/etc/appprops/titan-realtime.properties @@ -1,3 +1,25 @@ +# +# ============LICENSE_START======================================================= +# org.onap.aai +# ================================================================================ +# Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. +# + query.fast-property=true # the following parameters are not reloaded automatically and require a manual bounce storage.backend=inmemory diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v10.xml b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v10.xml index 2d09ff0f..d3c46600 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v10.xml +++ b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v10.xml @@ -1,24 +1,27 @@ + 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. + +--> diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v11.xml b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v11.xml index 7daf12ab..ecbfefb8 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v11.xml +++ b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v11.xml @@ -1,24 +1,27 @@ + 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. + +--> diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v2.xml b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v2.xml index c3b30b45..eba7c4b9 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v2.xml +++ b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v2.xml @@ -1,24 +1,27 @@ + 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. + +--> diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v8.xml b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v8.xml index b5a64c87..7474362f 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v8.xml +++ b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v8.xml @@ -1,24 +1,27 @@ + 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. + +--> diff --git a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v9.xml b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v9.xml index f53bd860..bfd67319 100644 --- a/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v9.xml +++ b/aai-core/src/test/resources/bundleconfig-local/etc/oxm/aai_oxm_v9.xml @@ -1,24 +1,27 @@ + 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. + +--> @@ -4247,7 +4250,7 @@ - + @@ -4277,7 +4280,7 @@ - + diff --git a/aai-core/src/test/resources/logback.xml b/aai-core/src/test/resources/logback.xml index d9627b22..959ef63f 100644 --- a/aai-core/src/test/resources/logback.xml +++ b/aai-core/src/test/resources/logback.xml @@ -1,21 +1,26 @@ + ============LICENSE_START======================================================= + org.onap.aai + ================================================================================ + Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + +--> ${module.ajsc.namespace.name} @@ -270,12 +275,12 @@ --> - + diff --git a/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v10.xml b/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v10.xml index 728e4b43..818128eb 100644 --- a/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v10.xml +++ b/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v10.xml @@ -1,23 +1,28 @@ - - + + ============LICENSE_START======================================================= + org.onap.aai + ================================================================================ + Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + +--> + @@ -25,14 +30,14 @@ - - - - - - - - + + + + + + + + @@ -42,24 +47,24 @@ - - - - + + + + - + - + @@ -68,8 +73,8 @@ - - + + @@ -87,9 +92,9 @@ - - - + + + @@ -120,7 +125,7 @@ - + @@ -143,16 +148,16 @@ - - + + - - + + @@ -162,8 +167,8 @@ - - + + @@ -174,9 +179,9 @@ - + - + @@ -184,7 +189,7 @@ - + @@ -210,7 +215,7 @@ - + @@ -229,18 +234,18 @@ - - - - - + + + + + - + @@ -295,16 +300,16 @@ - - - - - - - - - - + + + + + + + + + + @@ -320,7 +325,7 @@ - + @@ -367,7 +372,7 @@ - + @@ -381,7 +386,7 @@ - + @@ -398,8 +403,8 @@ - - + + @@ -441,7 +446,7 @@ - + @@ -492,8 +497,8 @@ - - + + @@ -508,7 +513,7 @@ - + @@ -540,7 +545,7 @@ - + @@ -556,7 +561,7 @@ - + @@ -581,8 +586,8 @@ - - + + @@ -600,7 +605,7 @@ - + @@ -649,9 +654,9 @@ - - - + + + @@ -669,7 +674,7 @@ - + @@ -738,12 +743,12 @@ - - - - - - + + + + + + @@ -759,7 +764,7 @@ - + @@ -835,7 +840,7 @@ - + @@ -888,7 +893,7 @@ - + @@ -900,7 +905,7 @@ - + @@ -963,9 +968,9 @@ - - - + + + @@ -1019,7 +1024,7 @@ - + @@ -1034,7 +1039,7 @@ - + @@ -1056,7 +1061,7 @@ - + @@ -1072,7 +1077,7 @@ - + @@ -1134,7 +1139,7 @@ - + @@ -1151,7 +1156,7 @@ - + @@ -1213,7 +1218,7 @@ - + @@ -1231,7 +1236,7 @@ - + @@ -1263,7 +1268,7 @@ - + @@ -1280,7 +1285,7 @@ - + @@ -1337,8 +1342,8 @@ - - + + @@ -1355,7 +1360,7 @@ - + @@ -1384,7 +1389,7 @@ - + @@ -1406,7 +1411,7 @@ - + @@ -1422,7 +1427,7 @@ - + @@ -1444,7 +1449,7 @@ - + @@ -1460,7 +1465,7 @@ - + @@ -1596,9 +1601,9 @@ - - - + + + @@ -1616,7 +1621,7 @@ - + @@ -1674,8 +1679,8 @@ - - + + @@ -1692,7 +1697,7 @@ - + @@ -1745,8 +1750,8 @@ - - + + @@ -1762,7 +1767,7 @@ - + @@ -1799,7 +1804,7 @@ - + @@ -1816,7 +1821,7 @@ - + @@ -1843,7 +1848,7 @@ - + @@ -1859,7 +1864,7 @@ - + @@ -1881,7 +1886,7 @@ - + @@ -1901,8 +1906,8 @@ - - + + @@ -1912,7 +1917,7 @@ - + @@ -1960,8 +1965,8 @@ - - + + @@ -1977,7 +1982,7 @@ - + @@ -2008,8 +2013,8 @@ - - + + @@ -2028,7 +2033,7 @@ - + @@ -2050,9 +2055,9 @@ - + - + @@ -2069,7 +2074,7 @@ - + @@ -2172,9 +2177,9 @@ - - - + + + @@ -2193,11 +2198,11 @@ - - - - - + + + + + @@ -2207,7 +2212,7 @@ - + @@ -2244,7 +2249,7 @@ - + @@ -2261,7 +2266,7 @@ - + @@ -2293,7 +2298,7 @@ - + @@ -2309,7 +2314,7 @@ - + @@ -2331,7 +2336,7 @@ - + @@ -2347,26 +2352,26 @@ - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + type="inventory.aai.onap.org.v10.TestObjects" /> @@ -2376,7 +2381,7 @@ - + @@ -2484,7 +2489,7 @@ - + @@ -2502,7 +2507,7 @@ - + @@ -2519,8 +2524,8 @@ - - + + @@ -2537,7 +2542,7 @@ - + @@ -2559,8 +2564,8 @@ - - + + @@ -2576,7 +2581,7 @@ - + @@ -2618,8 +2623,8 @@ - - + + @@ -2635,7 +2640,7 @@ - + @@ -2662,7 +2667,7 @@ - + @@ -2674,7 +2679,7 @@ - + @@ -2721,9 +2726,9 @@ - + - + @@ -2745,7 +2750,7 @@ - + @@ -2766,7 +2771,7 @@ - + @@ -2780,7 +2785,7 @@ - + @@ -2813,9 +2818,9 @@ - - - + + + @@ -2831,7 +2836,7 @@ - + @@ -2858,7 +2863,7 @@ - + @@ -2874,7 +2879,7 @@ - + @@ -2976,10 +2981,10 @@ - - - - + + + + @@ -2996,7 +3001,7 @@ - + @@ -3058,8 +3063,8 @@ - - + + @@ -3073,7 +3078,7 @@ - + @@ -3090,7 +3095,7 @@ - + @@ -3107,7 +3112,7 @@ - + @@ -3166,7 +3171,7 @@ - + @@ -3179,7 +3184,7 @@ - + @@ -3326,10 +3331,10 @@ - - - - + + + + @@ -3348,7 +3353,7 @@ - + @@ -3374,7 +3379,7 @@ - + @@ -3388,7 +3393,7 @@ - + @@ -3405,7 +3410,7 @@ - + @@ -3417,7 +3422,7 @@ - + @@ -3485,7 +3490,7 @@ - + @@ -3502,7 +3507,7 @@ - + @@ -3750,12 +3755,12 @@ - - - - - - + + + + + + @@ -3775,7 +3780,7 @@ - + @@ -3864,7 +3869,7 @@ - + @@ -3882,7 +3887,7 @@ - + @@ -3899,7 +3904,7 @@ - + @@ -3915,7 +3920,7 @@ - + @@ -3992,8 +3997,8 @@ - - + + @@ -4012,7 +4017,7 @@ - + @@ -4133,9 +4138,9 @@ - - - + + + @@ -4153,7 +4158,7 @@ - + @@ -4203,7 +4208,7 @@ - + @@ -4218,7 +4223,7 @@ - + @@ -4245,7 +4250,7 @@ - + @@ -4258,7 +4263,7 @@ - + @@ -4375,8 +4380,8 @@ - - + + @@ -4392,7 +4397,7 @@ - + @@ -4417,8 +4422,8 @@ - - + + @@ -4463,7 +4468,7 @@ - + @@ -4493,8 +4498,8 @@ - - + + @@ -4502,7 +4507,7 @@ - + @@ -4541,16 +4546,16 @@ - - - + + + - + @@ -4587,24 +4592,24 @@ - + - + - + - + @@ -4625,7 +4630,7 @@ - + @@ -4637,7 +4642,7 @@ - + @@ -4660,15 +4665,15 @@ - - + + - + @@ -4691,15 +4696,15 @@ - - + + - + @@ -4722,15 +4727,15 @@ - - + + - + @@ -4754,17 +4759,17 @@ - - - - + + + + - + @@ -4790,14 +4795,14 @@ - + - + @@ -4830,9 +4835,9 @@ - - - + + + @@ -4844,8 +4849,8 @@ - - + + @@ -4895,8 +4900,8 @@ - - + + @@ -4906,7 +4911,7 @@ - + @@ -4927,7 +4932,7 @@ - + @@ -4958,7 +4963,7 @@ - + @@ -4969,7 +4974,7 @@ - + @@ -4982,8 +4987,8 @@ - - + + @@ -4993,7 +4998,7 @@ - + @@ -5011,7 +5016,7 @@ - + @@ -5033,7 +5038,7 @@ - + @@ -5052,7 +5057,7 @@ - + @@ -5084,7 +5089,7 @@ - + @@ -5104,7 +5109,7 @@ - + @@ -5121,7 +5126,7 @@ - + @@ -5137,7 +5142,7 @@ - + @@ -5205,8 +5210,8 @@ - - + + @@ -5226,7 +5231,7 @@ - + @@ -5263,7 +5268,7 @@ - + @@ -5282,7 +5287,7 @@ - + @@ -5304,7 +5309,7 @@ - + @@ -5321,7 +5326,7 @@ - + @@ -5343,7 +5348,7 @@ - + @@ -5377,7 +5382,7 @@ - + @@ -5414,7 +5419,7 @@ - + @@ -5433,7 +5438,7 @@ + type="inventory.aai.onap.org.v10.TestObject" /> @@ -5771,8 +5776,8 @@ - - + + diff --git a/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v8.xml b/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v8.xml index 3ed2ea53..06dc6e03 100644 --- a/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v8.xml +++ b/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v8.xml @@ -1,25 +1,28 @@ - - + + 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. + +--> + @@ -27,20 +30,20 @@ - - - - - - - + + + + + + + - + @@ -48,7 +51,7 @@ - + @@ -57,8 +60,8 @@ - - + + @@ -98,7 +101,7 @@ - + @@ -124,8 +127,8 @@ - - + + @@ -136,9 +139,9 @@ - + - + @@ -146,7 +149,7 @@ - + @@ -172,7 +175,7 @@ - + @@ -191,15 +194,15 @@ - - + + - + @@ -251,14 +254,14 @@ - - - - - - - - + + + + + + + + @@ -274,7 +277,7 @@ - + @@ -311,7 +314,7 @@ - + @@ -324,7 +327,7 @@ - + @@ -341,8 +344,8 @@ - - + + @@ -384,7 +387,7 @@ - + @@ -406,8 +409,8 @@ - - + + @@ -424,7 +427,7 @@ - + @@ -473,9 +476,9 @@ - - - + + + @@ -493,7 +496,7 @@ - + @@ -545,10 +548,10 @@ - - - - + + + + @@ -601,7 +604,7 @@ - + @@ -613,7 +616,7 @@ - + @@ -665,9 +668,9 @@ - - - + + + @@ -721,7 +724,7 @@ - + @@ -736,7 +739,7 @@ - + @@ -758,7 +761,7 @@ - + @@ -774,7 +777,7 @@ - + @@ -836,7 +839,7 @@ - + @@ -853,7 +856,7 @@ - + @@ -915,7 +918,7 @@ - + @@ -933,7 +936,7 @@ - + @@ -965,7 +968,7 @@ - + @@ -982,7 +985,7 @@ - + @@ -1039,8 +1042,8 @@ - - + + @@ -1057,7 +1060,7 @@ - + @@ -1086,7 +1089,7 @@ - + @@ -1184,9 +1187,9 @@ - - - + + + @@ -1204,7 +1207,7 @@ - + @@ -1251,8 +1254,8 @@ - - + + @@ -1268,7 +1271,7 @@ - + @@ -1295,8 +1298,8 @@ - - + + @@ -1312,7 +1315,7 @@ - + @@ -1339,7 +1342,7 @@ - + @@ -1355,7 +1358,7 @@ - + @@ -1365,7 +1368,7 @@ - + @@ -1393,8 +1396,8 @@ - - + + @@ -1414,7 +1417,7 @@ - + @@ -1436,9 +1439,9 @@ - + - + @@ -1454,7 +1457,7 @@ - + @@ -1536,8 +1539,8 @@ - - + + @@ -1556,9 +1559,9 @@ - - - + + + @@ -1568,12 +1571,12 @@ - - - - - - + + + + + + @@ -1583,7 +1586,7 @@ - + @@ -1665,7 +1668,7 @@ - + @@ -1682,7 +1685,7 @@ - + @@ -1741,7 +1744,7 @@ - + @@ -1753,7 +1756,7 @@ - + @@ -1874,10 +1877,10 @@ - - - - + + + + @@ -1896,7 +1899,7 @@ - + @@ -1913,7 +1916,7 @@ - + @@ -1925,7 +1928,7 @@ - + @@ -1993,7 +1996,7 @@ - + @@ -2010,7 +2013,7 @@ - + @@ -2219,10 +2222,10 @@ - - - - + + + + @@ -2242,7 +2245,7 @@ - + @@ -2305,7 +2308,7 @@ - + @@ -2321,7 +2324,7 @@ - + @@ -2399,9 +2402,9 @@ - - - + + + @@ -2418,7 +2421,7 @@ - + @@ -2465,7 +2468,7 @@ - + @@ -2480,7 +2483,7 @@ - + @@ -2506,8 +2509,8 @@ - - + + @@ -2553,7 +2556,7 @@ - + @@ -2585,7 +2588,7 @@ - + @@ -2601,7 +2604,7 @@ - + @@ -2652,16 +2655,16 @@ - - - + + + - + @@ -2699,24 +2702,24 @@ - + - + - + - + @@ -2737,14 +2740,14 @@ - + - + @@ -2767,15 +2770,15 @@ - - + + - + @@ -2798,15 +2801,15 @@ - - + + - + @@ -2829,15 +2832,15 @@ - - + + - + @@ -2861,17 +2864,17 @@ - - - - + + + + - + @@ -2897,14 +2900,14 @@ - + - + @@ -2937,8 +2940,8 @@ - - + + @@ -2949,8 +2952,8 @@ - - + + @@ -2960,7 +2963,7 @@ - + @@ -2992,7 +2995,7 @@ - + @@ -3003,7 +3006,7 @@ - + @@ -3016,8 +3019,8 @@ - - + + @@ -3027,7 +3030,7 @@ - + @@ -3045,7 +3048,7 @@ - + @@ -3062,7 +3065,7 @@ - + diff --git a/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v9.xml b/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v9.xml index 6c372083..aec9b83d 100644 --- a/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v9.xml +++ b/aai-core/src/test/resources/org/openecomp/aai/introspection/aai_oxm_v9.xml @@ -1,23 +1,28 @@ - + ============LICENSE_START======================================================= + org.onap.aai + ================================================================================ + Copyright © 2017 AT&T Intellectual Property. 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 is a trademark and service mark of AT&T Intellectual Property. + +--> + @@ -25,7 +30,7 @@ - + @@ -34,8 +39,8 @@ - - + + @@ -44,7 +49,7 @@ - + @@ -53,7 +58,7 @@ - + @@ -83,7 +88,7 @@ - + @@ -91,7 +96,7 @@ - + @@ -135,7 +140,7 @@ - + @@ -363,7 +368,7 @@ - + @@ -380,7 +385,7 @@ - + @@ -454,7 +459,7 @@ - + @@ -471,8 +476,8 @@ - - + + @@ -525,7 +530,7 @@ - + @@ -574,7 +579,7 @@ - + -- cgit 1.2.3-korg