From 80a8e4b685a16ef58603fc487d7c0c2adf427b02 Mon Sep 17 00:00:00 2001 From: "Lee, Tian (tl5884)" Date: Thu, 28 Jun 2018 17:35:04 +0100 Subject: [PATCH] Support Port Mirroring Configuration model Add support for Port Mirroring Configuration XML model generation from SDC TOSCA Change-Id: I44718d20a53e343ee34ae47ef2bc35d49c862ddf Issue-ID: AAI-1345 Signed-off-by: Lee, Tian (tl5884) --- .../babel/xml/generator/model/Configuration.java | 28 +++++++++++ .../xml/generator/model/ConfigurationWidget.java | 31 +++++++++++++ .../onap/aai/babel/xml/generator/model/Model.java | 3 ++ .../onap/aai/babel/xml/generator/model/Widget.java | 4 +- .../aai/babel/service/CsarToXmlConverterTest.java | 17 +++++++ src/test/resources/artifact-generator.properties | 3 ++ .../compressedArtifacts/service_PortMirror.csar | Bin 0 -> 30983 bytes .../AAI-Port Mirror_Test-service-1.0.xml | 51 +++++++++++++++++++++ ...-Port Mirroring Configuration-resource-35.0.xml | 32 +++++++++++++ 9 files changed, 168 insertions(+), 1 deletion(-) create mode 100644 src/main/java/org/onap/aai/babel/xml/generator/model/Configuration.java create mode 100644 src/main/java/org/onap/aai/babel/xml/generator/model/ConfigurationWidget.java create mode 100644 src/test/resources/compressedArtifacts/service_PortMirror.csar create mode 100644 src/test/resources/generatedXml/AAI-Port Mirror_Test-service-1.0.xml create mode 100644 src/test/resources/generatedXml/AAI-Port Mirroring Configuration-resource-35.0.xml diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/Configuration.java b/src/main/java/org/onap/aai/babel/xml/generator/model/Configuration.java new file mode 100644 index 0000000..20dbea9 --- /dev/null +++ b/src/main/java/org/onap/aai/babel/xml/generator/model/Configuration.java @@ -0,0 +1,28 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 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========================================================= + */ +package org.onap.aai.babel.xml.generator.model; + +import org.onap.aai.babel.xml.generator.types.Cardinality; +import org.onap.aai.babel.xml.generator.types.Model; + +@Model(widget = Widget.Type.CONFIGURATION, cardinality = Cardinality.UNBOUNDED, dataDeleteFlag = true) +public class Configuration extends Resource { +} diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/ConfigurationWidget.java b/src/main/java/org/onap/aai/babel/xml/generator/model/ConfigurationWidget.java new file mode 100644 index 0000000..7822926 --- /dev/null +++ b/src/main/java/org/onap/aai/babel/xml/generator/model/ConfigurationWidget.java @@ -0,0 +1,31 @@ +/** + * ============LICENSE_START======================================================= + * org.onap.aai + * ================================================================================ + * Copyright © 2017-2018 AT&T Intellectual Property. All rights reserved. + * Copyright © 2017-2018 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========================================================= + */ +package org.onap.aai.babel.xml.generator.model; + +import org.onap.aai.babel.xml.generator.types.Cardinality; +import org.onap.aai.babel.xml.generator.types.ModelType; +import org.onap.aai.babel.xml.generator.types.ModelWidget; + +@org.onap.aai.babel.xml.generator.types.Model(widget = Widget.Type.CONFIGURATION, cardinality = Cardinality.UNBOUNDED, + dataDeleteFlag = true) +@ModelWidget(type = ModelType.WIDGET, name = "configuration") +public class ConfigurationWidget extends ResourceWidget { +} diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java b/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java index 0ee0838..dcd5d15 100644 --- a/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java +++ b/src/main/java/org/onap/aai/babel/xml/generator/model/Model.java @@ -76,6 +76,9 @@ public abstract class Model { case "org.openecomp.resource.vfc.nodes.heat.cinder": modelToBeReturned = new VolumeWidget(); break; + case "org.openecomp.nodes.PortMirroringConfiguration": + modelToBeReturned = new Configuration(); + break; default: modelToBeReturned = null; break; diff --git a/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java b/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java index be58844..7f39438 100644 --- a/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java +++ b/src/main/java/org/onap/aai/babel/xml/generator/model/Widget.java @@ -36,7 +36,7 @@ public abstract class Widget extends Model { public static final String GENERATOR_AAI_CONFIGLPROP_NOT_FOUND = "Cannot generate artifacts. Widget configuration not found for %s"; public enum Type { - SERVICE, VF, VFC, VSERVER, VOLUME, FLAVOR, TENANT, VOLUME_GROUP, LINT, L3_NET, VFMODULE, IMAGE, OAM_NETWORK, ALLOTTED_RESOURCE, TUNNEL_XCONNECT; + SERVICE, VF, VFC, VSERVER, VOLUME, FLAVOR, TENANT, VOLUME_GROUP, LINT, L3_NET, VFMODULE, IMAGE, OAM_NETWORK, ALLOTTED_RESOURCE, TUNNEL_XCONNECT, CONFIGURATION; } private Set keys = new HashSet<>(); @@ -80,6 +80,8 @@ public abstract class Widget extends Model { return new AllotedResourceWidget(); case TUNNEL_XCONNECT: return new TunnelXconnectWidget(); + case CONFIGURATION: + return new ConfigurationWidget(); default: return null; } diff --git a/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java b/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java index 3dd8382..62e9265 100644 --- a/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java +++ b/src/test/java/org/onap/aai/babel/service/CsarToXmlConverterTest.java @@ -63,6 +63,9 @@ public class CsarToXmlConverterTest { ), NO_YAML_FILES( "noYmlFilesArchive.zip" + ), + PORT_MIRROR_CSAR( + "service_PortMirror.csar" ); private String filename; @@ -147,6 +150,18 @@ public class CsarToXmlConverterTest { ga.getPayload(), matches(expectedXmlFiles.get(ga.getName())))); } + @Test + public void generatePortMirrorConfigurationModel() + throws CsarConverterException, IOException, XmlArtifactGenerationException { + Map expectedXmlFiles = createExpectedXmlFiles(); + List generatedArtifacts = converter.generateXmlFromCsar(CsarTest.PORT_MIRROR_CSAR.getContent(), + CsarTest.PORT_MIRROR_CSAR.getName(), SERVICE_VERSION); + + generatedArtifacts + .forEach(ga -> assertThat("The content of " + ga.getName() + " must match the expected content", + ga.getPayload(), matches(expectedXmlFiles.get(ga.getName())))); + } + public Matcher matches(final String expected) { return new BaseMatcher() { protected String theExpected = expected; @@ -171,6 +186,8 @@ public class CsarToXmlConverterTest { filesToLoad.add("AAI-SdWanTestVsp..DUMMY..module-0-resource-2.xml"); filesToLoad.add("AAI-Tunnel_XConnTest-resource-2.0.xml"); filesToLoad.add("AAI-SD-WAN-Test-VSP-resource-1.0.xml"); + filesToLoad.add("AAI-Port Mirror_Test-service-1.0.xml"); + filesToLoad.add("AAI-Port Mirroring Configuration-resource-35.0.xml"); for (String filename : filesToLoad) { xmlMap.put(filename, new ArtifactTestUtils().loadResourceAsString("generatedXml/" + filename)); diff --git a/src/test/resources/artifact-generator.properties b/src/test/resources/artifact-generator.properties index 1d7e5fa..74897d6 100644 --- a/src/test/resources/artifact-generator.properties +++ b/src/test/resources/artifact-generator.properties @@ -22,6 +22,9 @@ 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 +#configuration widget details +AAI.model-invariant-id.configuration=166c050d-f69d-4305-943e-0bc58c3a26cf +AAI.model-version-id.configuration=5a175add-57e4-4a5d-8b02-c36f1d69c52b #connector widget details AAI.model-version-id.connector=22104c9f-29fd-462f-be07-96cd6b46dd33 AAI.model-invariant-id.connector=4c01c948-7607-4d66-8a6c-99c2c2717936 diff --git a/src/test/resources/compressedArtifacts/service_PortMirror.csar b/src/test/resources/compressedArtifacts/service_PortMirror.csar new file mode 100644 index 0000000000000000000000000000000000000000..e04a3bc49e8ee6ff8b95d53327866578171971cf GIT binary patch literal 30983 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 literal 0 HcmV?d00001 diff --git a/src/test/resources/generatedXml/AAI-Port Mirror_Test-service-1.0.xml b/src/test/resources/generatedXml/AAI-Port Mirror_Test-service-1.0.xml new file mode 100644 index 0000000..5653c8a --- /dev/null +++ b/src/test/resources/generatedXml/AAI-Port Mirror_Test-service-1.0.xml @@ -0,0 +1,51 @@ + + cd674566-ce17-4262-ae99-d526e7b8d47a + service + + + e033128a-ab5d-4b69-bfe6-c94f93a34f7c + Port Mirror_Test + 1.0 + Port Mirror_Test + + + T + unbounded + + + T + unbounded + + + + model-ver + + model-ver.model-version-id + ea4e93c3-1a6d-4314-8165-c284a91422dc + + + model.model-invariant-id + cf53c1d6-8708-4b4e-a056-ead7daa57cd5 + + + + + + + + model-ver + + model-ver.model-version-id + 46b92144-923a-4d20-b85a-3cbd847668a9 + + + model.model-invariant-id + 82194af1-3c2c-485a-8f44-420e22a9eaa4 + + + + + + + + \ No newline at end of file diff --git a/src/test/resources/generatedXml/AAI-Port Mirroring Configuration-resource-35.0.xml b/src/test/resources/generatedXml/AAI-Port Mirroring Configuration-resource-35.0.xml new file mode 100644 index 0000000..9418205 --- /dev/null +++ b/src/test/resources/generatedXml/AAI-Port Mirroring Configuration-resource-35.0.xml @@ -0,0 +1,32 @@ + + cf53c1d6-8708-4b4e-a056-ead7daa57cd5 + resource + + + ea4e93c3-1a6d-4314-8165-c284a91422dc + Port Mirroring Configuration + 35.0 + A port mirroring configuration object + + + T + unbounded + + + + model-ver + + model-ver.model-version-id + 5a175add-57e4-4a5d-8b02-c36f1d69c52b + + + model.model-invariant-id + 166c050d-f69d-4305-943e-0bc58c3a26cf + + + + + + + + \ No newline at end of file -- 2.16.6