Merge from ECOMP's repository
[vid.git] / vid-app-common / src / test / java / org / onap / vid / asdc / parser / VidNotionsBuilderTest.java
1 package org.onap.vid.asdc.parser;
2
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;
24
25 import java.util.LinkedHashMap;
26 import java.util.UUID;
27 import java.util.function.BiConsumer;
28
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;
35
36 public class VidNotionsBuilderTest {
37
38     @InjectMocks
39     VidNotionsBuilder vidNotionsBuilder;
40
41     @Mock
42     private FeatureManager featureManagerMock;
43
44     @BeforeClass
45     public void initMocks() {
46         MockitoAnnotations.initMocks(this);
47     }
48
49     @AfterMethod
50     public void reset() {
51         Mockito.reset(featureManagerMock);
52     }
53
54     @Test
55     public void VLNetworkWithPropertyNetworkTechnologyOVS_UIHintIsPositive() {
56         ISdcCsarHelper csarHelper = mockForNonLegacyInstantiationUI();
57
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));
60     }
61
62     @NotNull
63     protected ISdcCsarHelper mockForNonLegacyInstantiationUI() {
64         ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
65
66         NodeTemplate nodeTemplate = mock(NodeTemplate.class);
67
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"))
71         )));
72
73         when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate));
74         when(featureManagerMock.isActive(Features.FLAG_5G_IN_NEW_INSTANTIATION_UI)).thenReturn(true);
75         return csarHelper;
76     }
77
78     @DataProvider
79     public static Object[][] anyAlacarteDataProvider() {
80         return new Object[][] {
81                 {"A-La-Carte", VidNotions.InstantiationUI.ANY_ALACARTE_NEW_UI},
82                 {"Macro", VidNotions.InstantiationUI.LEGACY},
83         };
84     }
85
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
92         )));
93         NodeTemplate nodeTemplate = mock(NodeTemplate.class);
94
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"))
98         )));
99
100         when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate));
101
102         assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(expectedInstantiationUI));
103     }
104
105     @Test
106     public void VLNetworkWithPropertyNetworkTechnologyNot5G_UIHintIsNegative() {
107         ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
108
109         NodeTemplate nodeTemplate = mock(NodeTemplate.class);
110
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"))
114         )));
115
116         when(csarHelper.getServiceVlList()).thenReturn(ImmutableList.of(nodeTemplate));
117
118         assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.LEGACY));
119         assertThat(vidNotionsBuilder.suggestModelCategory(csarHelper) , is(VidNotions.ModelCategory.OTHER));
120     }
121
122     @Test
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);
126
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));
131     }
132
133     //@Test
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);
137     //
138     //    assertThat(vidNotionsBuilder.isALaCarte(csarHelper), is(false));
139     //    assertThat(vidNotionsBuilder.hasFabricConfiguration(csarHelper), is(true));
140     //    assertThat(vidNotionsBuilder.suggestInstantiationUI(csarHelper), is(VidNotions.InstantiationUI.LEGACY));
141     //}
142
143
144     @Test
145     public void uuidIsExactly1ffce89fEtc_UIHintIsPositive() {
146         ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
147
148         when(csarHelper.getServiceMetadata()).thenReturn(new Metadata(ImmutableMap.of(
149                 "UUID", "95eb2c44-bff2-4e8b-ad5d-8266870b7717"
150         )));
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));
153     }
154
155
156     @DataProvider
157     public static Object[][] trueAndFalse() {
158         return new Object[][] {{true}, {false}};
159     }
160
161     @Test(dataProvider = "trueAndFalse")
162     public void buildVidNotions_nullByFlag(boolean flagValue) {
163         ISdcCsarHelper csarHelper = ToscaParserImpl2Test.getMockedSdcCsarHelper(UUID.randomUUID().toString());
164
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)));
167     }
168
169     @DataProvider
170     public static Object[][] ServiceRoleTypesDataProvider() {
171         return new Object[][] {
172                 {"gROUPING", VidNotions.InstantiationUI.SERVICE_WITH_VNF_GROUPING},
173                 {"", VidNotions.InstantiationUI.LEGACY},
174         };
175     }
176
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
184         )));
185
186         assertThat(vidNotionsBuilder.suggestViewEditUI(csarHelper, null), is(expectedViewEditUI));
187     }
188
189     @DataProvider
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},
197         };
198     }
199
200     @Test(dataProvider="macroToViewEditDataProvider")
201     public void whenServiceIsMacro_viewEditIsRight(
202             String testDescription,
203             boolean isMacro,
204             boolean isExcluded,
205             boolean isFlagAsyncInstantiationActive,
206             boolean isFlag1902NewViewEdit,
207             VidNotions.InstantiationUI expectedViewEditUi) {
208
209         ISdcCsarHelper csarHelper = mock(ISdcCsarHelper.class);
210         ServiceModel serviceModel = mock(ServiceModel.class);
211
212         //mock for is Macro
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);
219
220         //mock for isExcluded
221         if (isExcluded) {
222             when(serviceModel.getPnfs()).thenReturn(ImmutableMap.of("a", mock(Node.class)));
223         }
224
225         VidNotions.InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel);
226         assertEquals(expectedViewEditUi, result);
227     }
228
229     @DataProvider
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},
236         };
237     }
238
239
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) {
247
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);
251
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);
256
257         VidNotions.InstantiationUI result = vidNotionsBuilder.suggestViewEditUI(csarHelper, serviceModel);
258         assertEquals(expectedViewEditUi, result);
259     }
260
261     @DataProvider
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);}
269                         , true},
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);}
273                     , false},
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},
275         };
276     }
277
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));
283     }
284
285
286
287
288
289
290 }