From f02305ae720426a2fc06d76c9fb1bf0c88dbd1da Mon Sep 17 00:00:00 2001 From: Eylon Malin Date: Sun, 10 Nov 2019 09:58:54 +0200 Subject: [PATCH] VidNotion identify port mirroring service Issue-ID: VID-701 Change-Id: I805acab9380c779d2609107c1c65ef25bb0dad47 Signed-off-by: Eylon Malin --- .../onap/vid/asdc/parser/VidNotionsBuilder.java | 9 ++++++ .../src/main/java/org/onap/vid/model/VidNotions.kt | 1 + .../vid/asdc/parser/VidNotionsBuilderTest.java | 32 +++++++++++++-------- .../test/resources/csars/portMirroringService.zip | Bin 0 -> 30857 bytes 4 files changed, 30 insertions(+), 12 deletions(-) create mode 100644 vid-app-common/src/test/resources/csars/portMirroringService.zip diff --git a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java index d35c8df9c..042675899 100644 --- a/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java +++ b/vid-app-common/src/main/java/org/onap/vid/asdc/parser/VidNotionsBuilder.java @@ -34,6 +34,7 @@ import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.sdc.toscaparser.api.elements.Metadata; import org.onap.vid.model.ServiceModel; import org.onap.vid.model.VidNotions; +import org.onap.vid.model.VidNotions.ModelCategory; import org.onap.vid.properties.Features; import org.togglz.core.manager.FeatureManager; @@ -153,6 +154,9 @@ public class VidNotionsBuilder { if(isALaCarte(csarHelper) && hasFabricConfiguration(csarHelper)) { return VidNotions.ModelCategory.IS_5G_FABRIC_CONFIGURATION_MODEL; } + if (isPortMirroringService(serviceModel)) { + return ModelCategory.PORT_MIRRORING; + } if (isInfraStructureVpn(csarHelper)) { return VidNotions.ModelCategory.INFRASTRUCTURE_VPN; } @@ -232,4 +236,9 @@ public class VidNotionsBuilder { final String serviceRole = csarHelper.getServiceMetadata().getValue(ToscaParserImpl2.Constants.SERVICE_ROLE); return StringUtils.equalsIgnoreCase(serviceRole, ToscaParserImpl2.Constants.GROUPING); } + + private boolean isPortMirroringService(ServiceModel serviceModel) { + return (serviceModel.getService()!=null && + StringUtils.equals(serviceModel.getService().getServiceType(), "portMirroring")); + } } diff --git a/vid-app-common/src/main/java/org/onap/vid/model/VidNotions.kt b/vid-app-common/src/main/java/org/onap/vid/model/VidNotions.kt index f67d8fbd9..66fe2ddba 100644 --- a/vid-app-common/src/main/java/org/onap/vid/model/VidNotions.kt +++ b/vid-app-common/src/main/java/org/onap/vid/model/VidNotions.kt @@ -59,6 +59,7 @@ class VidNotions(@get:JsonInclude(JsonInclude.Include.NON_NULL) Transport, SERVICE_WITH_COLLECTION_RESOURCE, INFRASTRUCTURE_VPN, + PORT_MIRRORING, @JsonProperty("other") OTHER } diff --git a/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java b/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java index edf7d0862..d6526d2f7 100644 --- a/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java +++ b/vid-app-common/src/test/java/org/onap/vid/asdc/parser/VidNotionsBuilderTest.java @@ -56,6 +56,7 @@ import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException; import org.onap.sdc.toscaparser.api.NodeTemplate; import org.onap.sdc.toscaparser.api.Property; import org.onap.sdc.toscaparser.api.elements.Metadata; +import org.onap.vid.asdc.parser.ToscaParserImpl2.Constants; import org.onap.vid.model.CR; import org.onap.vid.model.Network; import org.onap.vid.model.Node; @@ -197,6 +198,15 @@ public class VidNotionsBuilderTest { assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper, serviceModel), is(ModelCategory.INFRASTRUCTURE_VPN)); } + @Test() + public void withoutMocks_givenToscaOfPortMirroring_InstantiationUIIsLegacyAndCategoryIsPortMirroring() throws SdcToscaParserException, IOException { + initServiceModelAndscarHelperWithRealCsar("/csars/portMirroringService.zip"); + when(featureManagerMock.isActive(Features.FLAG_2002_ANY_ALACARTE_BESIDES_EXCLUDED_NEW_INSTANTIATION_UI)).thenReturn(true); + assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper, serviceModel), is(InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel), is(InstantiationUI.LEGACY)); + assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper, serviceModel), is(ModelCategory.PORT_MIRRORING)); + } + @Test public void uuidIsExactly1ffce89fEtc_UIHintIsPositive() { initServiceModelAndscarHelperWithMocks(); @@ -216,6 +226,12 @@ public class VidNotionsBuilderTest { assertThat(vidNotionsBuilder.buildVidNotions(csarHelper, serviceModel), hasProperty("instantiationUI", is(InstantiationUI.LEGACY))); } + private void mockInstantiationType(ServiceModel serviceModel, String aLaCarte) { + Service mockService = mock(Service.class); + when(serviceModel.getService()).thenReturn(mockService); + when(mockService.getInstantiationType()).thenReturn(aLaCarte); + } + @DataProvider public static Object[][] ServiceRoleTypesDataProvider() { return new Object[][] { @@ -256,9 +272,7 @@ public class VidNotionsBuilderTest { when(featureManagerMock.isActive(Features.FLAG_1902_NEW_VIEW_EDIT)).thenReturn(isFlag1902NewViewEdit); ServiceModel serviceModel = mock(ServiceModel.class); - Service service = mock(Service.class); - when(serviceModel.getService()).thenReturn(service); - when(service.getInstantiationType()).thenReturn(ToscaParserImpl2.Constants.A_LA_CARTE); + mockInstantiationType(serviceModel, Constants.A_LA_CARTE); InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel); assertEquals(expectedViewEditUi, result); @@ -302,9 +316,7 @@ public class VidNotionsBuilderTest { @Test(dataProvider="toscaParserInstantiationTypeToVidNotion") public void testSuggestInstantiationTypeWhenInstantiationUiLegacy(String toscaParserInstantiationType, InstantiationType expectedInstantiationType) { ServiceModel serviceModel = mock(ServiceModel.class); - Service service = mock(Service.class); - when(serviceModel.getService()).thenReturn(service); - when(service.getInstantiationType()).thenReturn(toscaParserInstantiationType); + mockInstantiationType(serviceModel, toscaParserInstantiationType); assertEquals(expectedInstantiationType, vidNotionsBuilder.suggestInstantiationType(serviceModel, ModelCategory.OTHER)); } @@ -326,9 +338,7 @@ public class VidNotionsBuilderTest { boolean isFeatureOn, InstantiationType expectedInstantiationType) { ServiceModel serviceModel = mock(ServiceModel.class); - Service service = mock(Service.class); - when(serviceModel.getService()).thenReturn(service); - when(service.getInstantiationType()).thenReturn(ToscaParserImpl2.Constants.A_LA_CARTE); + mockInstantiationType(serviceModel, Constants.A_LA_CARTE); when(featureManagerMock.isActive(featureFlag)).thenReturn(isFeatureOn); assertEquals(expectedInstantiationType, vidNotionsBuilder.suggestInstantiationType(serviceModel, instantiationUI)); } @@ -378,9 +388,7 @@ public class VidNotionsBuilderTest { @Test public void whenInstantiationTypeInServiceModelIsNull_thenInstantiationTypeIsClientConfig() { initServiceModelAndscarHelperWithMocks(); - Service service = mock(Service.class); - when(serviceModel.getService()).thenReturn(service); - when(service.getInstantiationType()).thenReturn(null); + mockInstantiationType(serviceModel, null); assertEquals( InstantiationType.ClientConfig, vidNotionsBuilder.suggestInstantiationType(serviceModel, ModelCategory.OTHER)); } diff --git a/vid-app-common/src/test/resources/csars/portMirroringService.zip b/vid-app-common/src/test/resources/csars/portMirroringService.zip new file mode 100644 index 0000000000000000000000000000000000000000..b8c919d341ac29196f34d962caa7ead75c2d4f1d GIT binary patch literal 30857 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 ARR910 literal 0 HcmV?d00001 -- 2.16.6