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