c149b24907eae01fcdd99da63d0de9211d1ad4bc
[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.DownloadCsarArtifactFlow;
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", dependsOnMethods = "createVlm")
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         compositionPage.isLoaded();
130         ExtentTestActions.takeScreenshot(Status.INFO, "node-added-to-composition",
131             String.format("Resource '%s' was added to composition", serviceCreateData.getName()));
132         componentPage = compositionPage.goToGeneral();
133         componentPage.isLoaded();
134         componentPage.certifyComponent();
135         componentPage.isLoaded();
136         ExtentTestActions.takeScreenshot(Status.INFO, "service-certified",
137             String.format("Service '%s' was certified", serviceCreateData.getName()));
138
139         downloadAndVerifyOnboardedPackage(componentPage);
140     }
141
142     private void downloadAndVerifyOnboardedPackage(final ComponentPage componentPage) {
143         final DownloadCsarArtifactFlow downloadCsarArtifactFlow = downloadToscaCsar(componentPage);
144         final ToscaArtifactsPage toscaArtifactsPage = downloadCsarArtifactFlow.getLandedPage()
145             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ToscaArtifactsPage"));
146         assertThat("No artifact download was found", toscaArtifactsPage.getDownloadedArtifactList(), not(empty()));
147         final String downloadedCsarName = toscaArtifactsPage.getDownloadedArtifactList().get(0);
148         verifyOnboardedPackage(downloadedCsarName);
149     }
150
151     private ServiceCreatePage createService(final HomePage homePage, final ServiceCreateData serviceCreateData) {
152         final CreateServiceFlow createServiceFlow = new CreateServiceFlow(webDriver, serviceCreateData);
153         return createServiceFlow.run(homePage)
154             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ServiceCreatePage"));
155     }
156
157     private ServiceCreateData createServiceFormData() {
158         final ServiceCreateData serviceCreateData = new ServiceCreateData();
159         serviceCreateData.setRandomName(ElementFactory.addRandomSuffixToName(ElementFactory.getServicePrefix()));
160         serviceCreateData.setCategory(ServiceCategoriesEnum.E2E_SERVICE.getValue());
161         serviceCreateData.setDescription("aDescription");
162         return serviceCreateData;
163     }
164
165     /**
166      * Go to the system home page through the top nav menu.
167      *
168      * @param topNavComponent the top nav component
169      */
170     private HomePage goToHomePage(final TopNavComponent topNavComponent) {
171         topNavComponent.isLoaded();
172         homePage = topNavComponent.clickOnHome();
173         homePage.isLoaded();
174         ExtentTestActions.takeScreenshot(Status.INFO, "home-is-loaded", "The Home page is loaded.");
175         return homePage;
176     }
177
178     /**
179      * Loads Component Page
180      *
181      * @return ComponentPage
182      */
183     private ComponentPage loadComponentPage() {
184         final ComponentPage componentPage = Optional.of(new ComponentPage(webDriver))
185             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected ComponentPage"));
186         componentPage.isLoaded();
187         return componentPage;
188     }
189
190     /**
191      * Download the generated package
192      *
193      * @return DownloadCsarArtifactFlow
194      */
195     private DownloadCsarArtifactFlow downloadToscaCsar(final ComponentPage componentPage) {
196         final DownloadCsarArtifactFlow downloadCsarArtifactFlow = new DownloadCsarArtifactFlow(webDriver);
197         downloadCsarArtifactFlow.run(componentPage);
198         return downloadCsarArtifactFlow;
199     }
200
201     /**
202      * Verifies if the onboarded package is included in the downloaded csar
203      *
204      * @param downloadedCsarName downloaded csar package name
205      */
206     private void verifyOnboardedPackage(final String downloadedCsarName) {
207         final String downloadFolderPath = getConfig().getDownloadAutomationFolder();
208         final Map<String, byte[]> filesFromZip;
209         try {
210             filesFromZip = FileHandling.getFilesFromZip(downloadFolderPath, downloadedCsarName);
211             final java.util.Optional<String> etsiPackageEntryOpt =
212                 filesFromZip.keySet().stream().filter(s -> s.startsWith("Artifacts/Deployment/ETSI_PACKAGE"))
213                     .findFirst();
214             if (etsiPackageEntryOpt.isEmpty()) {
215                 Assertions.fail("Could not find the  Onboarded Package in Artifacts/Deployment/ETSI_PACKAGE");
216             }
217         } catch (final UnzipException e) {
218             final String errorMsg = "Could not unzip the downloaded csar package";
219             LOGGER.info(errorMsg, e);
220             fail(String.format("%s Error: %s", errorMsg, e.getMessage()));
221         }
222     }
223 }