diff options
author | Edwin Lawrance <Edwin.Lawrance@amdocs.com> | 2017-09-22 16:55:07 +0100 |
---|---|---|
committer | Edwin Lawrance <Edwin.Lawrance@amdocs.com> | 2017-10-05 11:36:10 +0100 |
commit | 1433a67a9e3dcad20d0dda8edcaad9403320f4f9 (patch) | |
tree | 91dc94ca6acb183f5c87e3e141f678e1f06b6945 /src/test | |
parent | 5f3bae5a14b3167d43c3bedf83446cbf5269d5c2 (diff) |
Initial code submit for Babel
Change-Id: I3738ebe15eadbbd6d16e24e374c6e40c535b425d
Issue-ID: AAI-46
Signed-off-by: Edwin Lawrance <Edwin.Lawrance@amdocs.com>
Diffstat (limited to 'src/test')
26 files changed, 2331 insertions, 0 deletions
diff --git a/src/test/java/org/onap/aai/babel/MicroServiceAuthTest.java b/src/test/java/org/onap/aai/babel/MicroServiceAuthTest.java new file mode 100644 index 0000000..f24cbf1 --- /dev/null +++ b/src/test/java/org/onap/aai/babel/MicroServiceAuthTest.java @@ -0,0 +1,211 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel; + +import static org.hamcrest.CoreMatchers.equalTo; +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import java.io.File; +import java.io.FileWriter; +import java.io.IOException; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; +import org.junit.Test; +import org.onap.aai.auth.AAIAuthException; +import org.onap.aai.auth.AAIMicroServiceAuth; +import org.onap.aai.auth.AAIMicroServiceAuthCore; +import org.onap.aai.babel.config.BabelAuthConfig; +import org.springframework.mock.web.MockHttpServletRequest; + +/** + * Tests @{link AAIMicroServiceAuth} + */ + +public class MicroServiceAuthTest { + + private static final String VALID_ADMIN_USER = "cn=common-name, ou=org-unit, o=org, l=location, st=state, c=us"; + private static final String authPolicyFile = "auth_policy.json"; + + static { + System.setProperty("CONFIG_HOME", + System.getProperty("user.dir") + File.separator + "src/test/resources"); + } + + /** + * Temporarily invalidate the default policy file and then try to initialise the authorisation class using the name + * of a policy file that does not exist. + * + * @throws AAIAuthException + * @throws IOException + */ + @Test(expected = AAIAuthException.class) + public void missingPolicyFile() throws AAIAuthException, IOException { + String defaultFile = AAIMicroServiceAuthCore.getDefaultAuthFileName(); + try { + AAIMicroServiceAuthCore.setDefaultAuthFileName("invalid.default.file"); + BabelAuthConfig gapServiceAuthConfig = new BabelAuthConfig(); + gapServiceAuthConfig.setAuthPolicyFile("invalid.file.name"); + new AAIMicroServiceAuth(gapServiceAuthConfig); + } finally { + AAIMicroServiceAuthCore.setDefaultAuthFileName(defaultFile); + } + } + + /** + * Test loading of a temporary file created with the specified roles + * + * @throws AAIAuthException + * @throws IOException + * @throws JSONException + */ + @Test + public void createLocalAuthFile() throws AAIAuthException, IOException, JSONException { + JSONObject roles = createRoleObject("role", createUserObject("user"), createFunctionObject("func")); + AAIMicroServiceAuth auth = createAuthService(roles); + assertThat(auth.authorize("nosuchuser", "method:func"), is(false)); + assertThat(auth.authorize("user", "method:func"), is(true)); + } + + /** + * Test that the default policy file is loaded when a non-existent file is passed to the authorisation clas. + * + * @throws AAIAuthException + */ + @Test + public void createAuthFromDefaultFile() throws AAIAuthException { + BabelAuthConfig gapServiceAuthConfig = new BabelAuthConfig(); + gapServiceAuthConfig.setAuthPolicyFile("non-existent-file"); + AAIMicroServiceAuth auth = new AAIMicroServiceAuth(gapServiceAuthConfig); + // The default policy will have been loaded + assertAdminUserAuthorisation(auth, VALID_ADMIN_USER); + } + + /** + * Test loading of the policy file relative to CONFIG_HOME + * + * @throws AAIAuthException + */ + @Test + public void createAuth() throws AAIAuthException { + AAIMicroServiceAuth auth = createStandardAuth(); + assertAdminUserAuthorisation(auth, VALID_ADMIN_USER); + } + + @Test + public void testAuthUser() throws AAIAuthException { + AAIMicroServiceAuth auth = createStandardAuth(); + assertThat(auth.authenticate(VALID_ADMIN_USER, "GET:actions"), is(equalTo("OK"))); + assertThat(auth.authenticate(VALID_ADMIN_USER, "WRONG:action"), is(equalTo("AAI_9101"))); + } + + + + @Test + public void testValidateRequest() throws AAIAuthException { + AAIMicroServiceAuth auth = createStandardAuth(); + assertThat(auth.validateRequest(null, new MockHttpServletRequest(), null, "app/v1/gap"), is(false)); + } + + private AAIMicroServiceAuth createStandardAuth() throws AAIAuthException { + BabelAuthConfig gapServiceAuthConfig = new BabelAuthConfig(); + gapServiceAuthConfig.setAuthPolicyFile(authPolicyFile); + return new AAIMicroServiceAuth(gapServiceAuthConfig); + } + + /** + * @param rolesJson + * @return + * @throws IOException + * @throws AAIAuthException + */ + private AAIMicroServiceAuth createAuthService(JSONObject roles) throws IOException, AAIAuthException { + BabelAuthConfig babelAuthConfig = new BabelAuthConfig(); + File file = File.createTempFile("auth-policy", "json"); + file.deleteOnExit(); + FileWriter fileWriter = new FileWriter(file); + fileWriter.write(roles.toString()); + fileWriter.flush(); + fileWriter.close(); + + babelAuthConfig.setAuthPolicyFile(file.getAbsolutePath()); + return new AAIMicroServiceAuth(babelAuthConfig); + } + + /** + * Assert authorisation results for an admin user based on the test policy file + * + * @param auth + * @param adminUser + * @throws AAIAuthException + */ + private void assertAdminUserAuthorisation(AAIMicroServiceAuth auth, String adminUser) throws AAIAuthException { + assertThat(auth.authorize(adminUser, "GET:actions"), is(true)); + assertThat(auth.authorize(adminUser, "POST:actions"), is(true)); + assertThat(auth.authorize(adminUser, "PUT:actions"), is(true)); + assertThat(auth.authorize(adminUser, "DELETE:actions"), is(true)); + } + + private JSONArray createFunctionObject(String functionName) throws JSONException { + JSONArray functionsArray = new JSONArray(); + JSONObject func = new JSONObject(); + func.put("name", functionName); + func.put("methods", createMethodObject("method")); + functionsArray.put(func); + return functionsArray; + } + + private JSONArray createMethodObject(String methodName) throws JSONException { + JSONArray methodsArray = new JSONArray(); + JSONObject method = new JSONObject(); + method.put("name", methodName); + methodsArray.put(method); + return methodsArray; + } + + private JSONArray createUserObject(String username) throws JSONException { + JSONArray usersArray = new JSONArray(); + JSONObject user = new JSONObject(); + user.put("username", username); + usersArray.put(user); + return usersArray; + } + + private JSONObject createRoleObject(String roleName, JSONArray usersArray, JSONArray functionsArray) + throws JSONException { + JSONObject roles = new JSONObject(); + + JSONObject role = new JSONObject(); + role.put("name", roleName); + role.put("functions", functionsArray); + role.put("users", usersArray); + + JSONArray rolesArray = new JSONArray(); + rolesArray.put(role); + roles.put("roles", rolesArray); + + return roles; + } + +} diff --git a/src/test/java/org/onap/aai/babel/csar/extractor/YamlExtractorTest.java b/src/test/java/org/onap/aai/babel/csar/extractor/YamlExtractorTest.java new file mode 100644 index 0000000..54f4c65 --- /dev/null +++ b/src/test/java/org/onap/aai/babel/csar/extractor/YamlExtractorTest.java @@ -0,0 +1,141 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.csar.extractor; + +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertTrue; +import static org.junit.Assert.fail; + +import java.io.IOException; +import java.util.ArrayList; +import java.util.List; +import org.apache.commons.io.IOUtils; +import org.junit.Test; +import org.onap.aai.babel.util.ArtifactTestUtils; +import org.openecomp.sdc.generator.data.Artifact; + +/** + * Tests @see YamlExtractor + */ +public class YamlExtractorTest { + + private static final String FOO = "foo"; + private static final String SOME_BYTES = "just some bytes that will pass the firsts validation"; + private static final String SUPPLY_AN_ARCHIVE = "An archive must be supplied for processing."; + private static final String SUPPLY_NAME = "The name of the archive must be supplied for processing."; + private static final String SUPPLY_VERSION = "The version must be supplied for processing."; + + @Test + public void extract_nullContentSupplied() { + invalidArgumentsTest(null, FOO, FOO, SUPPLY_AN_ARCHIVE); + } + + private void invalidArgumentsTest(byte[] archive, String name, String version, String expectedErrorMessage) { + try { + YamlExtractor.extract(archive, name, version); + fail("An instance of InvalidArchiveException should have been thrown"); + } catch (Exception ex) { + assertTrue(ex instanceof InvalidArchiveException); + assertEquals(expectedErrorMessage, ex.getLocalizedMessage()); + } + } + + @Test + public void extract_emptyContentSupplied() { + invalidArgumentsTest(new byte[0], FOO, FOO, SUPPLY_AN_ARCHIVE); + } + + @Test + public void extract_nullNameSupplied() { + invalidArgumentsTest(SOME_BYTES.getBytes(), null, FOO, SUPPLY_NAME); + } + + @Test + public void extract_blankNameSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), " \t ", FOO, + SUPPLY_NAME); + } + + @Test + public void extract_emptyNameSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), "", FOO, SUPPLY_NAME); + } + + @Test + public void extract_nullVersionSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), FOO, null, + SUPPLY_VERSION); + } + + @Test + public void extract_blankVersionSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), FOO, " \t ", + SUPPLY_VERSION); + } + + @Test + public void extract_emptyVersionSupplied() { + invalidArgumentsTest("just some bytes that will pass the firsts validation".getBytes(), FOO, "", + SUPPLY_VERSION); + } + + @Test + public void extract_invalidContentSupplied() { + invalidArgumentsTest("This is a piece of nonsense and not a zip file".getBytes(), FOO, FOO, + "An error occurred trying to create a ZipFile. Is the content being converted really a csar file?"); + } + + @Test + public void extract_archiveContainsNoYmlFiles() throws IOException { + try { + YamlExtractor.extract(loadResource("compressedArtifacts/noYmlFilesArchive.zip"), "noYmlFilesArchive.zip", + "v1"); + fail("An instance of InvalidArchiveException should have been thrown."); + } catch (Exception e) { + assertTrue("An instance of InvalidArchiveException should have been thrown.", + e instanceof InvalidArchiveException); + assertEquals("Incorrect message was returned", "No valid yml files were found in the csar file.", + e.getMessage()); + } + } + + private byte[] loadResource(final String archiveName) throws IOException { + return IOUtils.toByteArray(YamlExtractor.class.getClassLoader().getResource(archiveName)); + } + + @Test + public void extract_archiveContainsThreeRelevantYmlFilesFromSdWanService() + throws IOException, InvalidArchiveException { + List<Artifact> ymlFiles = + YamlExtractor.extract(loadResource("compressedArtifacts/service-SdWanServiceTest-csar.csar"), + "service-SdWanServiceTest-csar.csar", "v1"); + + List<String> payloads = new ArrayList<>(); + payloads.add("ymlFiles/resource-SdWanTestVsp-template.yml"); + payloads.add("ymlFiles/resource-TunnelXconntest-template.yml"); + payloads.add("ymlFiles/service-SdWanServiceTest-template.yml"); + + new ArtifactTestUtils().performYmlAsserts(ymlFiles, payloads); + } +} + diff --git a/src/test/java/org/onap/aai/babel/csar/fixture/ArtifactInfoBuilder.java b/src/test/java/org/onap/aai/babel/csar/fixture/ArtifactInfoBuilder.java new file mode 100644 index 0000000..0ff8fa1 --- /dev/null +++ b/src/test/java/org/onap/aai/babel/csar/fixture/ArtifactInfoBuilder.java @@ -0,0 +1,78 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.csar.fixture; + +import java.util.ArrayList; +import java.util.List; +import org.openecomp.sdc.api.notification.IArtifactInfo; + +/** + * This class builds an instance of IArtifactInfo for test purposes. + */ +public class ArtifactInfoBuilder { + + /** + * Builds an implementation of IArtifactInfo for test purposes. + * <p/> + * + * @param type type of artifact + * @param name name of artifact + * @param description description of artifact + * @param version version of artifact + * @return IArtifactInfo implementation of IArtifactInfo from given parameters for test purposes + */ + public static IArtifactInfo build(final String type, final String name, final String description, + final String version) { + IArtifactInfo artifact = new TestArtifactInfoImpl(); + + ((TestArtifactInfoImpl) artifact).setArtifactType(type); + ((TestArtifactInfoImpl) artifact).setArtifactName(name); + ((TestArtifactInfoImpl) artifact).setArtifactDescription(description); + ((TestArtifactInfoImpl) artifact).setArtifactVersion(version); + + return artifact; + } + + /** + * This method is responsible for building a collection of artifacts from a given set of info. + * <p/> + * The info supplied is a two dimensional array with each element of the first dimension representing a single + * artifact and each element of the second dimension represents a property of the artifact. + * <p/> + * The method will call {@link #build(String, String, String, String)} to build each element in the first dimension + * where the elements of the second dimension are the arguments to {@link #build(String, String, String, String)}. + * <p/> + * + * @param artifactInfoBits a two dimensional array of data used to build the artifacts + * @return List<IArtifactInfo> a list of artifacts built from the given array of info + */ + static List<IArtifactInfo> buildArtifacts(final String[][] artifactInfoBits) { + List<IArtifactInfo> artifacts = new ArrayList<>(); + + for (String[] artifactInfoBit : artifactInfoBits) { + artifacts.add(build(artifactInfoBit[0], artifactInfoBit[1], artifactInfoBit[2], artifactInfoBit[3])); + } + + return artifacts; + } +} diff --git a/src/test/java/org/onap/aai/babel/csar/fixture/TestArtifactInfoImpl.java b/src/test/java/org/onap/aai/babel/csar/fixture/TestArtifactInfoImpl.java new file mode 100644 index 0000000..bbf4a43 --- /dev/null +++ b/src/test/java/org/onap/aai/babel/csar/fixture/TestArtifactInfoImpl.java @@ -0,0 +1,135 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.csar.fixture; + +import org.openecomp.sdc.api.notification.IArtifactInfo; + +/** + * This class is an implementation of IArtifactInfo for test purposes. + */ +public class TestArtifactInfoImpl implements IArtifactInfo { + + private String artifactName; + private String artifactType; + private String artifactDescription; + private String artifactVersion; + + @Override + public String getArtifactName() { + return artifactName; + } + + void setArtifactName(String artifactName) { + this.artifactName = artifactName; + } + + @Override + public String getArtifactType() { + return artifactType; + } + + void setArtifactType(String artifactType) { + this.artifactType = artifactType; + } + + @Override + public String getArtifactURL() { + return null; + } + + @Override + public String getArtifactChecksum() { + return null; + } + + @Override + public String getArtifactDescription() { + return artifactDescription; + } + + void setArtifactDescription(String artifactDescription) { + this.artifactDescription = artifactDescription; + } + + @Override + public Integer getArtifactTimeout() { + return null; + } + + @Override + public String getArtifactVersion() { + return artifactVersion; + } + + void setArtifactVersion(String artifactVersion) { + this.artifactVersion = artifactVersion; + } + + @Override + public String getArtifactUUID() { + return null; + } + + @Override + public IArtifactInfo getGeneratedArtifact() { + return null; + } + + @Override + public java.util.List<IArtifactInfo> getRelatedArtifacts() { + return null; + } + + @Override + public boolean equals(Object o) { + if (this == o) { + return true; + } + if (o == null || getClass() != o.getClass()) { + return false; + } + + TestArtifactInfoImpl that = (TestArtifactInfoImpl) o; + + if (artifactName != null ? !artifactName.equals(that.artifactName) : that.artifactName != null) { + return false; + } + if (artifactType != null ? !artifactType.equals(that.artifactType) : that.artifactType != null) { + return false; + } + if (artifactDescription != null ? !artifactDescription.equals(that.artifactDescription) + : that.artifactDescription != null) { + return false; + } + return artifactVersion != null ? artifactVersion.equals(that.artifactVersion) : that.artifactVersion == null; + } + + @Override + public int hashCode() { + int result = artifactName != null ? artifactName.hashCode() : 0; + result = 31 * result + (artifactType != null ? artifactType.hashCode() : 0); + result = 31 * result + (artifactDescription != null ? artifactDescription.hashCode() : 0); + result = 31 * result + (artifactVersion != null ? artifactVersion.hashCode() : 0); + return result; + } +} diff --git a/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java b/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java new file mode 100644 index 0000000..5c1e213 --- /dev/null +++ b/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java @@ -0,0 +1,170 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.service; + +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStreamReader; +import java.net.URL; +import java.util.Base64; +import java.util.HashMap; +import java.util.List; +import java.util.Map; +import java.util.stream.Collectors; +import org.custommonkey.xmlunit.XMLTestCase; +import org.junit.After; +import org.junit.Before; +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.junit.runner.RunWith; +import org.onap.aai.babel.csar.CsarConverterException; +import org.onap.aai.babel.csar.CsarToXmlConverter; +import org.onap.aai.babel.service.data.BabelArtifact; +import org.onap.aai.babel.util.ArtifactTestUtils; +import org.onap.aai.babel.xml.generator.ModelGenerator; +import org.onap.aai.babel.xml.generator.XmlArtifactGenerationException; +import org.powermock.core.classloader.annotations.PrepareForTest; +import org.powermock.modules.junit4.PowerMockRunner; +import org.xml.sax.SAXException; + +/** + * Tests {@link CsarToXmlConverter} + */ +@RunWith(PowerMockRunner.class) +@PrepareForTest(ModelGenerator.class) +public class CsarToXmlConverterTest extends XMLTestCase { + + private static final String NAME = "the_name_of_the_csar_file.csar"; + private static final String VERSION = "v1"; + + private CsarToXmlConverter converter; + + @Rule + public ExpectedException exception = ExpectedException.none(); + + @Before + public void setUp() { + converter = new CsarToXmlConverter(); + URL url = CsarToXmlConverterTest.class.getClassLoader().getResource("artifact-generator.properties"); + System.setProperty("artifactgenerator.config", url.getPath()); + } + + @After + public void tearDown() { + converter = null; + } + + @Test(expected = NullPointerException.class) + public void generateXmlFromCsar_nullArtifactSupplied() throws CsarConverterException { + converter.generateXmlFromCsar(null, null, null); + } + + @Test(expected = NullPointerException.class) + public void generateXmlFromCsar_missingName() throws CsarConverterException, IOException { + byte[] csarArchive = new ArtifactTestUtils().loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"); + converter.generateXmlFromCsar(csarArchive, null, null); + } + + @Test(expected = NullPointerException.class) + public void generateXmlFromCsar_missingVersion() throws CsarConverterException, IOException { + byte[] csarArchive = new ArtifactTestUtils().loadResource("compressedArtifacts/service-VscpaasTest-csar.csar"); + converter.generateXmlFromCsar(csarArchive, NAME, null); + } + + @Test(expected = CsarConverterException.class) + public void generateXmlFromCsar_noPayloadExists() throws CsarConverterException { + converter.generateXmlFromCsar(new byte[0], NAME, VERSION); + } + + @Test(expected = CsarConverterException.class) + public void generateXmlFromCsar_csarFileHasNoYmlFiles() throws CsarConverterException, IOException { + byte[] csarArchive = new ArtifactTestUtils().loadResource("compressedArtifacts/noYmlFilesArchive.zip"); + converter.generateXmlFromCsar(csarArchive, "noYmlFilesArchive.zip", VERSION); + } + + @Test + public void generateXmlFromCsar_artifactgenerator_config_systemPropertyNotSet() + throws IOException, XmlArtifactGenerationException, CsarConverterException { + exception.expect(CsarConverterException.class); + exception.expectMessage("Cannot generate artifacts. artifactgenerator.config system property not configured"); + + byte[] csarArchive = + new ArtifactTestUtils().loadResource("compressedArtifacts/service-SdWanServiceTest-csar.csar"); + + // Unset the required system property + System.clearProperty("artifactgenerator.config"); + converter.generateXmlFromCsar(csarArchive, VERSION, "service-SdWanServiceTest-csar.csar"); + } + + @Test + public void generateXmlFromCsar() throws CsarConverterException, IOException, XmlArtifactGenerationException { + byte[] csarArchive = + new ArtifactTestUtils().loadResource("compressedArtifacts/service-SdWanServiceTest-csar.csar"); + + Map<String, String> expectedXmlFiles = createExpectedXmlFiles(); + List<BabelArtifact> generatedArtifacts = + converter.generateXmlFromCsar(csarArchive, VERSION, "service-SdWanServiceTest-csar.csar"); + + generatedArtifacts.forEach(ga -> { + try { + + String x1 = expectedXmlFiles.get(ga.getName()); + + String x2 = bytesToString(ga.getPayload()); + + assertXMLEqual("The content of " + ga.getName() + " must match the expected content", x1, x2); + + } catch (SAXException | IOException e) { + fail("There was an Exception parsing the XML: "+e.getMessage()); + } + }); + } + + public String bytesToString(byte[] source) { + ByteArrayInputStream bis = new ByteArrayInputStream(Base64.getDecoder().decode(source)); + + String result = new BufferedReader(new InputStreamReader(bis)).lines().collect(Collectors.joining("\n")); + + return result; + + } + + private Map<String, String> createExpectedXmlFiles() throws IOException { + Map<String, String> xml = new HashMap<>(); + + ArtifactTestUtils utils = new ArtifactTestUtils(); + + String[] filesToLoad = + {"AAI-SD-WAN-Service-Test-service-1.0.xml", "AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml", + "AAI-Tunnel_XConnTest-resource-2.0.xml", "AAI-SD-WAN-Test-VSP-resource-1.0.xml"}; + + for (String s : filesToLoad) { + xml.put(s, utils.loadResourceAsString("generatedXml/" + s)); + + } + + return xml; + } +} diff --git a/src/test/java/org/onap/aai/babel/service/TestGenerateArtifactsServiceImpl.java b/src/test/java/org/onap/aai/babel/service/TestGenerateArtifactsServiceImpl.java new file mode 100644 index 0000000..5d2309f --- /dev/null +++ b/src/test/java/org/onap/aai/babel/service/TestGenerateArtifactsServiceImpl.java @@ -0,0 +1,111 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.service; + +import static org.hamcrest.Matchers.is; +import static org.junit.Assert.assertThat; + +import java.io.IOException; +import java.net.URISyntaxException; +import java.net.URL; +import java.nio.file.Files; +import java.nio.file.Paths; +import java.util.stream.Collectors; +import javax.ws.rs.core.Response; +import org.junit.BeforeClass; +import org.junit.Test; + +/** + * Direct invocation of the generate artifacts service implementation + * + */ +public class TestGenerateArtifactsServiceImpl { + + @BeforeClass + public static void setup() { + URL url = TestGenerateArtifactsServiceImpl.class.getClassLoader().getResource("artifact-generator.properties"); + System.setProperty("artifactgenerator.config", url.getPath()); + } + + @Test + public void testGenerateArtifacts() throws Exception { + String jsonRequest = readstringFromFile("jsonFiles/success_request.json"); + Response response = processJsonRequest(jsonRequest); + assertThat(response.getStatus(), is(Response.Status.OK.getStatusCode())); + assertThat(response.getEntity(), is(readstringFromFile("response/response.json"))); + } + + + @Test + public void testInvalidCsarFile() throws URISyntaxException, IOException{ + String jsonRequest = readstringFromFile("jsonFiles/invalid_csar_request.json"); + Response response = processJsonRequest(jsonRequest); + assertThat(response.getStatus(), is(Response.Status.INTERNAL_SERVER_ERROR.getStatusCode())); + assertThat(response.getEntity(), is("Error converting CSAR artifact to XML model.")); + } + + @Test + public void testInvalidJsonFile() throws URISyntaxException, IOException{ + String jsonRequest = readstringFromFile("jsonFiles/invalid_json_request.json"); + Response response = processJsonRequest(jsonRequest); + assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); + assertThat(response.getEntity(), is("Malformed request.")); + } + + @Test + public void testMissingArtifactName() throws Exception { + String jsonRequest = readstringFromFile("jsonFiles/missing_artifact_name_request.json"); + Response response = processJsonRequest(jsonRequest); + assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); + assertThat(response.getEntity(), is("No artifact name attribute found in the request body." )); + } + + @Test + public void testMissingArtifactVersion() throws Exception { + String jsonRequest = readstringFromFile("jsonFiles/missing_artifact_version_request.json"); + Response response = processJsonRequest(jsonRequest); + assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); + assertThat(response.getEntity(), is("No artifact version attribute found in the request body.")); + } + + @Test + public void testMissingCsarFile() throws Exception { + String jsonRequest = readstringFromFile("jsonFiles/missing_csar_request.json"); + Response response = processJsonRequest(jsonRequest); + assertThat(response.getStatus(), is(Response.Status.BAD_REQUEST.getStatusCode())); + assertThat(response.getEntity(), is("No csar attribute found in the request body.")); + } + + + private Response processJsonRequest(String jsonRequest) { + GenerateArtifactsServiceImpl service = new GenerateArtifactsServiceImpl(/* No authentiction required */ null); + return service.generateArtifacts(jsonRequest); + } + + private String readstringFromFile(String resourceFile) throws IOException, URISyntaxException { + return Files.lines(Paths.get(ClassLoader.getSystemResource(resourceFile).toURI())) + .collect(Collectors.joining()); + } + + +} diff --git a/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java b/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java new file mode 100644 index 0000000..74f0c0e --- /dev/null +++ b/src/test/java/org/onap/aai/babel/util/ArtifactTestUtils.java @@ -0,0 +1,100 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.util; + +import static org.hamcrest.CoreMatchers.is; +import static org.junit.Assert.assertThat; + +import com.google.common.base.Throwables; +import java.io.BufferedReader; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.InputStreamReader; +import java.util.Base64; +import java.util.List; +import java.util.Set; +import java.util.stream.Collectors; +import org.apache.commons.io.IOUtils; +import org.openecomp.sdc.generator.data.Artifact; + +/** + * This class provides some utilities to assist with running tests. + */ +public class ArtifactTestUtils { + + public void performYmlAsserts(List<Artifact> toscaFiles, List<String> ymlPayloadsToLoad) { + assertThat("An unexpected number of yml files have been extracted", toscaFiles.size(), + is(ymlPayloadsToLoad.size())); + + Set<String> ymlPayloads = ymlPayloadsToLoad.stream().map(s -> { + try { + return loadResourceAsString(s); + } catch (IOException e) { + throw Throwables.propagate(e); + } + }).collect(Collectors.toSet()); + + toscaFiles.forEach(ts -> { + boolean payloadFound = false; + + String s = bytesToString(ts.getPayload()); + + for (String ymlPayload : ymlPayloads) { + String tscontent = ymlPayload; + + if (s.endsWith(tscontent)) { + payloadFound = true; + break; + } + } + assertThat("The content of each yml file must match the actual content of the file extracted (" + + ts.getName() + ")", payloadFound, is(true)); + }); + } + + public byte[] loadResource(String resourceName) throws IOException { + + return IOUtils.toByteArray(ArtifactTestUtils.class.getClassLoader().getResource(resourceName)); + } + + public String loadResourceAsString(String resourceName) throws IOException { + + InputStream is = ArtifactTestUtils.class.getClassLoader().getResource(resourceName).openStream(); + + String result = new BufferedReader(new InputStreamReader(is)).lines().collect(Collectors.joining("\n")); + + return result; + + } + + public String bytesToString(byte[] source) { + ByteArrayInputStream bis = new ByteArrayInputStream(Base64.getDecoder().decode(source)); + + String result = new BufferedReader(new InputStreamReader(bis)).lines().collect(Collectors.joining("\n")); + + return result; + + } + +} diff --git a/src/test/java/org/onap/aai/babel/util/TestRequestValidator.java b/src/test/java/org/onap/aai/babel/util/TestRequestValidator.java new file mode 100644 index 0000000..030c24d --- /dev/null +++ b/src/test/java/org/onap/aai/babel/util/TestRequestValidator.java @@ -0,0 +1,72 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017 European Software Marketing Ltd. + * ================================================================================ + * 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.babel.util; + +import org.junit.Rule; +import org.junit.Test; +import org.junit.rules.ExpectedException; +import org.onap.aai.babel.service.data.BabelRequest; + +public class TestRequestValidator { + + @Rule + public ExpectedException exception = ExpectedException.none(); + + @Test + public void testMissingArtifactNameExceptionThrown() throws Exception{ + exception.expect(RequestValidationException.class); + exception.expectMessage("No artifact name attribute found in the request body."); + + BabelRequest request = new BabelRequest(); + request.setCsar("UEsDBBQACAgIAGsrz0oAAAAAAAAAAAAAAAAJAAAAY3Nhci5tZXRhC3Z"); + request.setArtifactVersion("1.0"); + request.setArtifactName(null); + RequestValidator.validateRequest(request); + } + + + @Test + public void testMissingArtifactVersionExceptionThrown() throws Exception{ + exception.expect(RequestValidationException.class); + exception.expectMessage("No artifact version attribute found in the request body."); + + BabelRequest request = new BabelRequest(); + request.setCsar("UEsDBBQACAgIAGsrz0oAAAAAAAAAAAAAAAAJAAAAY3Nhci5tZXRhC3Z"); + request.setArtifactVersion(null); + request.setArtifactName("hello"); + RequestValidator.validateRequest(request); + } + + @Test + public void testMissingCsarFile() throws Exception{ + exception.expect(RequestValidationException.class); + exception.expectMessage("No csar attribute found in the request body."); + + BabelRequest request = new BabelRequest(); + request.setCsar(null); + request.setArtifactVersion("1.0"); + request.setArtifactName("hello"); + RequestValidator.validateRequest(request); + } + +} diff --git a/src/test/resources/artifact-generator.properties b/src/test/resources/artifact-generator.properties new file mode 100644 index 0000000..1d7e5fa --- /dev/null +++ b/src/test/resources/artifact-generator.properties @@ -0,0 +1,264 @@ +#action widget details +AAI.model-version-id.action=fd7fb09e-d930-41b9-b83f-cfde9df48640 +AAI.model-invariant-id.action=af593b4b-490e-4665-ad74-2f6351c0a7ce +#action-data widget details +AAI.model-invariant-id.action-data=9551346c-7d8b-4daf-9926-b93e96e2344a +AAI.model-version-id.action-data=2f80c596-27e5-4ca9-b5bb-e03a7fd4c0fd +#allotted-resource widget details +AAI.model-invariant-id.allotted-resource=f6d6a23d-a1a9-48ff-8419-b6530da2d381 +AAI.model-version-id.allotted-resource=7ad0915f-25c0-4a70-b9bc-185a75f87564 +#availability-zone widget details +AAI.model-version-id.availability-zone=6c092fb1-21b2-456b-9e01-67fb4de1896e +AAI.model-invariant-id.availability-zone=61b88c01-d819-41c0-8e21-7fd7ba47148e +#az-and-dvs-switches widget details +AAI.model-version-id.az-and-dvs-switches=b2dea88d-78a0-49bf-95c9-5819df08e966 +AAI.model-invariant-id.az-and-dvs-switches=53dc00d4-e6d9-48ec-b6cc-3d3797e9b896 +#class-of-service widget details +AAI.model-version-id.class-of-service=d2fb27cc-15eb-4c4e-828e-71d41aaecc5b +AAI.model-invariant-id.class-of-service=18094b19-d16d-4822-8acf-e92c6aefa178 +#cloud-region widget details +AAI.model-version-id.cloud-region=2a160989-b202-47dd-874b-4a0f275998f7 +AAI.model-invariant-id.cloud-region=425b2158-e51d-4509-9945-dad4556474a3 +#complex widget details +AAI.model-invariant-id.complex=af91c2f7-35fc-43cf-a13d-443f385b2353 +AAI.model-version-id.complex=3a8ab1ee-9220-4fe8-b89c-9251d160ddc2 +#connector widget details +AAI.model-version-id.connector=22104c9f-29fd-462f-be07-96cd6b46dd33 +AAI.model-invariant-id.connector=4c01c948-7607-4d66-8a6c-99c2c2717936 +#constrained-element-set widget details +AAI.model-invariant-id.constrained-element-set=c0292b4f-ee97-40cc-8c2e-f967c48f5701 +AAI.model-version-id.constrained-element-set=01102126-9c04-4a89-945b-b131e61e95d7 +#ctag-assignment widget details +AAI.model-version-id.ctag-assignment=44e5cb1f-0938-41aa-b766-d4595109fe89 +AAI.model-invariant-id.ctag-assignment=fcb8d46b-b656-4ad6-8fa4-22cef74b443f +#ctag-pool widget details +AAI.model-invariant-id.ctag-pool=46c51d4e-d67e-4a9c-b1f5-49b1e9c6fcaa +AAI.model-version-id.ctag-pool=2056c41f-23b9-4de7-9f50-819adad37d76 +#customer widget details +AAI.model-invariant-id.customer=c1d4305f-cdbd-4bbe-9069-a2f4978fd89e +AAI.model-version-id.customer=d4df5c27-98a1-4812-a8aa-c17f055b7a3f +#cvlan-tag-entry widget details +AAI.model-version-id.cvlan-tag-entry=c3878ffb-8d85-4114-bee6-e4074a9db10b +AAI.model-invariant-id.cvlan-tag-entry=245cf4b0-7cc5-4eea-bbd9-753e939adcab +#dvs-switch widget details +AAI.model-invariant-id.dvs-switch=98fbb471-1f86-428e-bd8a-c8a25de6fa23 +AAI.model-version-id.dvs-switch=4cb44ae8-e3ab-452a-9f95-bcc8a44c55ea +#edge-prop-names widget details +AAI.model-invariant-id.edge-prop-names=7a08cad4-8759-46a5-8245-095d1ba57ac6 +AAI.model-version-id.edge-prop-names=f0442326-8201-4d0e-857c-74b4ddcbfc9f +#element-choice-set widget details +AAI.model-invariant-id.element-choice-set=9a011958-7165-47a3-b872-00951d1f09ae +AAI.model-version-id.element-choice-set=af27fbfd-598d-44da-aeae-0f9d3a5fcd6a +#entitlement widget details +AAI.model-version-id.entitlement=7e27ba2e-b7db-4e13-9fae-d142152ef98a +AAI.model-invariant-id.entitlement=ae75b5a0-d5e1-4f3a-b8fb-37626a753da3 +#flavor widget details +AAI.model-invariant-id.flavor=bace8d1c-a261-4041-9e37-823117415d0f +AAI.model-version-id.flavor=36200fb5-f251-4f5d-a520-7c5ad5c2cd4b +#generic-vnf widget details +AAI.model-version-id.generic-vnf=93a6166f-b3d5-4f06-b4ba-aed48d009ad9 +AAI.model-invariant-id.generic-vnf=acc6edd8-a8d4-4b93-afaa-0994068be14c +#group-assignment widget details +AAI.model-invariant-id.group-assignment=7cc05f25-7ba2-42b7-a237-c5662a1689e1 +AAI.model-version-id.group-assignment=fe578080-ce19-4604-8760-fc264fbb2565 +#image widget details +AAI.model-version-id.image=f6a038c2-820c-42ba-8c2b-375e24e8f932 +AAI.model-invariant-id.image=3f4c7204-739b-4bbb-87a7-8a6856439c90 +#include-node-filter widget details +AAI.model-invariant-id.include-node-filter=2a2d8ad2-af0a-4e1f-9982-0c899e7dc827 +AAI.model-version-id.include-node-filter=f05f804d-7057-4ffe-bdc5-39f2f0c9c9fd +#instance-group widget details +AAI.model-version-id.instance-group=8e6ee9dc-9017-444a-83b3-219edb018128 +AAI.model-invariant-id.instance-group=3bf1e610-45f7-4ad6-b833-ca4c5ee6a3fd +#inventory-item widget details +AAI.model-invariant-id.inventory-item=cd57d844-9017-4078-aa19-926935a3d77c +AAI.model-version-id.inventory-item=69957f4a-2155-4b95-8d72-d6dd9b88b27b +#inventory-item-data widget details +AAI.model-version-id.inventory-item-data=0e54bb87-bd6e-4a2b-ad1c-6d935b87ae51 +AAI.model-invariant-id.inventory-item-data=87a383ae-cf03-432e-a9de-04e6a622d0fd +#ipsec-configuration widget details +AAI.model-invariant-id.ipsec-configuration=aca4c310-cb45-42bd-9f88-73e40ba7b962 +AAI.model-version-id.ipsec-configuration=d949fd10-36bf-408a-ac7a-cad5004d2e0d +#key-data widget details +AAI.model-version-id.key-data=c23ea04d-1a3b-453d-bc49-a6c783a5e92b +AAI.model-invariant-id.key-data=f5faa464-c2f2-4cc3-89d2-a90452dc3a07 +#l3-interface-ipv4-address-list widget details +AAI.model-version-id.l3-interface-ipv4-address-list=41e76b6f-1e06-4fd4-82cd-81c50fc4574b +AAI.model-invariant-id.l3-interface-ipv4-address-list=aad85df2-09be-40fa-b867-16415e4e10e2 +#l3-interface-ipv6-address-list widget details +AAI.model-invariant-id.l3-interface-ipv6-address-list=82966045-43ee-4982-8307-7e9610866140 +AAI.model-version-id.l3-interface-ipv6-address-list=d040621d-541a-477b-bb1b-a2b61b14e295 +#l3-network widget details +AAI.model-version-id.l3-network=9111f20f-e680-4001-b83f-19a2fc23bfc1 +AAI.model-invariant-id.l3-network=3d560d81-57d0-438b-a2a1-5334dba0651a +#lag-interface widget details +AAI.model-version-id.lag-interface=ce95f7c3-b61b-4758-ae9e-7e943b1c103d +AAI.model-invariant-id.lag-interface=e0ee9bde-c1fc-4651-a95d-8e0597bf7d70 +#lag-link widget details +AAI.model-version-id.lag-link=d29a087a-af59-4053-a3f8-0f95a92faa75 +AAI.model-invariant-id.lag-link=86ffe6e5-4d0e-4cec-80b5-5c38aa3eff98 +#license widget details +AAI.model-invariant-id.license=b9a9b337-1f86-42d3-b9f9-f987a089507c +AAI.model-version-id.license=6889274b-a1dc-40ab-9090-93677e13e2e6 +#license-key-resource widget details +AAI.model-invariant-id.license-key-resource=9022ebfe-b54f-4911-a6b2-8c3f5ec189b7 +AAI.model-version-id.license-key-resource=24b25f8c-b8bd-4c62-9421-87c12667aac9 +#l-interface widget details +AAI.model-version-id.l-interface=a32613fd-18b9-459e-aab8-fffb3912966a +AAI.model-invariant-id.l-interface=cea0a982-8d55-4093-921e-418fbccf7060 +#logical-link widget details +AAI.model-version-id.logical-link=a1481a38-f8ba-4ae4-bdf1-06c2c6af4c54 +AAI.model-invariant-id.logical-link=fe012535-2c31-4a39-a739-612374c638a0 +#metadatum widget details +AAI.model-invariant-id.metadatum=86dbb63a-265e-4614-993f-6771c30b56a5 +AAI.model-version-id.metadatum=6bae950e-8939-41d3-a6a7-251b03e4c1fc +#model widget details +AAI.model-invariant-id.model=06d1418a-5faa-452d-a94b-a2829df5f67b +AAI.model-version-id.model=1f51c05c-b164-4c27-9c03-5cbb239fd6be +#model-constraint widget details +AAI.model-invariant-id.model-constraint=c28966f3-e758-4483-b37b-a90b05d3dd33 +AAI.model-version-id.model-constraint=ad70dd19-f156-4fb5-a865-97b5563b0d37 +#model-element widget details +AAI.model-invariant-id.model-element=2076e726-3577-477a-a300-7fa65cd4df11 +AAI.model-version-id.model-element=753e813a-ba9e-4a1d-ab34-b2f6dc6eec0c +#multicast-configuration widget details +AAI.model-invariant-id.multicast-configuration=ea78c9e3-514d-4a0a-9162-13837fa54c35 +AAI.model-version-id.multicast-configuration=666a06ee-4b57-46df-bacf-908da8f10c3f +#named-query widget details +AAI.model-version-id.named-query=5c3b7c33-afa3-4be5-8da7-1a5ac6f99896 +AAI.model-invariant-id.named-query=80b712fd-0ad3-4180-a99c-8c995cf1cc32 +#named-query-element widget details +AAI.model-version-id.named-query-element=204c641a-3494-48c8-979a-86856f5fd32a +AAI.model-invariant-id.named-query-element=3c504d40-b847-424c-9d25-4fb7e0a3e994 +#network-policy widget details +AAI.model-invariant-id.network-policy=6aa05779-94d7-4d8b-9bee-59ef2ab0c246 +AAI.model-version-id.network-policy=a0ccd9dc-7062-4940-9bcc-e91dd28af510 +#network-profile widget details +AAI.model-version-id.network-profile=01f45471-4240-498c-a9e1-235dc0b8b4a6 +AAI.model-invariant-id.network-profile=2734b44a-b8a2-40f6-957d-6256589e5d00 +#newvce widget details +AAI.model-version-id.newvce=7c79e11f-a408-4593-aa86-ba948a1236af +AAI.model-invariant-id.newvce=4b05ec9c-c55d-4987-83ff-e08d6ddb694f +#oam-network widget details +AAI.model-invariant-id.oam-network=2851cf01-9c40-4064-87d4-6184a6fcff35 +AAI.model-version-id.oam-network=f4fb34f3-fd6e-4a8f-a3fb-4ab61a343b79 +#physical-link widget details +AAI.model-invariant-id.physical-link=c822d81f-822f-4304-9623-1025b53da568 +AAI.model-version-id.physical-link=9c523936-95b4-4d7f-9f53-6bdfe0cf2c05 +#p-interface widget details +AAI.model-invariant-id.p-interface=94043c37-4e73-439c-a790-0fdd697924cd +AAI.model-version-id.p-interface=d2cdb2d0-fc1f-4a57-a89e-591b1c4e3754 +#pnf widget details +AAI.model-version-id.pnf=e9f1fa7d-c839-418a-9601-03dc0d2ad687 +AAI.model-invariant-id.pnf=862b25a1-262a-4961-bdaa-cdc55d69785a +#port-group widget details +AAI.model-version-id.port-group=03e8bb6b-b48a-46ae-b5d4-e5af577e6844 +AAI.model-invariant-id.port-group=8ce940fb-55d7-4230-9e7f-a56cc2741f77 +#property-constraint widget details +AAI.model-version-id.property-constraint=81706bbd-981e-4362-ae20-995cbcb2d995 +AAI.model-invariant-id.property-constraint=f4a863c3-6886-470a-a6ae-05723837ea45 +#pserver widget details +AAI.model-invariant-id.pserver=6d932c8f-463b-4e76-83fb-87acfbaa2e2d +AAI.model-version-id.pserver=72f0d495-bc27-4653-9e1a-eef76bd34bc9 +#related-lookup widget details +AAI.model-invariant-id.related-lookup=468f6f5b-2996-41bb-b2a3-7cf9613ebb9b +AAI.model-version-id.related-lookup=0988bab5-bf4f-4938-a419-ab249867d12a +#reserved-prop-names widget details +AAI.model-invariant-id.reserved-prop-names=0c3e0ba3-618c-498d-9127-c8d42b00170f +AAI.model-version-id.reserved-prop-names=ac49d26d-9163-430e-934a-13b738a04f5c +#result-data widget details +AAI.model-version-id.result-data=4e9b50aa-5227-4f6f-b489-62e6bbc03c79 +AAI.model-invariant-id.result-data=ff656f23-6185-406f-9006-4b26834f3e1c +#route-table-reference widget details +AAI.model-version-id.route-table-reference=fed7e326-03a7-45ff-a3f2-471470d268c4 +AAI.model-invariant-id.route-table-reference=a8614b63-2636-4c4f-98df-fd448c4241db +#routing-instance widget details +AAI.model-invariant-id.routing-instance=1c2ded4f-8b01-4193-829c-966847dfec3e +AAI.model-version-id.routing-instance=3ccbcbc7-d19e-44d5-a52f-7e18aa8d69fa +#secondary-filter widget details +AAI.model-version-id.secondary-filter=1380619d-dd1a-4cec-b755-c6407833e065 +AAI.model-invariant-id.secondary-filter=738ff299-6290-4c00-8998-bd0e96a07b93 +#segmentation-assignment widget details +AAI.model-invariant-id.segmentation-assignment=6e814aee-46e1-4583-a9d4-0049bfd2b59b +AAI.model-version-id.segmentation-assignment=c5171ae0-44fb-4c04-b482-d56702241a44 +#service widget details +AAI.model-version-id.service=ecce2c42-3957-4ae0-9442-54bc6afe27b6 +AAI.model-invariant-id.service=07a3a60b-1b6c-4367-8173-8014386f89e3 +#service-capability widget details +AAI.model-invariant-id.service-capability=b1a7cc05-d19d-443b-a5d1-733e325c4232 +AAI.model-version-id.service-capability=f9cfec1b-18da-4bba-bd83-4b26cca115cd +#service-instance widget details +AAI.model-invariant-id.service-instance=82194af1-3c2c-485a-8f44-420e22a9eaa4 +AAI.model-version-id.service-instance=46b92144-923a-4d20-b85a-3cbd847668a9 +#service-subscription widget details +AAI.model-invariant-id.service-subscription=2e1a602a-acd8-4f78-94ff-618b802a303b +AAI.model-version-id.service-subscription=5e68299a-79f2-4bfb-8fbc-2bae877a2459 +#site-pair widget details +AAI.model-version-id.site-pair=7106bc02-6552-4fc3-8a56-4f3df9034531 +AAI.model-invariant-id.site-pair=db63f3e6-f8d1-484e-8d5e-191600b7914b +#site-pair-set widget details +AAI.model-invariant-id.site-pair-set=5d4dae3e-b402-4bfd-909e-ece12ff75d26 +AAI.model-version-id.site-pair-set=a5c6c1bc-dc38-468e-9459-bb08f87247df +#snapshot widget details +AAI.model-version-id.snapshot=962a7c8b-687f-4d32-a775-fe098e214bcd +AAI.model-invariant-id.snapshot=24de00ef-aead-4b52-995b-0adf8d4bd90d +#sriov-vf widget details +AAI.model-version-id.sriov-vf=1e8b331f-3d4a-4160-b7aa-f4d5a8916625 +AAI.model-invariant-id.sriov-vf=04b2935f-33c4-40a9-8af0-8b52690042dc +#start-node-filter widget details +AAI.model-version-id.start-node-filter=aad96fd3-e75f-42fc-9777-3450c36f1168 +AAI.model-invariant-id.start-node-filter=083093a3-e407-447a-ba5d-7583e4d23e1d +#subnet widget details +AAI.model-version-id.subnet=f902a6bc-6be4-4fe5-8458-a6ec0056b374 +AAI.model-invariant-id.subnet=1b2c9ba7-e449-4831-ba15-3073672f5ef2 +#tagged-inventory-item-list widget details +AAI.model-invariant-id.tagged-inventory-item-list=e78a7eaa-f65d-4919-9c2b-5b258c8c4d7e +AAI.model-version-id.tagged-inventory-item-list=c246f6e2-e3a1-4697-94c0-5672a7fbbf04 +#tenant widget details +AAI.model-invariant-id.tenant=97c26c99-6870-44c1-8a07-1d900d3f4ce6 +AAI.model-version-id.tenant=abcc54bc-bb74-49dc-9043-7f7171707545 +#tunnel-xconnect widget details +AAI.model-invariant-id.tunnel-xconnect=50b9e2fa-005c-4bbe-b651-3251dece4cd8 +AAI.model-version-id.tunnel-xconnect=e7cb4ca8-e1a5-4487-a716-4ae0bcd8aef5 +#update-node-key widget details +AAI.model-version-id.update-node-key=6004cfa6-eb6d-4062-971f-b1fde6b74aa0 +AAI.model-invariant-id.update-node-key=fe81c801-f65d-408a-b2b7-a729a18f8154 +#vce widget details +AAI.model-version-id.vce=b6cf54b5-ec45-43e1-be64-97b4e1513333 +AAI.model-invariant-id.vce=bab6dceb-e7e6-4301-a5e0-a7399b48d792 +#vf-module widget details +AAI.model-invariant-id.vf-module=ef86f9c5-2165-44f3-8fc3-96018b609ea5 +AAI.model-version-id.vf-module=c00563ae-812b-4e62-8330-7c4d0f47088a +#vig-server widget details +AAI.model-version-id.vig-server=8e8c22f1-fbdf-48ea-844c-8bdeb44e7b16 +AAI.model-invariant-id.vig-server=bed7c3b7-35d0-4cd9-abde-41b20e68b28e +#virtual-data-center widget details +AAI.model-invariant-id.virtual-data-center=5150abcf-0c5f-4593-9afe-a19c48fc4824 +AAI.model-version-id.virtual-data-center=6dd43ced-d789-47af-a759-d3abc14e3ac1 +#vlan widget details +AAI.model-version-id.vlan=257d88a5-a269-4c35-944f-aca04fbdb791 +AAI.model-invariant-id.vlan=d2b1eaf1-ae59-4116-9ee4-aa0179faa4f8 +#vnfc widget details +AAI.model-invariant-id.vnfc=96129eb9-f0de-4e05-8af2-73146473f766 +AAI.model-version-id.vnfc=5761e0a7-c6df-4d8a-9ebd-b8f445054dec +#vnf-image widget details +AAI.model-invariant-id.vnf-image=f9a628ff-7aa0-40e2-a93d-02d91c950982 +AAI.model-version-id.vnf-image=c4d3e747-ba4a-4b17-9896-94c6f18c19d3 +#volume widget details +AAI.model-version-id.volume=0fbe2e8f-4d91-4415-a772-88387049b38d +AAI.model-invariant-id.volume=ddd739b4-2b25-46c4-affc-41a32af5cc42 +#volume-group widget details +AAI.model-invariant-id.volume-group=fcec1b02-b2d0-4834-aef8-d71be04717dd +AAI.model-version-id.volume-group=99d44c90-1f61-4418-b9a6-56586bf38c79 +#vpe widget details +AAI.model-invariant-id.vpe=053ec3a7-5b72-492d-b54d-123805a9b967 +AAI.model-version-id.vpe=203817d3-829c-42d4-942d-2a935478e993 +#vpls-pe widget details +AAI.model-version-id.vpls-pe=b1566228-6785-4ce1-aea2-053736f80341 +AAI.model-invariant-id.vpls-pe=457ba89b-334c-4fbd-acc4-160ac0e0cdc0 +#vpn-binding widget details +AAI.model-invariant-id.vpn-binding=9e23b675-db2b-488b-b459-57aa9857baa0 +AAI.model-version-id.vpn-binding=21a146e5-9901-448c-9197-723076770119 +#vserver widget details +AAI.model-invariant-id.vserver=ff69d4e0-a8e8-4108-bdb0-dd63217e63c7 +AAI.model-version-id.vserver=8ecb2c5d-7176-4317-a255-26274edfdd53
\ No newline at end of file diff --git a/src/test/resources/auth/auth_policy.json b/src/test/resources/auth/auth_policy.json new file mode 100644 index 0000000..a0496b7 --- /dev/null +++ b/src/test/resources/auth/auth_policy.json @@ -0,0 +1,55 @@ +{"roles": [ + { + "name": "admin", + "functions": [ + { + "name": "actions", + "methods": [ + {"name": "GET"}, + {"name": "DELETE"}, + {"name": "PUT"} + ] + }, + { + "name": "getAndPublish", + "methods": [{"name": "POST"}] + } + ], + "users": [ + {"username": "CN=common-name, OU=org-unit, O=org, L=location, ST=state, C=US"}, + {"username": "CN=test, OU=qa, O=Test Ltd, L=London, ST=London, C=GB"} + ] + }, + { + "name": "ops", + "functions": [{ + "name": "actions", + "methods": [{"name": "POST"}] + }], + "users": [ + {"username": "CN=common-name, OU=org-unit, O=org, L=location, ST=state, C=US"}, + {"username": "CN=test, OU=qa, O=Test Ltd, L=London, ST=London, C=GB"} + ] + }, + { + "name": "basicauth", + "functions": [{ + "name": "util", + "methods": [{"name": "GET"}] + }], + "users": [{ + "user": "aai", + "pass": "OBF:1u2a1t2v1vgb1s3g1s3m1vgj1t3b1u30" + }] + }, + { + "name": "nofuncauth", + "functions": [{ + "name": "nofuncutil" + }], + "users": [{ + "user": "aai", + "pass": "OBF:1u2a1t2v1vgb1s3g1s3m1vgj1t3b1u30" + }] + } +]} diff --git a/src/test/resources/compressedArtifacts/noYmlFilesArchive.zip b/src/test/resources/compressedArtifacts/noYmlFilesArchive.zip Binary files differnew file mode 100644 index 0000000..4fb37c2 --- /dev/null +++ b/src/test/resources/compressedArtifacts/noYmlFilesArchive.zip diff --git a/src/test/resources/compressedArtifacts/service-SdWanServiceTest-csar.csar b/src/test/resources/compressedArtifacts/service-SdWanServiceTest-csar.csar Binary files differnew file mode 100644 index 0000000..9d6132a --- /dev/null +++ b/src/test/resources/compressedArtifacts/service-SdWanServiceTest-csar.csar diff --git a/src/test/resources/generatedXml/AAI-SD-WAN-Service-Test-service-1.0.xml b/src/test/resources/generatedXml/AAI-SD-WAN-Service-Test-service-1.0.xml new file mode 100644 index 0000000..7748998 --- /dev/null +++ b/src/test/resources/generatedXml/AAI-SD-WAN-Service-Test-service-1.0.xml @@ -0,0 +1,69 @@ +<model> + <model-invariant-id>1c111111-1111-1111-1111-111111111111</model-invariant-id> + <model-type>service</model-type> + <model-vers> + <model-ver> + <model-version-id>2c111111-1111-1111-1111-111111111111</model-version-id> + <model-name>SD-WAN-Service-Test</model-name> + <model-version>1.0</model-version> + <model-description>SD-WAN-Service-Test</model-description> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>2a111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>1a111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>2b111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>1b111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>46b92144-923a-4d20-b85a-3cbd847668a9</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>82194af1-3c2c-485a-8f44-420e22a9eaa4</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model> diff --git a/src/test/resources/generatedXml/AAI-SD-WAN-Test-VSP-resource-1.0.xml b/src/test/resources/generatedXml/AAI-SD-WAN-Test-VSP-resource-1.0.xml new file mode 100644 index 0000000..1cd85e8 --- /dev/null +++ b/src/test/resources/generatedXml/AAI-SD-WAN-Test-VSP-resource-1.0.xml @@ -0,0 +1,51 @@ +<model> + <model-invariant-id>1a111111-1111-1111-1111-111111111111</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>2a111111-1111-1111-1111-111111111111</model-version-id> + <model-name>SD-WAN-Test-VSP</model-name> + <model-version>1.0</model-version> + <model-description>SD-WAN-Test-VSP</model-description> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>7a111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>6a111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>93a6166f-b3d5-4f06-b4ba-aed48d009ad9</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>acc6edd8-a8d4-4b93-afaa-0994068be14c</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model> diff --git a/src/test/resources/generatedXml/AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml b/src/test/resources/generatedXml/AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml new file mode 100644 index 0000000..6e221ce --- /dev/null +++ b/src/test/resources/generatedXml/AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml @@ -0,0 +1,123 @@ +<model> + <model-invariant-id>6a111111-1111-1111-1111-111111111111</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>7a111111-1111-1111-1111-111111111111</model-version-id> + <model-name>SdWanTestVsp..DUMMY..module-0</model-name> + <model-version>2</model-version> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>f6a038c2-820c-42ba-8c2b-375e24e8f932</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>3f4c7204-739b-4bbb-87a7-8a6856439c90</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>abcc54bc-bb74-49dc-9043-7f7171707545</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>97c26c99-6870-44c1-8a07-1d900d3f4ce6</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>36200fb5-f251-4f5d-a520-7c5ad5c2cd4b</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>bace8d1c-a261-4041-9e37-823117415d0f</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>5761e0a7-c6df-4d8a-9ebd-b8f445054dec</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>96129eb9-f0de-4e05-8af2-73146473f766</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>8ecb2c5d-7176-4317-a255-26274edfdd53</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>ff69d4e0-a8e8-4108-bdb0-dd63217e63c7</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>c00563ae-812b-4e62-8330-7c4d0f47088a</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>ef86f9c5-2165-44f3-8fc3-96018b609ea5</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model> diff --git a/src/test/resources/generatedXml/AAI-Tunnel_XConnTest-resource-2.0.xml b/src/test/resources/generatedXml/AAI-Tunnel_XConnTest-resource-2.0.xml new file mode 100644 index 0000000..ccecc80 --- /dev/null +++ b/src/test/resources/generatedXml/AAI-Tunnel_XConnTest-resource-2.0.xml @@ -0,0 +1,69 @@ +<model> + <model-invariant-id>1b111111-1111-1111-1111-111111111111</model-invariant-id> + <model-type>resource</model-type> + <model-vers> + <model-ver> + <model-version-id>2b111111-1111-1111-1111-111111111111</model-version-id> + <model-name>Tunnel_XConnTest</model-name> + <model-version>2.0</model-version> + <model-description>Tunnel_XConnTest</model-description> + <model-elements> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements> + <model-element> + <new-data-del-flag>F</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>7b111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>6b111111-1111-1111-1111-111111111111</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + <model-element> + <new-data-del-flag>T</new-data-del-flag> + <cardinality>unbounded</cardinality> + <model-elements/> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>e7cb4ca8-e1a5-4487-a716-4ae0bcd8aef5</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>50b9e2fa-005c-4bbe-b651-3251dece4cd8</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + <relationship-list> + <relationship> + <related-to>model-ver</related-to> + <relationship-data> + <relationship-key>model-ver.model-version-id</relationship-key> + <relationship-value>7ad0915f-25c0-4a70-b9bc-185a75f87564</relationship-value> + </relationship-data> + <relationship-data> + <relationship-key>model.model-invariant-id</relationship-key> + <relationship-value>f6d6a23d-a1a9-48ff-8419-b6530da2d381</relationship-value> + </relationship-data> + </relationship> + </relationship-list> + </model-element> + </model-elements> + </model-ver> + </model-vers> +</model> diff --git a/src/test/resources/jsonFiles/invalid_csar_request.json b/src/test/resources/jsonFiles/invalid_csar_request.json new file mode 100644 index 0000000..3742f36 --- /dev/null +++ b/src/test/resources/jsonFiles/invalid_csar_request.json @@ -0,0 +1,3 @@ +{"csar": "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SVBfTXV4X0RlbXV4LXVwZGF0ZWQtcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEoPxTTMggIAAN4PAAA7AAAAAAAAAAAAAAAAADY3AABBcnRpZmFjdHMvQUFJLVR1bm5lbF9YQ29ubi1mb3ItREhWLVRlc3RpbmctcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEott6ixQgIAAEULAAA5AAAAAAAAAAAAAAAAACE6AABBcnRpZmFjdHMvQUFJLVNlcnZpY2VfQWRtaW4tZm9yLURIVi1UZXN0LXJlc291cmNlLTEuMC54bWxQSwECFAAUAAgICAD9roRKhVs/IKwDAABhJQAAQAAAAAAAAAAAAAAAAADKPAAAQXJ0aWZhY3RzL0FBSS1WaG5mRm9yRTJlVGVzdC4uYmFzZV9URVNULi5tb2R1bGUtMC1yZXNvdXJjZS0yLnhtbFBLAQIUABQACAgIAP2uhEpIeXXPNgIAADELAAAwAAAAAAAAAAAAAAAAAORAAABBcnRpZmFjdHMvQUFJLXZITkYtZm9yLURIVi1UZXN0LXJlc291cmNlLTIuMC54bWxQSwUGAAAAAAwADACcBAAAeEMAAAAA", + "artifactVersion":"1.0", + "artifactName":"hello"}
\ No newline at end of file diff --git a/src/test/resources/jsonFiles/invalid_json_request.json b/src/test/resources/jsonFiles/invalid_json_request.json new file mode 100644 index 0000000..4600202 --- /dev/null +++ b/src/test/resources/jsonFiles/invalid_json_request.json @@ -0,0 +1,3 @@ +{"csar": "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QUktSVBfTXV4X0RlbXV4LXVwZGF0ZWQtcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEoPxTTMggIAAN4PAAA7AAAAAAAAAAAAAAAAADY3AABBcnRpZmFjdHMvQUFJLVR1bm5lbF9YQ29ubi1mb3ItREhWLVRlc3RpbmctcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEott6ixQgIAAEULAAA5AAAAAAAAAAAAAAAAACE6AABBcnRpZmFjdHMvQUFJLVNlcnZpY2VfQWRtaW4tZm9yLURIVi1UZXN0LXJlc291cmNlLTEuMC54bWxQSwECFAAUAAgICAD9roRKhVs/IKwDAABhJQAAQAAAAAAAAAAAAAAAAADKPAAAQXJ0aWZhY3RzL0FBSS1WaG5mRm9yRTJlVGVzdC4uYmFzZV9URVNULi5tb2R1bGUtMC1yZXNvdXJjZS0yLnhtbFBLAQIUABQACAgIAP2uhEpIeXXPNgIAADELAAAwAAAAAAAAAAAAAAAAAORAAABBcnRpZmFjdHMvQUFJLXZITkYtZm9yLURIVi1UZXN0LXJlc291cmNlLTIuMC54bWxQSwUGAAAAAAwADACcBAAAeEMAAAAA", + "artifactVersion":"1.0", + "artifactName":"hello"
\ No newline at end of file diff --git a/src/test/resources/jsonFiles/missing_artifact_name_request.json b/src/test/resources/jsonFiles/missing_artifact_name_request.json new file mode 100644 index 0000000..a5f4948 --- /dev/null +++ b/src/test/resources/jsonFiles/missing_artifact_name_request.json @@ -0,0 +1,3 @@ +{"csar": "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QUktSVBfTXV4X0RlbXV4LXVwZGF0ZWQtcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEoPxTTMggIAAN4PAAA7AAAAAAAAAAAAAAAAADY3AABBcnRpZmFjdHMvQUFJLVR1bm5lbF9YQ29ubi1mb3ItREhWLVRlc3RpbmctcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEott6ixQgIAAEULAAA5AAAAAAAAAAAAAAAAACE6AABBcnRpZmFjdHMvQUFJLVNlcnZpY2VfQWRtaW4tZm9yLURIVi1UZXN0LXJlc291cmNlLTEuMC54bWxQSwECFAAUAAgICAD9roRKhVs/IKwDAABhJQAAQAAAAAAAAAAAAAAAAADKPAAAQXJ0aWZhY3RzL0FBSS1WaG5mRm9yRTJlVGVzdC4uYmFzZV9URVNULi5tb2R1bGUtMC1yZXNvdXJjZS0yLnhtbFBLAQIUABQACAgIAP2uhEpIeXXPNgIAADELAAAwAAAAAAAAAAAAAAAAAORAAABBcnRpZmFjdHMvQUFJLXZITkYtZm9yLURIVi1UZXN0LXJlc291cmNlLTIuMC54bWxQSwUGAAAAAAwADACcBAAAeEMAAAAA", + "artifactVersion":"1.0" + }
\ No newline at end of file diff --git a/src/test/resources/jsonFiles/missing_artifact_version_request.json b/src/test/resources/jsonFiles/missing_artifact_version_request.json new file mode 100644 index 0000000..cfde298 --- /dev/null +++ b/src/test/resources/jsonFiles/missing_artifact_version_request.json @@ -0,0 +1,2 @@ +{"csar": "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QUktSVBfTXV4X0RlbXV4LXVwZGF0ZWQtcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEoPxTTMggIAAN4PAAA7AAAAAAAAAAAAAAAAADY3AABBcnRpZmFjdHMvQUFJLVR1bm5lbF9YQ29ubi1mb3ItREhWLVRlc3RpbmctcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEott6ixQgIAAEULAAA5AAAAAAAAAAAAAAAAACE6AABBcnRpZmFjdHMvQUFJLVNlcnZpY2VfQWRtaW4tZm9yLURIVi1UZXN0LXJlc291cmNlLTEuMC54bWxQSwECFAAUAAgICAD9roRKhVs/IKwDAABhJQAAQAAAAAAAAAAAAAAAAADKPAAAQXJ0aWZhY3RzL0FBSS1WaG5mRm9yRTJlVGVzdC4uYmFzZV9URVNULi5tb2R1bGUtMC1yZXNvdXJjZS0yLnhtbFBLAQIUABQACAgIAP2uhEpIeXXPNgIAADELAAAwAAAAAAAAAAAAAAAAAORAAABBcnRpZmFjdHMvQUFJLXZITkYtZm9yLURIVi1UZXN0LXJlc291cmNlLTIuMC54bWxQSwUGAAAAAAwADACcBAAAeEMAAAAA", + "artifactName":"hello"}
\ No newline at end of file diff --git a/src/test/resources/jsonFiles/missing_csar_request.json b/src/test/resources/jsonFiles/missing_csar_request.json new file mode 100644 index 0000000..e65eb4c --- /dev/null +++ b/src/test/resources/jsonFiles/missing_csar_request.json @@ -0,0 +1,2 @@ +{"artifactVersion":"1.0", + "artifactName":"hello"}
\ No newline at end of file diff --git a/src/test/resources/jsonFiles/success_request.json b/src/test/resources/jsonFiles/success_request.json new file mode 100644 index 0000000..92fa93d --- /dev/null +++ b/src/test/resources/jsonFiles/success_request.json @@ -0,0 +1,3 @@ +{"csar": "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QUktSVBfTXV4X0RlbXV4LXVwZGF0ZWQtcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEoPxTTMggIAAN4PAAA7AAAAAAAAAAAAAAAAADY3AABBcnRpZmFjdHMvQUFJLVR1bm5lbF9YQ29ubi1mb3ItREhWLVRlc3RpbmctcmVzb3VyY2UtMS4wLnhtbFBLAQIUABQACAgIAP2uhEott6ixQgIAAEULAAA5AAAAAAAAAAAAAAAAACE6AABBcnRpZmFjdHMvQUFJLVNlcnZpY2VfQWRtaW4tZm9yLURIVi1UZXN0LXJlc291cmNlLTEuMC54bWxQSwECFAAUAAgICAD9roRKhVs/IKwDAABhJQAAQAAAAAAAAAAAAAAAAADKPAAAQXJ0aWZhY3RzL0FBSS1WaG5mRm9yRTJlVGVzdC4uYmFzZV9URVNULi5tb2R1bGUtMC1yZXNvdXJjZS0yLnhtbFBLAQIUABQACAgIAP2uhEpIeXXPNgIAADELAAAwAAAAAAAAAAAAAAAAAORAAABBcnRpZmFjdHMvQUFJLXZITkYtZm9yLURIVi1UZXN0LXJlc291cmNlLTIuMC54bWxQSwUGAAAAAAwADACcBAAAeEMAAAAA", + "artifactVersion":"1.0", + "artifactName":"hello"}
\ No newline at end of file diff --git a/src/test/resources/response/response.json b/src/test/resources/response/response.json new file mode 100644 index 0000000..8b98d17 --- /dev/null +++ b/src/test/resources/response/response.json @@ -0,0 +1 @@ +[{"name":"AAI-SD-WAN Service for Testing-service-1.0.xml","type":"MODEL_INVENTORY_PROFILE","payload":[80,71,49,118,90,71,86,115,73,72,104,116,98,71,53,122,80,83,74,111,100,72,82,119,79,105,56,118,98,51,74,110,76,109,57,119,90,87,53,108,89,50,57,116,99,67,53,104,89,87,107,117,97,87,53,50,90,87,53,48,98,51,74,53,76,51,89,120,77,67,73,43,67,105,65,103,73,67,65,56,98,87,57,107,90,87,119,116,97,87,53,50,89,88,74,112,89,87,53,48,76,87,108,107,80,106,77,120,90,68,86,105,78,109,69,119,76,84,81,48,78,84,81,116,78,71,85,122,77,121,48,53,89,84,99,53,76,87,82,105,89,84,65,52,77,122,103,52,78,109,77,53,90,68,119,118,98,87,57,107,90,87,119,116,97,87,53,50,89,88,74,112,89,87,53,48,76,87,108,107,80,103,111,103,73,67,65,103,80,71,49,118,90,71,86,115,76,88,82,53,99,71,85,43,99,50,86,121,100,109,108,106,90,84,119,118,98,87,57,107,90,87,119,116,100,72,108,119,90,84,52,75,73,67,65,103,73,68,120,116,98,50,82,108,98,67,49,50,90,88,74,122,80,103,111,103,73,67,65,103,73,67,65,103,73,68,120,116,98,50,82,108,98,67,49,50,90,88,73,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,68,120,116,98,50,82,108,98,67,49,50,90,88,74,122,97,87,57,117,76,87,108,107,80,106,81,50,78,68,65,120,90,87,86,106,76,84,77,49,89,109,81,116,78,71,85,53,78,105,49,104,90,68,66,107,76,84,65,122,78,84,90,109,90,106,90,105,79,71,77,52,90,68,119,118,98,87,57,107,90,87,119,116,100,109,86,121,99,50,108,118,98,105,49,112,90,68,52,75,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,71,49,118,90,71,86,115,76,87,53,104,98,87,85,43,85,48,81,116,86,48,70,79,73,70,78,108,99,110,90,112,89,50,85,103,90,109,57,121,73,70,82,108,99,51,82,112,98,109,99,56,76,50,49,118,90,71,86,115,76,87,53,104,98,87,85,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,68,120,116,98,50,82,108,98,67,49,50,90,88,74,122,97,87,57,117,80,106,69,117,77,68,119,118,98,87,57,107,90,87,119,116,100,109,86,121,99,50,108,118,98,106,52,75,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,71,49,118,90,71,86,115,76,87,82,108,99,50,78,121,97,88,66,48,97,87,57,117,80,108,78,69,76,86,100,66,84,105,66,84,90,88,74,50,97,87,78,108,73,71,90,118,99,105,66,69,83,70,89,103,86,71,86,122,100,71,108,117,90,121,66,112,98,105,66,70,77,107,85,56,76,50,49,118,90,71,86,115,76,87,82,108,99,50,78,121,97,88,66,48,97,87,57,117,80,103,111,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,98,87,57,107,90,87,119,116,90,87,120,108,98,87,86,117,100,72,77,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,98,87,57,107,90,87,119,116,90,87,120,108,98,87,86,117,100,68,52,75,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,98,109,86,51,76,87,82,104,100,71,69,116,90,71,86,115,76,87,90,115,89,87,99,43,86,68,119,118,98,109,86,51,76,87,82,104,100,71,69,116,90,71,86,115,76,87,90,115,89,87,99,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,71,78,104,99,109,82,112,98,109,70,115,97,88,82,53,80,110,86,117,89,109,57,49,98,109,82,108,90,68,119,118,89,50,70,121,90,71,108,117,89,87,120,112,100,72,107,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,71,49,118,90,71,86,115,76,87,86,115,90,87,49,108,98,110,82,122,76,122,52,75,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,99,109,86,115,89,88,82,112,98,50,53,122,97,71,108,119,76,87,120,112,99,51,81,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,68,120,121,90,87,120,104,100,71,108,118,98,110,78,111,97,88,65,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,99,109,86,115,89,88,82,108,90,67,49,48,98,122,53,116,98,50,82,108,98,67,49,50,90,88,73,56,76,51,74,108,98,71,70,48,90,87,81,116,100,71,56,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,99,109,86,115,89,88,82,112,98,50,53,122,97,71,108,119,76,87,82,104,100,71,69,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,72,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,114,90,88,107,43,98,87,57,107,90,87,119,116,100,109,86,121,76,109,49,118,90,71,86,115,76,88,90,108,99,110,78,112,98,50,52,116,97,87,81,56,76,51,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,114,90,88,107,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,72,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,50,89,87,120,49,90,84,52,48,78,109,73,53,77,106,69,48,78,67,48,53,77,106,78,104,76,84,82,107,77,106,65,116,89,106,103,49,89,83,48,122,89,50,74,107,79,68,81,51,78,106,89,52,89,84,107,56,76,51,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,50,89,87,120,49,90,84,52,75,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,68,119,118,99,109,86,115,89,88,82,112,98,50,53,122,97,71,108,119,76,87,82,104,100,71,69,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,99,109,86,115,89,88,82,112,98,50,53,122,97,71,108,119,76,87,82,104,100,71,69,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,72,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,114,90,88,107,43,98,87,57,107,90,87,119,117,98,87,57,107,90,87,119,116,97,87,53,50,89,88,74,112,89,87,53,48,76,87,108,107,80,67,57,121,90,87,120,104,100,71,108,118,98,110,78,111,97,88,65,116,97,50,86,53,80,103,111,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,68,120,121,90,87,120,104,100,71,108,118,98,110,78,111,97,88,65,116,100,109,70,115,100,87,85,43,79,68,73,120,79,84,82,104,90,106,69,116,77,50,77,121,89,121,48,48,79,68,86,104,76,84,104,109,78,68,81,116,78,68,73,119,90,84,73,121,89,84,108,108,89,87,69,48,80,67,57,121,90,87,120,104,100,71,108,118,98,110,78,111,97,88,65,116,100,109,70,115,100,87,85,43,67,105,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,76,51,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,107,89,88,82,104,80,103,111,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,76,51,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,68,52,75,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,76,51,74,108,98,71,70,48,97,87,57,117,99,50,104,112,99,67,49,115,97,88,78,48,80,103,111,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,103,80,67,57,116,98,50,82,108,98,67,49,108,98,71,86,116,90,87,53,48,80,103,111,103,73,67,65,103,73,67,65,103,73,67,65,103,73,67,65,56,76,50,49,118,90,71,86,115,76,87,86,115,90,87,49,108,98,110,82,122,80,103,111,103,73,67,65,103,73,67,65,103,73,68,119,118,98,87,57,107,90,87,119,116,100,109,86,121,80,103,111,103,73,67,65,103,80,67,57,116,98,50,82,108,98,67,49,50,90,88,74,122,80,103,111,56,76,50,49,118,90,71,86,115,80,103,61,61]}]
\ No newline at end of file diff --git a/src/test/resources/ymlFiles/resource-SdWanTestVsp-template.yml b/src/test/resources/ymlFiles/resource-SdWanTestVsp-template.yml new file mode 100644 index 0000000..21e64fe --- /dev/null +++ b/src/test/resources/ymlFiles/resource-SdWanTestVsp-template.yml @@ -0,0 +1,314 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 +metadata: + invariantUUID: 1a111111-1111-1111-1111-111111111111 + UUID: 2a111111-1111-1111-1111-111111111111 + name: SD-WAN-Test-VSP + description: SD-WAN-Test-VSP + type: VF + category: Network L2-3 + subcategory: WAN Connectors + resourceVendor: SCP-Test-VLM + resourceVendorRelease: '1.0' +imports: +- nodes: + file: nodes.yml +- datatypes: + file: data.yml +- capabilities: + file: capabilities.yml +- relationships: + file: relationships.yml +- groups: + file: groups.yml +- policies: + file: policies.yml +- resource-SD-WAN-Test-VSP-interface: + file: resource-SdWanTestVsp-template-interface.yml +- resource-SdWanTestVsp.nodes.DUMMY_server: + file: resource-SdwantestvspNodesDummyServer-template.yml +topology_template: + inputs: + nf_naming: + type: org.openecomp.datatypes.Naming + nf_function: + type: string + nf_naming_code: + type: string + availability_zone_max_count: + type: integer + default: 1 + max_instances: + type: integer + nf_type: + type: string + DUMMY_flavor_name: + type: string + description: flavor name of PCRF PD instance + DUMMY_image_name: + type: string + description: PCRF PD image name + DUMMY_Role_net_name: + type: string + description: DUMMY network name + DUMMY_server_name: + type: string + description: PCRF PD server name + nf_role: + type: string + min_instances: + type: integer + DUMMY_vnf_id: + type: string + description: PCRF VNF Id + node_templates: + abstract_DUMMY_server: + type: org.openecomp.resource.vfc.SdWanTestVsp.abstract.nodes.DUMMY_server + metadata: + invariantUUID: 3a111111-1111-1111-1111-111111111111 + UUID: 4a111111-1111-1111-1111-111111111111 + customizationUUID: 5a111111-1111-1111-1111-111111111111 + version: '1.0' + name: SdWanTestVsp.nodes.DUMMY_server + description: Not reusable inner VFC + type: VFC + category: Generic + subcategory: Abstract + resourceVendor: SCP-Test-VLM + resourceVendorRelease: '1.0' + properties: + port_DUMMY_port_network: + - get_input: DUMMY_Role_net_name + index_value: 0 + port_DUMMY_port_ip_requirements: + - - ip_version: 4 + ip_count_required: + is_required: false + floating_ip_count_required: + is_required: false + vm_flavor_name: + get_input: DUMMY_flavor_name + service_template_filter: + substitute_service_template: Nested_DUMMY_serverServiceTemplate.yaml + count: '1' + port_DUMMY_port_network_role_tag: + - '"DUMMY_Role"' + vm_image_name: + get_input: DUMMY_image_name + vm_type_tag: DUMMY_server + min_instances: 0 + compute_DUMMY_server_metadata: + - vnf_id: + get_input: DUMMY_vnf_id + port_DUMMY_port_mac_requirements: + - mac_count_required: + is_required: false + compute_DUMMY_server_name: + - get_input: DUMMY_server_name + nfc_naming_code: DUMMY_server + groups: + SdWanTestVsp..DUMMY..module-0: + type: org.openecomp.groups.VfModule + members: + - abstract_DUMMY_server + metadata: + vfModuleModelName: SdWanTestVsp..DUMMY..module-0 + vfModuleModelInvariantUUID: 6a111111-1111-1111-1111-111111111111 + vfModuleModelUUID: 7a111111-1111-1111-1111-111111111111 + vfModuleModelVersion: '2' + properties: + min_vf_module_instances: 0 + vf_module_label: DUMMY + max_vf_module_instances: + vfc_list: + vf_module_type: Expansion + vf_module_description: + initial_count: 0 + volume_group: false + availability_zone_count: + DUMMY_group: + type: org.openecomp.groups.heat.HeatStack + members: + - abstract_DUMMY_server + metadata: + invariantUUID: 8a111111-1111-1111-1111-111111111111 + UUID: 9a111111-1111-1111-1111-111111111111 + version: '1' + name: DUMMY_group + substitution_mappings: + node_type: org.openecomp.resource.vf.SdWanTestVsp + capabilities: + abstract_dummy_server.instance_DUMMY_server: + - abstract_DUMMY_server + - instance_DUMMY_server + abstract_dummy_server.disk.device.write.bytes_DUMMY_server: + - abstract_DUMMY_server + - disk.device.write.bytes_DUMMY_server + abstract_dummy_server.disk.device.capacity_DUMMY_server: + - abstract_DUMMY_server + - disk.device.capacity_DUMMY_server + abstract_dummy_server.network.outgoing.bytes_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.outgoing.bytes_DUMMY_server_DUMMY_port + abstract_dummy_server.os_DUMMY_server: + - abstract_DUMMY_server + - os_DUMMY_server + abstract_dummy_server.host_DUMMY_server: + - abstract_DUMMY_server + - host_DUMMY_server + abstract_dummy_server.memory_DUMMY_server: + - abstract_DUMMY_server + - memory_DUMMY_server + abstract_dummy_server.disk.read.requests_DUMMY_server: + - abstract_DUMMY_server + - disk.read.requests_DUMMY_server + abstract_dummy_server.feature_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - feature_DUMMY_server_DUMMY_port + abstract_dummy_server.disk.device.write.requests.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.device.write.requests.rate_DUMMY_server + abstract_dummy_server.disk.ephemeral.size_DUMMY_server: + - abstract_DUMMY_server + - disk.ephemeral.size_DUMMY_server + abstract_dummy_server.disk.allocation_DUMMY_server: + - abstract_DUMMY_server + - disk.allocation_DUMMY_server + abstract_dummy_server.feature: + - abstract_DUMMY_server + - feature + abstract_dummy_server.scalable_DUMMY_server: + - abstract_DUMMY_server + - scalable_DUMMY_server + abstract_dummy_server.network.incoming.packets.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.incoming.packets.rate_DUMMY_server_DUMMY_port + abstract_dummy_server.binding_DUMMY_server: + - abstract_DUMMY_server + - binding_DUMMY_server + abstract_dummy_server.disk.iops_DUMMY_server: + - abstract_DUMMY_server + - disk.iops_DUMMY_server + abstract_dummy_server.network.incoming.bytes_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.incoming.bytes_DUMMY_server_DUMMY_port + abstract_dummy_server.disk.read.bytes_DUMMY_server: + - abstract_DUMMY_server + - disk.read.bytes_DUMMY_server + abstract_dummy_server.disk.write.bytes_DUMMY_server: + - abstract_DUMMY_server + - disk.write.bytes_DUMMY_server + abstract_dummy_server.cpu.delta_DUMMY_server: + - abstract_DUMMY_server + - cpu.delta_DUMMY_server + abstract_dummy_server.disk.capacity_DUMMY_server: + - abstract_DUMMY_server + - disk.capacity_DUMMY_server + abstract_dummy_server.network.incoming.packets_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.incoming.packets_DUMMY_server_DUMMY_port + abstract_dummy_server.cpu_DUMMY_server: + - abstract_DUMMY_server + - cpu_DUMMY_server + abstract_dummy_server.memory.resident_DUMMY_server: + - abstract_DUMMY_server + - memory.resident_DUMMY_server + abstract_dummy_server.disk.device.read.bytes_DUMMY_server: + - abstract_DUMMY_server + - disk.device.read.bytes_DUMMY_server + abstract_dummy_server.disk.device.write.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.device.write.bytes.rate_DUMMY_server + abstract_dummy_server.disk.usage_DUMMY_server: + - abstract_DUMMY_server + - disk.usage_DUMMY_server + abstract_dummy_server.disk.write.requests_DUMMY_server: + - abstract_DUMMY_server + - disk.write.requests_DUMMY_server + abstract_dummy_server.endpoint_DUMMY_server: + - abstract_DUMMY_server + - endpoint_DUMMY_server + abstract_dummy_server.memory.usage_DUMMY_server: + - abstract_DUMMY_server + - memory.usage_DUMMY_server + abstract_dummy_server.disk.latency_DUMMY_server: + - abstract_DUMMY_server + - disk.latency_DUMMY_server + abstract_dummy_server.disk.write.requests.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.write.requests.rate_DUMMY_server + abstract_dummy_server.disk.device.allocation_DUMMY_server: + - abstract_DUMMY_server + - disk.device.allocation_DUMMY_server + abstract_dummy_server.disk.device.read.requests.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.device.read.requests.rate_DUMMY_server + abstract_dummy_server.disk.device.read.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.device.read.bytes.rate_DUMMY_server + abstract_dummy_server.disk.device.usage_DUMMY_server: + - abstract_DUMMY_server + - disk.device.usage_DUMMY_server + abstract_dummy_server.disk.device.write.requests_DUMMY_server: + - abstract_DUMMY_server + - disk.device.write.requests_DUMMY_server + abstract_dummy_server.vcpus_DUMMY_server: + - abstract_DUMMY_server + - vcpus_DUMMY_server + abstract_dummy_server.disk.write.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.write.bytes.rate_DUMMY_server + abstract_dummy_server.network.outgoing.bytes.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.outgoing.bytes.rate_DUMMY_server_DUMMY_port + abstract_dummy_server.network.outpoing.packets_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.outpoing.packets_DUMMY_server_DUMMY_port + abstract_dummy_server.network.outgoing.packets.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.outgoing.packets.rate_DUMMY_server_DUMMY_port + abstract_dummy_server.binding_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - binding_DUMMY_server_DUMMY_port + abstract_dummy_server.cpu_util_DUMMY_server: + - abstract_DUMMY_server + - cpu_util_DUMMY_server + abstract_dummy_server.attachment_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - attachment_DUMMY_server_DUMMY_port + abstract_dummy_server.disk.device.latency_DUMMY_server: + - abstract_DUMMY_server + - disk.device.latency_DUMMY_server + abstract_dummy_server.disk.root.size_DUMMY_server: + - abstract_DUMMY_server + - disk.root.size_DUMMY_server + abstract_dummy_server.disk.device.iops_DUMMY_server: + - abstract_DUMMY_server + - disk.device.iops_DUMMY_server + abstract_dummy_server.disk.read.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - disk.read.bytes.rate_DUMMY_server + abstract_dummy_server.feature_DUMMY_server: + - abstract_DUMMY_server + - feature_DUMMY_server + abstract_dummy_server.disk.device.read.requests_DUMMY_server: + - abstract_DUMMY_server + - disk.device.read.requests_DUMMY_server + abstract_dummy_server.network.incoming.bytes.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - network.incoming.bytes.rate_DUMMY_server_DUMMY_port + requirements: + abstract_dummy_server.local_storage_DUMMY_server: + - abstract_DUMMY_server + - local_storage_DUMMY_server + abstract_dummy_server.dependency_DUMMY_server: + - abstract_DUMMY_server + - dependency_DUMMY_server + abstract_dummy_server.link_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - link_DUMMY_server_DUMMY_port + abstract_dummy_server.dependency_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - dependency_DUMMY_server_DUMMY_port + abstract_dummy_server.dependency: + - abstract_DUMMY_server + - dependency diff --git a/src/test/resources/ymlFiles/resource-TunnelXconntest-template.yml b/src/test/resources/ymlFiles/resource-TunnelXconntest-template.yml new file mode 100644 index 0000000..6179976 --- /dev/null +++ b/src/test/resources/ymlFiles/resource-TunnelXconntest-template.yml @@ -0,0 +1,81 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 +metadata: + invariantUUID: 1b111111-1111-1111-1111-111111111111 + UUID: 2b111111-1111-1111-1111-111111111111 + name: Tunnel_XConnTest + description: Tunnel_XConnTest + type: VF + category: Allotted Resource + subcategory: Tunnel XConnect + resourceVendor: '12345' + resourceVendorRelease: '1' +imports: +- nodes: + file: nodes.yml +- datatypes: + file: data.yml +- capabilities: + file: capabilities.yml +- relationships: + file: relationships.yml +- groups: + file: groups.yml +- policies: + file: policies.yml +- resource-Tunnel_XConnTest-interface: + file: resource-TunnelXconntest-template-interface.yml +- resource-Allotedresource: + file: resource-Allotedresource-template.yml +topology_template: + inputs: + nf_naming: + type: org.openecomp.datatypes.Naming + nf_naming_code: + type: string + nf_function: + type: string + availability_zone_max_count: + type: integer + default: 1 + nf_role: + type: string + max_instances: + type: integer + min_instances: + type: integer + nf_type: + type: string + node_templates: + Allotedresource 0: + type: org.openecomp.resource.vfc.AllottedResource1235 + metadata: + invariantUUID: 3b111111-1111-1111-1111-111111111111 + UUID: 4b111111-1111-1111-1111-111111111111 + customizationUUID: 5b111111-1111-1111-1111-111111111111 + version: '1.0' + name: Allotedresource + description: Allotedresource + type: VFC + category: Allotted Resource + subcategory: Allotted Resource + resourceVendor: '123' + resourceVendorRelease: '123' + properties: + providing_service_invariant_uuid: 6b111111-1111-1111-1111-111111111111 + providing_service_uuid: 7b111111-1111-1111-1111-111111111111 + providing_service_name: vVIGaaS-Test + max_instances: 1 + min_instances: 1 + substitution_mappings: + node_type: org.openecomp.resource.vf.TunnelXconntest + capabilities: + allotedresource0.feature: + - Allotedresource 0 + - feature + requirements: + allotedresource0.service_dependency: + - Allotedresource 0 + - service_dependency + allotedresource0.dependency: + - Allotedresource 0 + - dependency diff --git a/src/test/resources/ymlFiles/service-SdWanServiceTest-template.yml b/src/test/resources/ymlFiles/service-SdWanServiceTest-template.yml new file mode 100644 index 0000000..0d3494a --- /dev/null +++ b/src/test/resources/ymlFiles/service-SdWanServiceTest-template.yml @@ -0,0 +1,270 @@ +tosca_definitions_version: tosca_simple_yaml_1_0 +metadata: + invariantUUID: 1c111111-1111-1111-1111-111111111111 + UUID: 2c111111-1111-1111-1111-111111111111 + name: SD-WAN-Service-Test + description: SD-WAN-Service-Test + type: Service + category: Network L1-3 + serviceEcompNaming: true + ecompGeneratedNaming: true + namingPolicy: '' +imports: +- nodes: + file: nodes.yml +- datatypes: + file: data.yml +- capabilities: + file: capabilities.yml +- relationships: + file: relationships.yml +- groups: + file: groups.yml +- policies: + file: policies.yml +- service-SD-WAN-Service-Test-interface: + file: service-SdWanServiceTest-template-interface.yml +- resource-SD-WAN-Test-VSP: + file: resource-SdWanTestVsp-template.yml +- resource-SD-WAN-Test-VSP-interface: + file: resource-SdWanTestVsp-template-interface.yml +- resource-Tunnel_XConnTest: + file: resource-TunnelXconntest-template.yml +- resource-Tunnel_XConnTest-interface: + file: resource-TunnelXconntest-template-interface.yml +topology_template: + node_templates: + SD-WAN-Test-VSP 0: + type: org.openecomp.resource.vf.SdWanTestVsp + metadata: + invariantUUID: 1a111111-1111-1111-1111-111111111111 + UUID: 2a111111-1111-1111-1111-111111111111 + customizationUUID: 3c111111-1111-1111-1111-111111111111 + version: '1.0' + name: SD-WAN-Test-VSP + description: SD-WAN-Test-VSP + type: VF + category: Network L2-3 + subcategory: WAN Connectors + resourceVendor: SCP-Test-VLM + resourceVendorRelease: '1.0' + Tunnel_XConnTest 0: + type: org.openecomp.resource.vf.TunnelXconntest + metadata: + invariantUUID: 1b111111-1111-1111-1111-111111111111 + UUID: 2b111111-1111-1111-1111-111111111111 + customizationUUID: 4c111111-1111-1111-1111-111111111111 + version: '2.0' + name: Tunnel_XConnTest + description: Tunnel_XConnTest + type: VF + category: Allotted Resource + subcategory: Tunnel XConnect + resourceVendor: '12345' + resourceVendorRelease: '1' + groups: + sdwantestvsp0..SdWanTestVsp..DUMMY..module-0: + type: org.openecomp.groups.VfModule + metadata: + vfModuleModelName: SdWanTestVsp..DUMMY..module-0 + vfModuleModelInvariantUUID: 6a111111-1111-1111-1111-111111111111 + vfModuleModelUUID: 5c111111-1111-1111-1111-111111111111 + vfModuleModelVersion: '2' + vfModuleModelCustomizationUUID: 6c111111-1111-1111-1111-111111111111 + properties: + min_vf_module_instances: 0 + vf_module_label: DUMMY + max_vf_module_instances: + vfc_list: + vf_module_type: Expansion + vf_module_description: + initial_count: 0 + volume_group: false + availability_zone_count: + substitution_mappings: + node_type: org.openecomp.service.SdWanServiceTest + capabilities: + sdwantestvsp0.abstract_dummy_server.attachment_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.attachment_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.memory.resident_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.memory.resident_DUMMY_server + sdwantestvsp0.abstract_dummy_server.instance_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.instance_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.root.size_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.root.size_DUMMY_server + sdwantestvsp0.abstract_dummy_server.feature_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.feature_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.device.write.requests.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.write.requests.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.network.outpoing.packets_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.outpoing.packets_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.network.outgoing.packets.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.outgoing.packets.rate_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.disk.device.allocation_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.allocation_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.read.bytes_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.read.bytes_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.read.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.read.bytes.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.device.usage_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.usage_DUMMY_server + sdwantestvsp0.abstract_dummy_server.network.outgoing.bytes_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.outgoing.bytes_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.disk.device.write.bytes_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.write.bytes_DUMMY_server + sdwantestvsp0.abstract_dummy_server.host_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.host_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.write.requests.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.write.requests.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.binding_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.binding_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.device.latency_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.latency_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.write.bytes_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.write.bytes_DUMMY_server + sdwantestvsp0.abstract_dummy_server.os_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.os_DUMMY_server + sdwantestvsp0.abstract_dummy_server.network.incoming.bytes_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.incoming.bytes_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.disk.device.read.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.read.bytes.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.write.requests_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.write.requests_DUMMY_server + sdwantestvsp0.abstract_dummy_server.vcpus_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.vcpus_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.ephemeral.size_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.ephemeral.size_DUMMY_server + tunnel_xconntest0.allotedresource0.feature: + - Allotedresource 0 + - allotedresource0.feature + sdwantestvsp0.abstract_dummy_server.disk.device.read.requests_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.read.requests_DUMMY_server + sdwantestvsp0.abstract_dummy_server.binding_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.binding_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.disk.device.read.requests.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.read.requests.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.memory.usage_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.memory.usage_DUMMY_server + sdwantestvsp0.abstract_dummy_server.feature: + - abstract_DUMMY_server + - abstract_dummy_server.feature + sdwantestvsp0.abstract_dummy_server.disk.device.write.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.write.bytes.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.latency_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.latency_DUMMY_server + sdwantestvsp0.abstract_dummy_server.memory_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.memory_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.usage_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.usage_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.device.write.requests_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.write.requests_DUMMY_server + sdwantestvsp0.abstract_dummy_server.scalable_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.scalable_DUMMY_server + sdwantestvsp0.abstract_dummy_server.cpu_util_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.cpu_util_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.capacity_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.capacity_DUMMY_server + sdwantestvsp0.abstract_dummy_server.network.incoming.packets_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.incoming.packets_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.cpu.delta_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.cpu.delta_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.iops_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.iops_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.allocation_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.allocation_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.device.read.bytes_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.read.bytes_DUMMY_server + sdwantestvsp0.abstract_dummy_server.cpu_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.cpu_DUMMY_server + sdwantestvsp0.abstract_dummy_server.network.outgoing.bytes.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.outgoing.bytes.rate_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.disk.read.requests_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.read.requests_DUMMY_server + sdwantestvsp0.abstract_dummy_server.network.incoming.packets.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.incoming.packets.rate_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.network.incoming.bytes.rate_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.network.incoming.bytes.rate_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.feature_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.feature_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.disk.device.iops_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.iops_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.device.capacity_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.device.capacity_DUMMY_server + sdwantestvsp0.abstract_dummy_server.disk.write.bytes.rate_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.disk.write.bytes.rate_DUMMY_server + sdwantestvsp0.abstract_dummy_server.endpoint_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.endpoint_DUMMY_server + requirements: + sdwantestvsp0.abstract_dummy_server.dependency_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.dependency_DUMMY_server + tunnel_xconntest0.allotedresource0.service_dependency: + - Allotedresource 0 + - allotedresource0.service_dependency + tunnel_xconntest0.allotedresource0.dependency: + - Allotedresource 0 + - allotedresource0.dependency + sdwantestvsp0.abstract_dummy_server.dependency_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.dependency_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.link_DUMMY_server_DUMMY_port: + - abstract_DUMMY_server + - abstract_dummy_server.link_DUMMY_server_DUMMY_port + sdwantestvsp0.abstract_dummy_server.local_storage_DUMMY_server: + - abstract_DUMMY_server + - abstract_dummy_server.local_storage_DUMMY_server + sdwantestvsp0.abstract_dummy_server.dependency: + - abstract_DUMMY_server + - abstract_dummy_server.dependency |