1 package org.onap.vid.asdc.parser;
3 import com.google.common.collect.ImmutableList;
4 import com.google.common.collect.ImmutableMap;
5 import org.apache.commons.lang3.tuple.Pair;
6 import org.jetbrains.annotations.NotNull;
7 import org.mockito.InjectMocks;
8 import org.mockito.Mock;
9 import org.mockito.Mockito;
10 import org.mockito.MockitoAnnotations;
11 import org.onap.sdc.tosca.parser.api.ISdcCsarHelper;
12 import org.onap.sdc.tosca.parser.exceptions.SdcToscaParserException;
13 import org.onap.sdc.tosca.parser.impl.SdcToscaParserFactory;
14 import org.onap.sdc.toscaparser.api.NodeTemplate;
15 import org.onap.sdc.toscaparser.api.Property;
16 import org.onap.sdc.toscaparser.api.elements.Metadata;
17 import org.onap.vid.model.*;
18 import org.onap.vid.properties.Features;
19 import org.testng.annotations.AfterMethod;
20 import org.testng.annotations.BeforeClass;
21 import org.testng.annotations.DataProvider;
22 import org.testng.annotations.Test;
23 import org.togglz.core.manager.FeatureManager;
25 import java.util.LinkedHashMap;
26 import java.util.UUID;
27 import java.util.function.BiConsumer;
29 import static org.hamcrest.MatcherAssert.assertThat;
30 import static org.hamcrest.Matchers.hasProperty;
31 import static org.hamcrest.Matchers.is;
32 import static org.mockito.Mockito.mock;
33 import static org.mockito.Mockito.when;
34 import static org.testng.Assert.assertEquals;
36 public class VidNotionsBuilderTest {
39 VidNotionsBuilder vidNotionsBuilder;
42 private FeatureManager featureManagerMock;
45 public void initMocks() {
46 MockitoAnnotations.initMocks(this);
51 Mockito.reset(featureManagerMock);
55 public void VLNetworkWithPropertyNetworkTechnologyOVS_UIHintIsPositive() {
56 ISdcCsarHelper csarHelper = mockForNonLegacyInstantiationUI();
58 assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.NETWORK_WITH_PROPERTY_NETWORK_TECHNOLOGY_EQUALS_STANDARD_SRIOV_OR_OVS));
59 assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper) , is(VidNotions.ModelCategory.IS_5G_PROVIDER_NETWORK_MODEL));
63 protected ISdcCsarHelper mockForNonLegacyInstantiationUI() {
64 ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
66 NodeTemplate nodeTemplate = mock(NodeTemplate.class);
68 when(nodeTemplate.getProperties()).thenReturn(new LinkedHashMap<>(ImmutableMap.of(
69 "dummy_val", mock(Property.class),
70 "network_technology", new Property(Pair.of("network_technology","ovs"))
73 when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate));
74 when(featureManagerMock.isActive(Features.FLAG_5G_IN_NEW_INSTANTIATION_UI)).thenReturn(true);
79 public static Object[][] anyAlacarteDataProvider() {
80 return new Object[][] {
81 {"A-La-Carte", VidNotions.InstantiationUI.ANY_ALACARTE_NEW_UI},
82 {"Macro", VidNotions.InstantiationUI.LEGACY},
86 @Test(dataProvider = "anyAlacarteDataProvider")
87 public void FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI_is_active_UIHintIsPositive(String instantiationType, VidNotions.InstantiationUI expectedInstantiationUI) {
88 when(featureManagerMock.isActive(Features.FLAG_EXP_ANY_ALACARTE_NEW_INSTANTIATION_UI)).thenReturn(true);
89 ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
90 when(csarHelper.getServiceMetadata()).thenReturn(new Metadata(ImmutableMap.of(
91 "instantiationType", instantiationType
93 NodeTemplate nodeTemplate = mock(NodeTemplate.class);
95 when(nodeTemplate.getProperties()).thenReturn(new LinkedHashMap<>(ImmutableMap.of(
96 "dummy_val", mock(Property.class),
97 "network_technology", new Property(Pair.of("network_technology","ovs"))
100 when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate));
102 assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(expectedInstantiationUI));
106 public void VLNetworkWithPropertyNetworkTechnologyNot5G_UIHintIsNegative() {
107 ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
109 NodeTemplate nodeTemplate = mock(NodeTemplate.class);
111 when(nodeTemplate.getProperties()).thenReturn(new LinkedHashMap<>(ImmutableMap.of(
112 "dummy_val", mock(Property.class),
113 "network_technology", new Property(Pair.of("network_technology","old_value"))
116 when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate));
118 assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.LEGACY));
119 assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper) , is(VidNotions.ModelCategory.OTHER));
123 public void withoutMocks_givenZippedToscaFile_hasAnyNetworkWithPropertyEqualsToAnyOfYieldsTrue() throws SdcToscaParserException {
124 SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
125 ISdcCsarHelper csarHelper = factory.getSdcCsarHelper(getClass().getClassLoader().getResource("service-vl-csar.zip").getPath(),false);
127 assertThat(vidNotionsBuilder.isALaCarte(csarHelper), is(false));
128 assertThat(vidNotionsBuilder.hasAnyNetworkWithPropertyEqualsToAnyOf(csarHelper, "unexpected_property_name"), is(false));
129 assertThat(vidNotionsBuilder.hasAnyNetworkWithPropertyEqualsToAnyOf(csarHelper, "network_technology","Standard-SR-IOV"), is(true));
130 assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.LEGACY));
134 //public void withoutMocks_givenZippedToscaFile_hasFabricConfigurationYieldsTrue() throws SdcToscaParserException {
135 // SdcToscaParserFactory factory = SdcToscaParserFactory.getInstance();
136 // ISdcCsarHelper csarHelper = factory.getSdcCsarHelper(getClass().getClassLoader().getResource("service-fabric-configuration.zip").getPath(),false);
138 // assertThat(vidNotionsBuilder.isALaCarte(csarHelper), is(false));
139 // assertThat(vidNotionsBuilder.hasFabricConfiguration(csarHelper), is(true));
140 // assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.LEGACY));
145 public void uuidIsExactly1ffce89fEtc_UIHintIsPositive() {
146 ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
148 when(csarHelper.getServiceMetadata()).thenReturn(new Metadata(ImmutableMap.of(
149 "UUID", "95eb2c44-bff2-4e8b-ad5d-8266870b7717"
151 when(featureManagerMock.isActive(Features.FLAG_5G_IN_NEW_INSTANTIATION_UI)).thenReturn(true);
152 assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.SERVICE_UUID_IS_1ffce89f_ef3f_4cbb_8b37_82134590c5de));
157 public static Object[][] trueAndFalse() {
158 return new Object[][] {{true}, {false}};
161 @Test(dataProvider = "trueAndFalse")
162 public void buildVidNotions_nullByFlag(boolean flagValue) {
163 ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
165 when(featureManagerMock.isActive(Features.FLAG_5G_IN_NEW_INSTANTIATION_UI)).thenReturn(flagValue);
166 assertThat(vidNotionsBuilder.buildVidNotions(csarHelper, null), hasProperty("instantiationUI", is(VidNotions.InstantiationUI.LEGACY)));
170 public static Object[][] ServiceRoleTypesDataProvider() {
171 return new Object[][] {
172 {"gROUPING", VidNotions.InstantiationUI.SERVICE_WITH_VNF_GROUPING},
173 {"", VidNotions.InstantiationUI.LEGACY},
177 @Test(dataProvider = "ServiceRoleTypesDataProvider")
178 public void testGetViewEditUITypeForResourceGroup(String serviceRole, VidNotions.InstantiationUI expectedViewEditUI) {
179 when(featureManagerMock.isActive(Features.FLAG_ASYNC_INSTANTIATION)).thenReturn(true);
180 when(featureManagerMock.isActive(Features.FLAG_1902_VNF_GROUPING)).thenReturn(true);
181 ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
182 when(csarHelper.getServiceMetadata()).thenReturn(new Metadata(ImmutableMap.of(
183 "serviceRole", serviceRole
186 assertThat(vidNotionsBuilder.suggestViewEditUI(csarHelper, null), is(expectedViewEditUI));
190 public static Object[][] macroToViewEditDataProvider() {
191 return new Object[][] {
192 {"macro service + not excluded + needed flags are open", true, false, true, true, VidNotions.InstantiationUI.MACRO_SERVICE},
193 {"not macro service", false, false, true, true, VidNotions.InstantiationUI.LEGACY},
194 {"macro that shall be excluded because it has pnf", true, true, true, true, VidNotions.InstantiationUI.LEGACY},
195 {"macro service + FLAG_ASYNC_INSTANTIATION off", true, false, false, true, VidNotions.InstantiationUI.LEGACY},
196 {"macro service + FLAG_1902_NEW_VIEW_EDIT off", true, false, true, false, VidNotions.InstantiationUI.LEGACY},
200 @Test(dataProvider="macroToViewEditDataProvider")
201 public void whenServiceIsMacro_viewEditIsRight(
202 String testDescription,
205 boolean isFlagAsyncInstantiationActive,
206 boolean isFlag1902NewViewEdit,
207 VidNotions.InstantiationUI expectedViewEditUi) {
209 ISdcCsarHelper csarHelper = mock(ISdcCsarHelper.class);
210 ServiceModel serviceModel = mock(ServiceModel.class);
213 String instantiationType = isMacro ? ToscaParserImpl2.Constants.MACRO : ToscaParserImpl2.Constants.A_LA_CARTE;
214 Service service = mock(Service.class);
215 when(serviceModel.getService()).thenReturn(service);
216 when(service.getInstantiationType()).thenReturn(instantiationType);
217 when(featureManagerMock.isActive(Features.FLAG_ASYNC_INSTANTIATION)).thenReturn(isFlagAsyncInstantiationActive);
218 when(featureManagerMock.isActive(Features.FLAG_1902_NEW_VIEW_EDIT)).thenReturn(isFlag1902NewViewEdit);
220 //mock for isExcluded
222 when(serviceModel.getPnfs()).thenReturn(ImmutableMap.of("a", mock(Node.class)));
225 VidNotions.InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel);
226 assertEquals(expectedViewEditUi, result);
230 public static Object[][] instantiationUIToViewEditDataProvider() {
231 return new Object[][] {
232 {"network cloud(5G) service + needed flags are open", true, true, true, VidNotions.InstantiationUI.NETWORK_WITH_PROPERTY_NETWORK_TECHNOLOGY_EQUALS_STANDARD_SRIOV_OR_OVS},
233 {"mocked service + needed flags are open", false, true, true, VidNotions.InstantiationUI.LEGACY},
234 {"network cloud(5G) service + FLAG_ASYNC_INSTANTIATION is off", true, false, true, VidNotions.InstantiationUI.LEGACY},
235 {"network cloud(5G) service + FLAG_1902_NEW_VIEW_EDIT is off", true, true, false, VidNotions.InstantiationUI.LEGACY},
240 @Test(dataProvider="instantiationUIToViewEditDataProvider")
241 public void whenInstantiationUIIsNotLegacy_viewEditIsRight(
242 String testDescription,
243 boolean isInstantiationUINotLegacy,
244 boolean isFlagAsyncInstantiationActive,
245 boolean isFlag1902NewViewEdit,
246 VidNotions.InstantiationUI expectedViewEditUi) {
248 ISdcCsarHelper csarHelper = isInstantiationUINotLegacy ? mockForNonLegacyInstantiationUI() : mock(ISdcCsarHelper.class);
249 when(featureManagerMock.isActive(Features.FLAG_ASYNC_INSTANTIATION)).thenReturn(isFlagAsyncInstantiationActive);
250 when(featureManagerMock.isActive(Features.FLAG_1902_NEW_VIEW_EDIT)).thenReturn(isFlag1902NewViewEdit);
252 ServiceModel serviceModel = mock(ServiceModel.class);
253 Service service = mock(Service.class);
254 when(serviceModel.getService()).thenReturn(service);
255 when(service.getInstantiationType()).thenReturn(ToscaParserImpl2.Constants.A_LA_CARTE);
257 VidNotions.InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel);
258 assertEquals(expectedViewEditUi, result);
262 public static Object[][] mockerForMacroExcluded() {
263 return new Object[][] {
264 {"service with pnfs", (BiConsumer<ServiceModel, FeatureManager>) (serviceModel, fm)->when(serviceModel.getPnfs()).thenReturn(ImmutableMap.of("a", mock(Node.class))), true},
265 {"service with collection resource", (BiConsumer<ServiceModel, FeatureManager>) (serviceModel, fm)->when(serviceModel.getCollectionResource()).thenReturn(ImmutableMap.of("a", mock(CR.class))), true},
266 {"service with network + FLAG_NETWORK_TO_ASYNC_INSTANTIATION false ", (BiConsumer<ServiceModel, FeatureManager>) (serviceModel, fm)->{
267 when(serviceModel.getNetworks()).thenReturn(ImmutableMap.of("a", mock(Network.class)));
268 when(fm.isActive(Features.FLAG_NETWORK_TO_ASYNC_INSTANTIATION)).thenReturn(false);}
270 {"service with network + FLAG_NETWORK_TO_ASYNC_INSTANTIATION true", (BiConsumer<ServiceModel, FeatureManager>) (serviceModel, fm)->{
271 when(serviceModel.getNetworks()).thenReturn(ImmutableMap.of("a", mock(Network.class)));
272 when(fm.isActive(Features.FLAG_NETWORK_TO_ASYNC_INSTANTIATION)).thenReturn(true);}
274 {"empty service + FLAG_NETWORK_TO_ASYNC_INSTANTIATION false", (BiConsumer<ServiceModel, FeatureManager>) (serviceModel, fm)->when(fm.isActive(Features.FLAG_NETWORK_TO_ASYNC_INSTANTIATION)).thenReturn(false), false},
278 @Test(dataProvider="mockerForMacroExcluded")
279 public void testIsMacroExcludedFromAsyncFlow(String testDescription, BiConsumer<ServiceModel, FeatureManager> mocker, boolean shallBeExcluded) {
280 ServiceModel serviceModel = mock(ServiceModel.class);
281 mocker.accept(serviceModel, featureManagerMock);
282 assertEquals(shallBeExcluded, vidNotionsBuilder.isMacroExcludedFromAsyncFlow(serviceModel));