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