6823c3eef02519bde5048eb8d62f3d541f25d1fc
[sdc.git] / integration-tests / src / test / java / org / onap / sdc / frontend / ci / tests / execute / sanity / ImportVfcUiTest.java
1 /*
2  * ============LICENSE_START=======================================================
3  *  Copyright (C) 2021 Nordix Foundation
4  *  ================================================================================
5  *  Licensed under the Apache License, Version 2.0 (the "License");
6  *  you may not use this file except in compliance with the License.
7  *  You may obtain a copy of the License at
8  *
9  *        http://www.apache.org/licenses/LICENSE-2.0
10  *  Unless required by applicable law or agreed to in writing, software
11  *  distributed under the License is distributed on an "AS IS" BASIS,
12  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  *  See the License for the specific language governing permissions and
14  *  limitations under the License.
15  *
16  *  SPDX-License-Identifier: Apache-2.0
17  *  ============LICENSE_END=========================================================
18  */
19 package org.onap.sdc.frontend.ci.tests.execute.sanity;
20
21 import static org.hamcrest.MatcherAssert.assertThat;
22 import static org.hamcrest.Matchers.anEmptyMap;
23 import static org.hamcrest.Matchers.empty;
24 import static org.hamcrest.Matchers.emptyString;
25 import static org.hamcrest.Matchers.not;
26 import static org.junit.jupiter.api.Assertions.assertEquals;
27 import static org.junit.jupiter.api.Assertions.assertNotNull;
28 import static org.junit.jupiter.api.Assertions.fail;
29
30 import java.util.Arrays;
31 import java.util.Map;
32 import java.util.Optional;
33 import org.onap.sdc.backend.ci.tests.datatypes.enums.ComponentType;
34 import org.onap.sdc.backend.ci.tests.datatypes.enums.ResourceCategoryEnum;
35 import org.onap.sdc.backend.ci.tests.utils.general.ElementFactory;
36 import org.onap.sdc.frontend.ci.tests.datatypes.ComponentData;
37 import org.onap.sdc.frontend.ci.tests.datatypes.ResourceCreateData;
38 import org.onap.sdc.frontend.ci.tests.exception.UnzipException;
39 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
40 import org.onap.sdc.frontend.ci.tests.execute.setup.SetupCDTest;
41 import org.onap.sdc.frontend.ci.tests.flow.AddNodeToCompositionFlow;
42 import org.onap.sdc.frontend.ci.tests.flow.CreateVfFlow;
43 import org.onap.sdc.frontend.ci.tests.flow.CreateVfcFlow;
44 import org.onap.sdc.frontend.ci.tests.flow.DownloadCsarArtifactFlow;
45 import org.onap.sdc.frontend.ci.tests.flow.exception.UiTestFlowRuntimeException;
46 import org.onap.sdc.frontend.ci.tests.pages.ComponentPage;
47 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
48 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.ToscaArtifactsPage;
49 import org.onap.sdc.frontend.ci.tests.pages.home.HomePage;
50 import org.onap.sdc.frontend.ci.tests.utilities.FileHandling;
51 import org.openqa.selenium.WebDriver;
52 import org.testng.annotations.BeforeClass;
53 import org.testng.annotations.Test;
54 import org.yaml.snakeyaml.Yaml;
55
56 public class ImportVfcUiTest extends SetupCDTest {
57
58     private String filePath;
59     private WebDriver webDriver;
60     private HomePage homePage;
61     private ResourceCreateData vfcCreateData;
62     private ResourceCreateData vfCreateData;
63
64     @BeforeClass
65     public void beforeClass() {
66         filePath = FileHandling.getFilePath("VFCs/");
67     }
68
69     @Test
70     public void importVFC_createVF_addVFC2VF_test() throws UnzipException {
71         webDriver = DriverFactory.getDriver();
72         homePage = new HomePage(webDriver);
73         // TC - Import VFC with root namespace
74         String fileName = "org.openecomp.resource.VFC-root.yml";
75         CreateVfcFlow createVfcFlow = createVFC(fileName);
76
77         ComponentPage componentPage = createVfcFlow.getLandedPage()
78             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
79         componentPage.isLoaded();
80         componentPage.certifyComponent();
81         componentPage.isLoaded();
82
83         Map<String, Object> yamlObject = downloadToscaArtifact(componentPage);
84         checkMetadata(yamlObject, vfcCreateData);
85         checkNodeTypes(yamlObject);
86         homePage.getTopNavComponent().clickOnHome();
87
88         // TC - Import hierarchy of VFCs
89         fileName = "org.openecomp.resource.VFC-child.yml";
90         createVfcFlow = createVFC(fileName);
91         componentPage = createVfcFlow.getLandedPage().orElseThrow();
92         componentPage.certifyComponent();
93         componentPage.isLoaded();
94
95         yamlObject = downloadToscaArtifact(createVfcFlow.getLandedPage().get());
96         checkMetadata(yamlObject, vfcCreateData);
97         checkNodeTypes(yamlObject);
98         homePage.getTopNavComponent().clickOnHome();
99
100         // TC - Import VFC with interface inputs
101         // TC - Import VFC with attributes
102         final CreateVfFlow createVfFlow = createVF();
103         componentPage = createVfFlow.getLandedPage()
104             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
105         componentPage.isLoaded();
106
107         final AddNodeToCompositionFlow addNodeToCompositionFlow = addNodeToCompositionFlow(componentPage);
108
109         final CompositionPage compositionPage = addNodeToCompositionFlow.getLandedPage()
110             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return CompositionPage"));
111         componentPage = compositionPage.goToGeneral();
112         componentPage.isLoaded();
113         componentPage.certifyComponent();
114         componentPage.isLoaded();
115         yamlObject = downloadToscaArtifact(componentPage);
116         checkMetadata(yamlObject, vfCreateData);
117         checkTopologyTemplate(yamlObject);
118
119     }
120
121     private AddNodeToCompositionFlow addNodeToCompositionFlow(final ComponentPage componentPage) {
122         componentPage.isLoaded();
123         final ComponentData parentComponent = new ComponentData();
124         parentComponent.setName(vfCreateData.getName());
125         parentComponent.setVersion("0.1");
126         parentComponent.setComponentType(ComponentType.RESOURCE);
127         final ComponentData componentToAdd = new ComponentData();
128         componentToAdd.setName(vfcCreateData.getName());
129         componentToAdd.setVersion("1.0");
130         componentToAdd.setComponentType(ComponentType.RESOURCE);
131         final AddNodeToCompositionFlow addNodeToCompositionFlow = new AddNodeToCompositionFlow(webDriver, parentComponent, componentToAdd);
132         addNodeToCompositionFlow.run(componentPage.goToComposition());
133         return addNodeToCompositionFlow;
134     }
135
136     private Map<String, Object> downloadToscaArtifact(final ComponentPage componentPage) throws UnzipException {
137         final DownloadCsarArtifactFlow downloadCsarArtifactFlow = downloadCsarArtifact(componentPage);
138         final ToscaArtifactsPage toscaArtifactsPage = downloadCsarArtifactFlow.getLandedPage()
139             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ToscaArtifactsPage"));
140
141         assertThat("No artifact download was found", toscaArtifactsPage.getDownloadedArtifactList(), not(empty()));
142         final String downloadedCsarName = toscaArtifactsPage.getDownloadedArtifactList().get(0);
143         final String downloadFolderPath = getConfig().getDownloadAutomationFolder();
144         final Map<String, byte[]> filesFromZip = FileHandling.getFilesFromZip(downloadFolderPath, downloadedCsarName);
145         final Optional<String> resourceEntryOpt = filesFromZip.keySet().stream()
146             .filter(s -> s.equals("Definitions/" + downloadedCsarName.replace("-csar.csar", "-template.yml")))
147             .findFirst();
148         if (resourceEntryOpt.isEmpty()) {
149             fail("Could not find the resource package in Definitions");
150         }
151         return loadYamlObject(filesFromZip.get(resourceEntryOpt.get()));
152     }
153
154     private Map<String, Object> getMapEntry(final Map<String, Object> yamlObj, final String entryName) {
155         try {
156             return (Map<String, Object>) yamlObj.get(entryName);
157         } catch (final Exception e) {
158             final String errorMsg = String.format("Could not get the '%s' entry.", entryName);
159             fail(errorMsg + "Error message: " + e.getMessage());
160         }
161         return null;
162     }
163
164     private Map<String, Object> loadYamlObject(final byte[] mainDefinitionFileBytes) {
165         return new Yaml().load(new String(mainDefinitionFileBytes));
166     }
167
168     private DownloadCsarArtifactFlow downloadCsarArtifact(final ComponentPage componentPage) {
169         final DownloadCsarArtifactFlow downloadCsarArtifactFlow = new DownloadCsarArtifactFlow(webDriver);
170         downloadCsarArtifactFlow.setWaitBeforeGetTheFile(5L);
171         downloadCsarArtifactFlow.run(componentPage);
172         return downloadCsarArtifactFlow;
173     }
174
175     private CreateVfcFlow createVFC(final String fileName) {
176         vfcCreateData = createVfcFormData();
177         final CreateVfcFlow createVfcFlow = new CreateVfcFlow(webDriver, vfcCreateData, filePath + fileName);
178         createVfcFlow.run(homePage);
179         return createVfcFlow;
180     }
181
182     private CreateVfFlow createVF() {
183         vfCreateData = createVfFormData();
184         final CreateVfFlow createVfFlow = new CreateVfFlow(webDriver, vfCreateData);
185         createVfFlow.run(homePage);
186         return createVfFlow;
187     }
188
189     private ResourceCreateData createVfcFormData() {
190         final ResourceCreateData vfcCreateData = new ResourceCreateData();
191         vfcCreateData.setRandomName(ElementFactory.getResourcePrefix() + "-VFC");
192         vfcCreateData.setCategory(ResourceCategoryEnum.NETWORK_L4.getSubCategory());
193         vfcCreateData.setTagList(Arrays.asList(vfcCreateData.getName(), "importVFC"));
194         vfcCreateData.setDescription("aDescription");
195         vfcCreateData.setVendorName("Ericsson");
196         vfcCreateData.setVendorRelease("1.2.3");
197         vfcCreateData.setVendorModelNumber("4.5.6");
198         return vfcCreateData;
199     }
200
201     private ResourceCreateData createVfFormData() {
202         final ResourceCreateData vfCreateData = new ResourceCreateData();
203         vfCreateData.setRandomName(ElementFactory.getResourcePrefix() + "-VF");
204         vfCreateData.setCategory(ResourceCategoryEnum.NETWORK_L4.getSubCategory());
205         vfCreateData.setTagList(Arrays.asList(vfCreateData.getName(), "createVF"));
206         vfCreateData.setDescription("aDescription");
207         vfCreateData.setVendorName("Ericsson");
208         vfCreateData.setVendorRelease("6.5.4");
209         vfCreateData.setVendorModelNumber("3.2.1");
210         return vfCreateData;
211     }
212
213     private void checkMetadata(final Map<String, Object> map, final ResourceCreateData createdData) {
214         final Map<String, Object> metadata = getMapEntry(map, "metadata");
215
216         assertEquals(createdData.getName(), metadata.get("name"));
217         assertEquals(createdData.getDescription(), metadata.get("description"));
218         assertEquals("Network L4+", metadata.get("category"));
219         assertThat((String) metadata.get("type"), not(emptyString()));
220         assertEquals(createdData.getCategory(), metadata.get("subcategory"));
221         assertEquals(createdData.getVendorName(), metadata.get("resourceVendor"));
222         assertEquals(createdData.getVendorRelease(), metadata.get("resourceVendorRelease"));
223         assertEquals(createdData.getVendorModelNumber(), metadata.get("reourceVendorModelNumber"));
224     }
225
226     private void checkNodeTypes(final Map<String, Object> map) {
227         final Map<String, Object> mapEntry = getMapEntry(map, "node_types");
228         final Map<String, Object> nodeTypes = getMapEntry(mapEntry, mapEntry.keySet().iterator().next());
229
230         assertNotNull(nodeTypes);
231         assertEquals("aDescription", nodeTypes.get("description"));
232
233         final Map<String, Object> properties = getMapEntry(nodeTypes, "properties");
234         assertThat(properties, not(anEmptyMap()));
235
236         final Map<String, Object> attributes = getMapEntry(nodeTypes, "attributes");
237         assertThat(attributes, not(anEmptyMap()));
238
239         final Map<String, Object> interfaces = getMapEntry(nodeTypes, "interfaces");
240         assertThat(interfaces, not(anEmptyMap()));
241
242     }
243
244     private void checkTopologyTemplate(final Map<String, Object> map) {
245         final Map<String, Object> mapEntry = getMapEntry(map, "topology_template");
246         assertNotNull(mapEntry);
247
248         final Map<String, Object> properties = getMapEntry(mapEntry, "inputs");
249         assertThat(properties, not(anEmptyMap()));
250
251         final Map<String, Object> attributes = getMapEntry(mapEntry, "node_templates");
252         assertThat(attributes, not(anEmptyMap()));
253
254         final Map<String, Object> interfaces = getMapEntry(mapEntry, "substitution_mappings");
255         assertThat(interfaces, not(anEmptyMap()));
256
257     }
258 }