40b6990a67f000f79768803a2072ef423809dbe6
[sdc.git] /
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
20 package org.onap.sdc.frontend.ci.tests.execute.sanity;
21
22 import static org.hamcrest.MatcherAssert.assertThat;
23 import static org.hamcrest.Matchers.empty;
24 import static org.hamcrest.Matchers.not;
25 import static org.junit.Assert.fail;
26
27 import com.aventstack.extentreports.Status;
28 import java.util.Map;
29 import java.util.Optional;
30 import org.junit.jupiter.api.Assertions;
31 import org.onap.sdc.backend.ci.tests.data.providers.OnboardingDataProviders;
32 import org.onap.sdc.backend.ci.tests.datatypes.enums.ComponentType;
33 import org.onap.sdc.backend.ci.tests.datatypes.enums.ServiceCategoriesEnum;
34 import org.onap.sdc.backend.ci.tests.utils.general.ElementFactory;
35 import org.onap.sdc.frontend.ci.tests.datatypes.CategorySelect;
36 import org.onap.sdc.frontend.ci.tests.datatypes.ComponentData;
37 import org.onap.sdc.frontend.ci.tests.datatypes.ServiceCreateData;
38 import org.onap.sdc.frontend.ci.tests.datatypes.VspCreateData;
39 import org.onap.sdc.frontend.ci.tests.datatypes.VspOnboardingProcedure;
40 import org.onap.sdc.frontend.ci.tests.exception.UnzipException;
41 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
42 import org.onap.sdc.frontend.ci.tests.execute.setup.ExtentTestActions;
43 import org.onap.sdc.frontend.ci.tests.execute.setup.SetupCDTest;
44 import org.onap.sdc.frontend.ci.tests.flow.AddNodeToCompositionFlow;
45 import org.onap.sdc.frontend.ci.tests.flow.CreateResourceFromVspFlow;
46 import org.onap.sdc.frontend.ci.tests.flow.CreateServiceFlow;
47 import org.onap.sdc.frontend.ci.tests.flow.CreateVlmFlow;
48 import org.onap.sdc.frontend.ci.tests.flow.CreateVspFlow;
49 import org.onap.sdc.frontend.ci.tests.flow.DownloadCsarArtifactFlow;
50 import org.onap.sdc.frontend.ci.tests.flow.ImportVspFlow;
51 import org.onap.sdc.frontend.ci.tests.flow.exception.UiTestFlowRuntimeException;
52 import org.onap.sdc.frontend.ci.tests.pages.ComponentPage;
53 import org.onap.sdc.frontend.ci.tests.pages.ResourceCreatePage;
54 import org.onap.sdc.frontend.ci.tests.pages.ServiceCreatePage;
55 import org.onap.sdc.frontend.ci.tests.pages.TopNavComponent;
56 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
57 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.ToscaArtifactsPage;
58 import org.onap.sdc.frontend.ci.tests.pages.home.HomePage;
59 import org.onap.sdc.frontend.ci.tests.utilities.FileHandling;
60 import org.openqa.selenium.WebDriver;
61 import org.slf4j.Logger;
62 import org.slf4j.LoggerFactory;
63 import org.testng.annotations.BeforeMethod;
64 import org.testng.annotations.Test;
65
66 public class EtsiOnboardVnfCnfUiTests extends SetupCDTest {
67
68     private static final Logger LOGGER = LoggerFactory.getLogger(EtsiOnboardVnfCnfUiTests.class);
69
70     private WebDriver webDriver;
71     private TopNavComponent topNavComponent;
72     private HomePage homePage;
73
74     @BeforeMethod
75     public void init() {
76         webDriver = DriverFactory.getDriver();
77         topNavComponent = new TopNavComponent(webDriver);
78     }
79
80     @Test
81     public void createVlm() {
82         final CreateVlmFlow createVlmFlow = new CreateVlmFlow(webDriver);
83         createVlmFlow.run();
84     }
85
86     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "etsiVnfCnfOnboardPackages", dependsOnMethods = "createVlm")
87     public void onboardEtsiVnfCnfFlow(final String rootFolder, final String vnfFile) {
88         setLog(vnfFile);
89         final String resourceName = ElementFactory.addRandomSuffixToName(ElementFactory.getResourcePrefix());
90         runOnboardEtsiVnfCnf(resourceName, rootFolder, vnfFile);
91         runDistribution(resourceName);
92     }
93
94     /**
95      * Runs ETSI onboarding VNF/CNF UI flow
96      *
97      * @param resourceName VSP name
98      * @param rootFolder VNF/CNF package location
99      * @param vnfCnfFile file to be onboarded
100      */
101     private void runOnboardEtsiVnfCnf(final String resourceName, final String rootFolder, final String vnfCnfFile) {
102         var vspCreateData = new VspCreateData();
103         vspCreateData.setName(resourceName);
104         vspCreateData.setCategory(CategorySelect.COMMON_NETWORK_RESOURCES);
105         vspCreateData.setDescription("description");
106         vspCreateData.setOnboardingProcedure(VspOnboardingProcedure.NETWORK_PACKAGE);
107         final CreateVspFlow createVspFlow = new CreateVspFlow(webDriver, vspCreateData, vnfCnfFile, rootFolder);
108         createVspFlow.run(topNavComponent);
109         final ImportVspFlow importVspFlow = new ImportVspFlow(webDriver, resourceName);
110         ResourceCreatePage resourceCreatePage = importVspFlow.run()
111             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
112         final CreateResourceFromVspFlow createResourceFlow = new CreateResourceFromVspFlow(webDriver, resourceName);
113         resourceCreatePage = createResourceFlow.run(resourceCreatePage)
114             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
115         resourceCreatePage.isLoaded();
116         resourceCreatePage.certifyComponent();
117         ExtentTestActions.takeScreenshot(Status.INFO, "resource-certified",
118             String.format("Resource '%s' was certified", resourceName));
119         downloadAndVerifyOnboardedPackage(loadComponentPage());
120     }
121
122     private void runDistribution(final String resourceName) {
123         final ServiceCreateData serviceCreateData = createServiceFormData();
124         final ServiceCreatePage serviceCreatePage = createService(goToHomePage(topNavComponent), serviceCreateData);
125         final ComponentData parentComponent = new ComponentData();
126         parentComponent.setName(serviceCreateData.getName());
127         parentComponent.setVersion("0.1");
128         parentComponent.setComponentType(ComponentType.SERVICE);
129         final ComponentData componentToAdd = new ComponentData();
130         componentToAdd.setName(resourceName);
131         componentToAdd.setVersion("1.0");
132         componentToAdd.setComponentType(ComponentType.RESOURCE);
133         final AddNodeToCompositionFlow addNodeToCompositionFlow = new AddNodeToCompositionFlow(webDriver, parentComponent, componentToAdd);
134         ComponentPage componentPage = loadComponentPage();
135         final CompositionPage compositionPage = (CompositionPage) addNodeToCompositionFlow.run(componentPage.goToComposition())
136             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return CompositionPage"));
137         compositionPage.isLoaded();
138         ExtentTestActions.takeScreenshot(Status.INFO, "node-added-to-composition",
139             String.format("Resource '%s' was added to composition", serviceCreateData.getName()));
140         componentPage = compositionPage.goToGeneral();
141         componentPage.isLoaded();
142         componentPage.certifyComponent();
143         componentPage.isLoaded();
144         ExtentTestActions.takeScreenshot(Status.INFO, "service-certified",
145             String.format("Service '%s' was certified", serviceCreateData.getName()));
146
147         downloadAndVerifyOnboardedPackage(componentPage);
148     }
149
150     private void downloadAndVerifyOnboardedPackage(final ComponentPage componentPage) {
151         final DownloadCsarArtifactFlow downloadCsarArtifactFlow = downloadToscaCsar(componentPage);
152         final ToscaArtifactsPage toscaArtifactsPage = downloadCsarArtifactFlow.getLandedPage()
153             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ToscaArtifactsPage"));
154         assertThat("No artifact download was found", toscaArtifactsPage.getDownloadedArtifactList(), not(empty()));
155         final String downloadedCsarName = toscaArtifactsPage.getDownloadedArtifactList().get(0);
156         verifyOnboardedPackage(downloadedCsarName);
157     }
158
159     private ServiceCreatePage createService(final HomePage homePage, final ServiceCreateData serviceCreateData) {
160         final CreateServiceFlow createServiceFlow = new CreateServiceFlow(webDriver, serviceCreateData);
161         return createServiceFlow.run(homePage)
162             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ServiceCreatePage"));
163     }
164
165     private ServiceCreateData createServiceFormData() {
166         final ServiceCreateData serviceCreateData = new ServiceCreateData();
167         serviceCreateData.setRandomName(ElementFactory.addRandomSuffixToName(ElementFactory.getServicePrefix()));
168         serviceCreateData.setCategory(ServiceCategoriesEnum.E2E_SERVICE.getValue());
169         serviceCreateData.setDescription("aDescription");
170         return serviceCreateData;
171     }
172
173     /**
174      * Go to the system home page through the top nav menu.
175      *
176      * @param topNavComponent the top nav component
177      */
178     private HomePage goToHomePage(final TopNavComponent topNavComponent) {
179         topNavComponent.isLoaded();
180         homePage = topNavComponent.clickOnHome();
181         homePage.isLoaded();
182         ExtentTestActions.takeScreenshot(Status.INFO, "home-is-loaded", "The Home page is loaded.");
183         return homePage;
184     }
185
186     /**
187      * Loads Component Page
188      *
189      * @return ComponentPage
190      */
191     private ComponentPage loadComponentPage() {
192         final ComponentPage componentPage = Optional.of(new ComponentPage(webDriver))
193             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ComponentPage"));
194         componentPage.isLoaded();
195         return componentPage;
196     }
197
198     /**
199      * Download the generated package
200      *
201      * @return DownloadCsarArtifactFlow
202      */
203     private DownloadCsarArtifactFlow downloadToscaCsar(final ComponentPage componentPage) {
204         final DownloadCsarArtifactFlow downloadCsarArtifactFlow = new DownloadCsarArtifactFlow(webDriver);
205         downloadCsarArtifactFlow.run(componentPage);
206         return downloadCsarArtifactFlow;
207     }
208
209     /**
210      * Verifies if the onboarded package is included in the downloaded csar
211      *
212      * @param downloadedCsarName downloaded csar package name
213      */
214     private void verifyOnboardedPackage(final String downloadedCsarName) {
215         final String downloadFolderPath = getConfig().getDownloadAutomationFolder();
216         final Map<String, byte[]> filesFromZip;
217         try {
218             filesFromZip = FileHandling.getFilesFromZip(downloadFolderPath, downloadedCsarName);
219             final java.util.Optional<String> etsiPackageEntryOpt =
220                 filesFromZip.keySet().stream().filter(s -> s.startsWith("Artifacts/Deployment/ETSI_PACKAGE"))
221                     .findFirst();
222             if (etsiPackageEntryOpt.isEmpty()) {
223                 Assertions.fail("Could not find the  Onboarded Package in Artifacts/Deployment/ETSI_PACKAGE");
224             }
225         } catch (final UnzipException e) {
226             final String errorMsg = "Could not unzip the downloaded csar package";
227             LOGGER.info(errorMsg, e);
228             fail(String.format("%s Error: %s", errorMsg, e.getMessage()));
229         }
230     }
231 }