cf562c766f49a674e950388110acd683dfa1aa96
[sdc.git] /
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * Copyright (C) 2021 Nokia. All rights reserved.
7  * ================================================================================
8  * Licensed under the Apache License, Version 2.0 (the "License");
9  * you may not use this file except in compliance with the License.
10  * You may obtain a copy of the License at
11  *
12  *      http://www.apache.org/licenses/LICENSE-2.0
13  *
14  * Unless required by applicable law or agreed to in writing, software
15  * distributed under the License is distributed on an "AS IS" BASIS,
16  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
17  * See the License for the specific language governing permissions and
18  * limitations under the License.
19  * ============LICENSE_END=========================================================
20  */
21
22 package org.onap.sdc.frontend.ci.tests.execute.sanity;
23
24 import static org.testng.AssertJUnit.assertEquals;
25 import static org.testng.AssertJUnit.assertFalse;
26 import static org.testng.AssertJUnit.assertNotNull;
27 import static org.testng.AssertJUnit.assertTrue;
28 import static org.testng.AssertJUnit.fail;
29
30 import com.aventstack.extentreports.ExtentTest;
31 import com.aventstack.extentreports.Status;
32 import java.io.File;
33 import java.util.Arrays;
34 import java.util.HashMap;
35 import java.util.List;
36 import java.util.Map;
37 import java.util.stream.Collectors;
38 import org.onap.sdc.backend.ci.tests.data.providers.OnboardingDataProviders;
39 import org.onap.sdc.backend.ci.tests.datatypes.ResourceReqDetails;
40 import org.onap.sdc.backend.ci.tests.datatypes.ServiceReqDetails;
41 import org.onap.sdc.backend.ci.tests.datatypes.VendorLicenseModel;
42 import org.onap.sdc.backend.ci.tests.datatypes.VendorSoftwareProductObject;
43 import org.onap.sdc.backend.ci.tests.datatypes.enums.UserRoleEnum;
44 import org.onap.sdc.backend.ci.tests.datatypes.enums.XnfTypeEnum;
45 import org.onap.sdc.backend.ci.tests.utils.Utils;
46 import org.onap.sdc.backend.ci.tests.utils.general.AtomicOperationUtils;
47 import org.onap.sdc.backend.ci.tests.utils.general.ElementFactory;
48 import org.onap.sdc.backend.ci.tests.utils.general.OnboardingUtils;
49 import org.onap.sdc.backend.ci.tests.utils.general.VendorLicenseModelRestUtils;
50 import org.onap.sdc.backend.ci.tests.utils.general.VendorSoftwareProductRestUtils;
51 import org.onap.sdc.frontend.ci.tests.dataProvider.OnbordingDataProviders;
52 import org.onap.sdc.frontend.ci.tests.datatypes.CanvasElement;
53 import org.onap.sdc.frontend.ci.tests.datatypes.CanvasManager;
54 import org.onap.sdc.frontend.ci.tests.datatypes.DataTestIdEnum;
55 import org.onap.sdc.frontend.ci.tests.datatypes.ResourceCreateData;
56 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
57 import org.onap.sdc.frontend.ci.tests.execute.setup.ExtentTestActions;
58 import org.onap.sdc.frontend.ci.tests.execute.setup.SetupCDTest;
59 import org.onap.sdc.frontend.ci.tests.flow.CheckSoftwareVersionPropertyFlow;
60 import org.onap.sdc.frontend.ci.tests.flow.CreateResourceFromVspFlow;
61 import org.onap.sdc.frontend.ci.tests.flow.CreateVspFlow;
62 import org.onap.sdc.frontend.ci.tests.flow.ImportVspFlow;
63 import org.onap.sdc.frontend.ci.tests.flow.exception.UiTestFlowRuntimeException;
64 import org.onap.sdc.frontend.ci.tests.pages.CompositionPage;
65 import org.onap.sdc.frontend.ci.tests.pages.DeploymentArtifactPage;
66 import org.onap.sdc.frontend.ci.tests.pages.GeneralPageElements;
67 import org.onap.sdc.frontend.ci.tests.pages.GovernorOperationPage;
68 import org.onap.sdc.frontend.ci.tests.pages.HomePage;
69 import org.onap.sdc.frontend.ci.tests.pages.OpsOperationPage;
70 import org.onap.sdc.frontend.ci.tests.pages.ResourceCreatePage;
71 import org.onap.sdc.frontend.ci.tests.pages.ResourceGeneralPage;
72 import org.onap.sdc.frontend.ci.tests.pages.ServiceGeneralPage;
73 import org.onap.sdc.frontend.ci.tests.pages.TesterOperationPage;
74 import org.onap.sdc.frontend.ci.tests.pages.TopNavComponent;
75 import org.onap.sdc.frontend.ci.tests.pages.VspValidationPage;
76 import org.onap.sdc.frontend.ci.tests.pages.VspValidationResultsPage;
77 import org.onap.sdc.frontend.ci.tests.utilities.FileHandling;
78 import org.onap.sdc.frontend.ci.tests.utilities.GeneralUIUtils;
79 import org.onap.sdc.frontend.ci.tests.utilities.OnboardingUiUtils;
80 import org.onap.sdc.frontend.ci.tests.utilities.ServiceUIUtils;
81 import org.onap.sdc.frontend.ci.tests.verificator.ServiceVerificator;
82 import org.openecomp.sdc.be.model.ComponentInstance;
83 import org.openecomp.sdc.be.model.Resource;
84 import org.openecomp.sdc.be.model.Service;
85 import org.openqa.selenium.WebDriver;
86 import org.openqa.selenium.WebElement;
87 import org.slf4j.Logger;
88 import org.slf4j.LoggerFactory;
89 import org.testng.Assert;
90 import org.testng.AssertJUnit;
91 import org.testng.annotations.BeforeMethod;
92 import org.testng.annotations.Optional;
93 import org.testng.annotations.Parameters;
94 import org.testng.annotations.Test;
95
96 public class OnboardingFlowsUi extends SetupCDTest {
97
98     private static final Logger LOGGER = LoggerFactory.getLogger(OnboardingFlowsUi.class);
99     private static final String NO_TESTS_ARE_AVAILABLE = "No Tests are Available";
100     private static final String NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_ENABLED =
101             "Next Button is enabled, it should have been enabled";
102     private static final String NEXT_BUTTON_IS_DISABLED_IT_SHOULD_HAVE_BEEN_ENABLED =
103             "Next Button is disabled, it should have been enabled";
104     private static final String RESULTS_ARE_NOT_AVAILABLE = "Results are not available";
105     private static final String THE_TESTS_ARE_ALREADY_SELECTED_THE_LIST_SHOULD_INITIALLY_BE_EMPTY =
106             "The tests are already selected, the list should initially be empty";
107     private static final String THE_SELECTED_TESTS_ARE_NOT_POPULATED_IN_THE_LIST =
108             "The selected tests are not populated in the list";
109     private static final String THE_SELECTED_TESTS_ARE_NOT_DELETED_FROM_THE_LIST =
110             "The selected tests are not deleted from the list";
111     private static final String NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_DISABLED =
112             "Next Button is enabled, it should have been disabled";
113
114     protected static String filePath = FileHandling.getVnfRepositoryPath();
115     private Boolean makeDistributionValue;
116
117     @Parameters({"makeDistribution"})
118     @BeforeMethod
119     public void beforeTestReadParams(@Optional("true") String makeDistributionReadValue) {
120         LOGGER.debug("makeDistribution parameter is '{}'", makeDistributionReadValue);
121         makeDistributionValue = Boolean.valueOf(makeDistributionReadValue);
122     }
123
124     @Test
125     public void onboardVNFTestSanityOneFile() throws Exception {
126         String vnfFile = "1-VF-vUSP-vCCF-DB_v11.1.zip";
127         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
128         ServiceReqDetails serviceReqDetails = ElementFactory.getDefaultService();
129         runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, vnfFile);
130     }
131
132     @Test
133     public void performanceTest() throws Exception {
134         LOGGER.debug("Start test");
135         Long actualTestRunTime = Utils.getActionDuration(() -> {
136             try {
137                 onboardVNFTestSanityOneFile();
138             } catch (final Exception e) {
139                 LOGGER.debug("An error has occurred during the performance test", e);
140             }
141         });
142         long regularTestRunTime = 400L;
143         double factor = 1.5;
144         assertTrue("Expected test run time should be less from " + regularTestRunTime * factor + ", actual time is " + actualTestRunTime, regularTestRunTime * factor > actualTestRunTime);
145     }
146
147     @Test
148     public void onboardVNFTestSanity() throws Exception {
149         List<String> fileNamesFromFolder = OnboardingUtils.getXnfNamesFileList(XnfTypeEnum.VNF);
150         String vnfFile = fileNamesFromFolder.get(0);
151         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
152         ServiceReqDetails serviceReqDetails = ElementFactory.getDefaultService();
153         runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, vnfFile);
154     }
155
156     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "Single_VNF")
157     public void onapOnboardVNFflow(String filePath, String vnfFile) throws Exception {
158         setLog(vnfFile);
159         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
160         ServiceReqDetails serviceReqDetails = ElementFactory.getDefaultService();
161         runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, vnfFile);
162     }
163
164     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "Single_VNF")
165     public void onapOnboardVSPValidationsSanityFlow(String filePath, String vnfFile) throws Exception {
166         setLog(vnfFile);
167         String vspName = createNewVSP(filePath, vnfFile);
168         if (OnboardingUiUtils.getVspValidationCongiguration()) {
169             goToVspScreen(true, vspName);
170
171             //check links are available
172             checkVspValidationLinksVisibility();
173
174             VspValidationPage.navigateToVspValidationPageUsingNavbar();
175             assertTrue(NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_DISABLED,
176                     VspValidationPage.checkNextButtonDisabled());
177             VspValidationResultsPage.navigateToVspValidationResultsPageUsingNavbar();
178             GeneralUIUtils.ultimateWait();
179             assertNotNull(GeneralUIUtils.findByText("No Test Performed"));
180         } else {
181             goToVspScreen(true, vspName);
182
183             //check links are not available
184             checkVspValidationLinksInvisibility();
185         }
186     }
187
188     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "softwareInformationPnf")
189     public void onboardPNFSoftwareInformationFlow(final String rootFolder, final String pnfFile,
190                                                   final List<String> softwareVersionList) {
191         setLog(pnfFile);
192         final String resourceName = ElementFactory.addRandomSuffixToName(ElementFactory.getResourcePrefix());
193         runOnboardPnfSoftwareVersion(resourceName, rootFolder, pnfFile, softwareVersionList);
194     }
195
196     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "Single_VNF")
197     public void onapOnboardVSPValidationsConfigurationChangeCheck(String filePath, String vnfFile) throws Exception {
198         setLog(vnfFile);
199         String vspName = createNewVSP(filePath, vnfFile);
200         if (OnboardingUiUtils.getVspValidationCongiguration()) {
201             goToVspScreen(true, vspName);
202             //check links are available
203             checkVspValidationLinksVisibility();
204
205             //change config
206             changeVspValidationConfig(false, vspName, OnboardingUiUtils.getVspValidationCongiguration());
207
208             //check links are not available
209             checkVspValidationLinksInvisibility();
210         } else {
211             goToVspScreen(true, vspName);
212             //check links are not available
213             checkVspValidationLinksInvisibility();
214
215             changeVspValidationConfig(false, vspName, OnboardingUiUtils.getVspValidationCongiguration());
216
217             //check links are available
218             checkVspValidationLinksVisibility();
219         }
220     }
221
222     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "Single_VNF")
223     public void onapOnboardVSPCertificationQueryFlow(String filePath, String vnfFile) throws Exception {
224         setLog(vnfFile);
225         String vspName = createNewVSP(filePath, vnfFile);
226         if (!OnboardingUiUtils.getVspValidationCongiguration()) {
227             //change config to true to test the feature
228             changeVspValidationConfig(true, vspName, OnboardingUiUtils.getVspValidationCongiguration());
229         } else {
230             goToVspScreen(true, vspName);
231         }
232         VspValidationPage.navigateToVspValidationPageUsingNavbar();
233         assertTrue(NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_DISABLED, VspValidationPage.checkNextButtonDisabled());
234
235         if (VspValidationPage.checkCertificationQueryExists()) {
236             VspValidationPage.clickCertificationQueryAll();
237             GeneralUIUtils.ultimateWait();
238             assertTrue(NEXT_BUTTON_IS_DISABLED_IT_SHOULD_HAVE_BEEN_ENABLED,
239                     !VspValidationPage.checkNextButtonDisabled());
240             VspValidationPage.clickOnNextButton();
241             GeneralUIUtils.ultimateWait();
242             VspValidationPage.clickOnSubmitButton();
243             GeneralUIUtils.waitForLoader();
244             assertTrue(RESULTS_ARE_NOT_AVAILABLE, VspValidationResultsPage.checkResultsExist());
245         } else {
246             assertNotNull(GeneralUIUtils.findByText("No Certifications Query are Available"));
247         }
248
249     }
250
251     @Test(dataProviderClass = OnbordingDataProviders.class, dataProvider = "Single_Vsp_Test_Csar")
252     public void onapOnboardVSPComplianceCheckFlow(String filePath, String vnfFile) throws Exception {
253         setLog(vnfFile);
254         String vspName = createNewVSP(filePath, vnfFile);
255         if (!OnboardingUiUtils.getVspValidationCongiguration()) {
256             //change config to true to test the feature
257             changeVspValidationConfig(true, vspName, OnboardingUiUtils.getVspValidationCongiguration());
258         } else {
259             goToVspScreen(true, vspName);
260         }
261
262         VspValidationPage.navigateToVspValidationPageUsingNavbar();
263         assertTrue(NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_ENABLED, VspValidationPage.checkNextButtonDisabled());
264         if (VspValidationPage.checkComplianceCheckExists()) {
265             VspValidationPage.clickComplianceChecksAll();
266             GeneralUIUtils.ultimateWait();
267             assertFalse(NEXT_BUTTON_IS_DISABLED_IT_SHOULD_HAVE_BEEN_ENABLED,
268                     VspValidationPage.checkNextButtonDisabled());
269             VspValidationPage.clickOnNextButton();
270             GeneralUIUtils.ultimateWait();
271             VspValidationPage.loadVSPFile(filePath, vnfFile);
272             VspValidationPage.clickOnSubmitButton();
273             GeneralUIUtils.ultimateWait();
274             assertTrue(RESULTS_ARE_NOT_AVAILABLE, VspValidationResultsPage.checkResultsExist());
275         } else {
276             assertNotNull(GeneralUIUtils.findByText(NO_TESTS_ARE_AVAILABLE));
277         }
278
279     }
280
281     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "Single_VNF")
282     public void onapOnboardVSPComplianceCheckOperations(String filePath, String vnfFile) throws Exception {
283         setLog(vnfFile);
284         String vspName = createNewVSP(filePath, vnfFile);
285         if (!OnboardingUiUtils.getVspValidationCongiguration()) {
286             //change config to true to test the feature
287             changeVspValidationConfig(true, vspName, OnboardingUiUtils.getVspValidationCongiguration());
288         } else {
289             goToVspScreen(true, vspName);
290         }
291
292         VspValidationPage.navigateToVspValidationPageUsingNavbar();
293         assertTrue(NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_ENABLED, VspValidationPage.checkNextButtonDisabled());
294         if (VspValidationPage.checkComplianceCheckExists()) {
295             assertFalse(THE_TESTS_ARE_ALREADY_SELECTED_THE_LIST_SHOULD_INITIALLY_BE_EMPTY,
296                     VspValidationPage.checkSelectedComplianceCheckExists());
297             VspValidationPage.clickComplianceChecksAll();
298             GeneralUIUtils.ultimateWait();
299             assertTrue(THE_SELECTED_TESTS_ARE_NOT_POPULATED_IN_THE_LIST,
300                     VspValidationPage.checkSelectedComplianceCheckExists());
301             VspValidationPage.clickComplianceChecksAll();
302             GeneralUIUtils.ultimateWait();
303             assertFalse(THE_SELECTED_TESTS_ARE_NOT_DELETED_FROM_THE_LIST,
304                     VspValidationPage.checkSelectedComplianceCheckExists());
305         } else {
306             assertNotNull(GeneralUIUtils.findByText(NO_TESTS_ARE_AVAILABLE));
307         }
308
309     }
310
311     @Test(dataProviderClass = OnboardingDataProviders.class, dataProvider = "Single_VNF")
312     public void onapOnboardVSPCertificationQueryOperations(String filePath, String vnfFile) throws Exception {
313         setLog(vnfFile);
314         String vspName = createNewVSP(filePath, vnfFile);
315         if (!OnboardingUiUtils.getVspValidationCongiguration()) {
316             //change config to true to test the feature
317             changeVspValidationConfig(true, vspName, OnboardingUiUtils.getVspValidationCongiguration());
318         } else {
319             goToVspScreen(true, vspName);
320         }
321
322         VspValidationPage.navigateToVspValidationPageUsingNavbar();
323         assertTrue(NEXT_BUTTON_IS_ENABLED_IT_SHOULD_HAVE_BEEN_ENABLED, VspValidationPage.checkNextButtonDisabled());
324         if (VspValidationPage.checkCertificationQueryExists()) {
325             assertFalse(THE_TESTS_ARE_ALREADY_SELECTED_THE_LIST_SHOULD_INITIALLY_BE_EMPTY,
326                 VspValidationPage.checkSelectedCertificationQueryExists());
327             VspValidationPage.clickCertificationQueryAll();
328             GeneralUIUtils.ultimateWait();
329             assertTrue(THE_SELECTED_TESTS_ARE_NOT_POPULATED_IN_THE_LIST, VspValidationPage.checkSelectedCertificationQueryExists());
330             VspValidationPage.clickCertificationQueryAll();
331             GeneralUIUtils.ultimateWait();
332             assertFalse(THE_SELECTED_TESTS_ARE_NOT_DELETED_FROM_THE_LIST,
333                 VspValidationPage.checkSelectedCertificationQueryExists());
334         } else {
335             assertNotNull(GeneralUIUtils.findByText(NO_TESTS_ARE_AVAILABLE));
336         }
337
338     }
339
340     private void checkVspValidationLinksVisibility() {
341         //check links are available
342         assertTrue("Validation Link is not available", GeneralUIUtils.isElementVisibleByTestId(DataTestIdEnum.VspValidationPage.VSP_VALIDATION_PAGE_NAVBAR.getValue()));
343         assertTrue("Validation Results Link is not available", GeneralUIUtils.isElementVisibleByTestId(DataTestIdEnum.VspValidationResultsPage.VSP_VALIDATION_RESULTS_PAGE_NAVBAR.getValue()));
344     }
345
346     private void checkVspValidationLinksInvisibility() {
347         //check links not available
348         assertTrue("Validation Link is still available", GeneralUIUtils.isElementInvisibleByTestId(DataTestIdEnum.VspValidationPage.VSP_VALIDATION_PAGE_NAVBAR.getValue()));
349         assertTrue("Validation Results Link is still available", GeneralUIUtils.isElementInvisibleByTestId(DataTestIdEnum.VspValidationResultsPage.VSP_VALIDATION_RESULTS_PAGE_NAVBAR.getValue()));
350     }
351
352     private void changeVspValidationConfig(boolean isCurrentScreenCatalogPage, String vspName, boolean vspConfig) throws Exception {
353         //change config
354         OnboardingUiUtils.putVspValidationCongiguration(!vspConfig);
355         assertTrue(String.format("Failed to set Congiguration to %s", !vspConfig), OnboardingUiUtils.getVspValidationCongiguration() != vspConfig);
356
357         if (!isCurrentScreenCatalogPage) {
358             GeneralUIUtils.refreshWebpage();
359             GeneralUIUtils.ultimateWait();
360         }
361
362         goToVspScreen(isCurrentScreenCatalogPage, vspName);
363
364         //revert the config
365         OnboardingUiUtils.putVspValidationCongiguration(vspConfig);
366         assertEquals(String.format("Failed to revert Configuration to %s", vspConfig), vspConfig,
367             OnboardingUiUtils.getVspValidationCongiguration());
368     }
369
370     private void goToVspScreen(boolean isCurrentScreenCatalogPage, String vspName) {
371         if (isCurrentScreenCatalogPage) {
372             GeneralUIUtils.clickOnElementByTestId(DataTestIdEnum.MainMenuButtons.ONBOARD_BUTTON.getValue());
373         }
374         GeneralUIUtils.clickOnElementByText(vspName);
375         GeneralUIUtils.ultimateWait();
376     }
377
378     private String createNewVSP(String filePath, String vnfFile) throws Exception {
379         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
380         return OnboardingUiUtils.createVSP(resourceReqDetails, vnfFile, filePath, getUser()).getName();
381     }
382
383     public void runOnboardPnfSoftwareVersion(final String resourceName, final String rootFolder,
384                                              final String pnfFile, final List<String> softwareVersionList) {
385         final ExtentTest extendTest = getExtendTest();
386
387         final String swVersionsToString = String.join(", ", softwareVersionList);
388
389         extendTest.log(Status.INFO,
390             String.format("Creating VSP '%s' by onboarding package '%s' with software version '%s'",
391                 resourceName, pnfFile, swVersionsToString)
392         );
393         final WebDriver webDriver = DriverFactory.getDriver();
394         final CreateVspFlow createVspFlow = new CreateVspFlow(webDriver, resourceName, pnfFile, rootFolder);
395         createVspFlow.run(new TopNavComponent(webDriver));
396
397         final ImportVspFlow importVspFlow = new ImportVspFlow(webDriver, resourceName);
398         final ResourceCreatePage resourceCreatePage = importVspFlow.run()
399             .orElseThrow(() -> new UiTestFlowRuntimeException("Missing expected return ResourceCreatePage"));
400         final CreateResourceFromVspFlow createResourceFlow = new CreateResourceFromVspFlow(webDriver, resourceName);
401         createResourceFlow.run(resourceCreatePage);
402
403         final CheckSoftwareVersionPropertyFlow checkSoftwareVersionPropertyFlow =
404             new CheckSoftwareVersionPropertyFlow(webDriver, softwareVersionList);
405         checkSoftwareVersionPropertyFlow.run();
406
407         extendTest.log(Status.INFO,
408             String.format("Successfully onboarded the package '%s' with software version '%s'",
409                 pnfFile, swVersionsToString)
410         );
411     }
412
413     private void runOnboardToDistributionFlow(ResourceReqDetails resourceReqDetails, ServiceReqDetails serviceMetadata, String filePath, String vnfFile) throws Exception {
414         getExtendTest().log(Status.INFO, "Going to create resource with category: " + resourceReqDetails.getCategories().get(0).getName()
415                 + " subCategory: " + resourceReqDetails.getCategories().get(0).getSubcategories().get(0).getName()
416                 + " and service category: " + serviceMetadata.getCategory());
417         final String vspName = onboardAndCertify(resourceReqDetails, filePath, vnfFile);
418
419         ServiceUIUtils.createService(serviceMetadata);
420
421         ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
422         Service containerObject = AtomicOperationUtils.getServiceObjectByNameAndVersion(UserRoleEnum.DESIGNER, serviceMetadata.getName(), "0.1");
423         Resource instanceObject = AtomicOperationUtils.getResourceObjectByNameAndVersion(UserRoleEnum.DESIGNER, vspName, "1.0");
424         ComponentInstance componentInstanceDetails = AtomicOperationUtils.addComponentInstanceToComponentContainer(instanceObject, containerObject, UserRoleEnum.DESIGNER, true).left().value();
425
426         GeneralUIUtils.clickOnAreaJS(DataTestIdEnum.LifeCyleChangeButtons.CERTIFY.getValue());
427
428         GeneralUIUtils.getWebElementByTestID(DataTestIdEnum.DistributionChangeButtons.APPROVE_MESSAGE.getValue())
429                 .sendKeys("service " + serviceMetadata.getName() + " certified successfully");
430         GeneralPageElements.clickOKButton();
431         getExtendTest().log(Status.INFO, String.format("Successfully onboarded the package '%s'", vnfFile));
432     }
433
434     private void runDistributionFlow(final ServiceReqDetails serviceMetadata) throws Exception {
435         if (makeDistributionValue) {
436             reloginWithNewRole(UserRoleEnum.OPS);
437             GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
438             OpsOperationPage.distributeService();
439             OpsOperationPage.displayMonitor();
440
441             final List<WebElement> rowsFromMonitorTable = OpsOperationPage.getRowsFromMonitorTable();
442             AssertJUnit.assertEquals(1, rowsFromMonitorTable.size());
443
444             OpsOperationPage.waitUntilArtifactsDistributed(0);
445         }
446     }
447
448     private String onboardAndCertify(ResourceReqDetails resourceReqDetails, String filePath, String vnfFile) throws Exception {
449         VendorSoftwareProductObject onboardAndValidate = OnboardingUiUtils.onboardAndValidate(resourceReqDetails, filePath, vnfFile, getUser());
450         String vspName = onboardAndValidate.getName();
451
452         DeploymentArtifactPage.getLeftPanel().moveToCompositionScreen();
453         ExtentTestActions.addScreenshot(Status.INFO, "TopologyTemplate_" + vnfFile, "The topology template for " + vnfFile + " is as follows : ");
454
455         DeploymentArtifactPage.clickCertifyButton(vspName);
456         return vspName;
457     }
458
459
460     @Test(dataProviderClass = OnbordingDataProviders.class, dataProvider = "VNF_List")
461     public void onboardVNFTest(String filePath, String vnfFile) throws Exception {
462         setLog(vnfFile);
463         ResourceReqDetails resourceReqDetails = ElementFactory.getRandomCategoryResource();
464         ServiceReqDetails serviceReqDetails = ElementFactory.getRandomCategoryService();
465         runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, vnfFile);
466     }
467
468     @Test(dataProviderClass = OnbordingDataProviders.class, dataProvider = "CNF_List")
469     public void onboardCNFTest(String filePath, String cnfFile) throws Exception {
470         setLog(cnfFile);
471         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
472         ServiceReqDetails serviceReqDetails = ElementFactory.getDefaultService();
473         runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, cnfFile);
474     }
475
476     @Test(dataProviderClass = OnbordingDataProviders.class, dataProvider = "Invalid_CNF_List")
477     public void onboardCNFTestShouldFailForInvalidHelmPackage(String filePath, String cnfFile) {
478         setLog(cnfFile);
479         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
480         ServiceReqDetails serviceReqDetails = ElementFactory.getDefaultService();
481         Assert.assertThrows(() -> runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, cnfFile));
482     }
483
484     @Test(dataProviderClass = OnbordingDataProviders.class, dataProvider = "VNF_List")
485     public void onboardVNFShotFlow(String filePath, String vnfFile) throws Exception {
486         setLog(vnfFile);
487         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
488         onboardAndCertify(resourceReqDetails, filePath, vnfFile);
489     }
490
491     @Test(dataProviderClass = OnbordingDataProviders.class, dataProvider = "randomVNF_List")
492     public void onboardRandomVNFsTest(String filePath, String vnfFile) throws Exception {
493         setLog(vnfFile);
494         LOGGER.debug("Vnf File name is: {}", vnfFile);
495         ResourceReqDetails resourceReqDetails = ElementFactory.getRandomCategoryResource();
496         ServiceReqDetails serviceReqDetails = ElementFactory.getRandomCategoryService();
497         runOnboardToDistributionFlow(resourceReqDetails, serviceReqDetails, filePath, vnfFile);
498     }
499
500
501     @Test
502     public void onboardUpdateVNFTest() throws Exception {
503         List<String> fileNamesFromFolder = FileHandling.getZipFileNamesFromFolder(filePath);
504         String vnfFile = fileNamesFromFolder.get(0);
505         ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
506         VendorSoftwareProductObject vsp = OnboardingUiUtils.onboardAndValidate(resourceReqDetails, filePath, vnfFile, getUser());
507         String vspName = vsp.getName();
508         ResourceGeneralPage.clickCertifyButton(vspName);
509
510         // create service
511         ServiceReqDetails serviceMetadata = ElementFactory.getDefaultService();
512         ServiceUIUtils.createService(serviceMetadata);
513
514         ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
515         CompositionPage.searchForElement(vspName);
516         CanvasManager serviceCanvasManager = CanvasManager.getCanvasManager();
517         CanvasElement vfElement = serviceCanvasManager.createElementOnCanvas(vspName);
518         assertNotNull(vfElement);
519         ServiceVerificator.verifyNumOfComponentInstances(serviceMetadata, "0.1", 1, getUser());
520
521         if (!HomePage.navigateToHomePage()) {
522             fail("Could not go to the home page");
523         }
524
525         ///update flow
526         String updatedVnfFile = fileNamesFromFolder.get(1);
527
528         getExtendTest().log(Status.INFO, String.format("Going to update the VNF with %s......", updatedVnfFile));
529         // update VendorSoftwareProduct
530         OnboardingUiUtils.updateVnfAndValidate(filePath, vsp, updatedVnfFile, getUser());
531         ResourceGeneralPage.clickCertifyButton(vspName);
532
533         // replace exiting VFI in service with new updated
534
535         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
536         ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
537         serviceCanvasManager = CanvasManager.getCanvasManager();
538         CompositionPage.changeComponentVersion(serviceCanvasManager, vfElement, "2.0");
539         ServiceVerificator.verifyNumOfComponentInstances(serviceMetadata, "0.1", 1, getUser());
540
541         ServiceGeneralPage.clickSubmitForTestingButton(serviceMetadata.getName());
542
543         reloginWithNewRole(UserRoleEnum.TESTER);
544         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
545         TesterOperationPage.certifyComponent(serviceMetadata.getName());
546
547         reloginWithNewRole(UserRoleEnum.GOVERNOR);
548         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
549         GovernorOperationPage.approveService(serviceMetadata.getName());
550
551
552         reloginWithNewRole(UserRoleEnum.OPS);
553         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
554         OpsOperationPage.distributeService();
555         OpsOperationPage.displayMonitor();
556
557         List<WebElement> rowsFromMonitorTable = OpsOperationPage.getRowsFromMonitorTable();
558         AssertJUnit.assertEquals(1, rowsFromMonitorTable.size());
559
560         OpsOperationPage.waitUntilArtifactsDistributed(0);
561         getExtendTest().log(Status.INFO, String.format("Onboarding %s test is passed ! ", vnfFile));
562     }
563
564
565     @Test
566     public void threeVMMSCsInServiceTest() throws Exception {
567         String pathFile = FileHandling.getFilePath("VmmscArtifacts");
568         final String[] list = new File(pathFile).list();
569         assertNotNull("Did not find vMMSCs", list);
570         assertFalse("Did not find vMMSCs", list.length == 0);
571         List<String> vmmscList = Arrays.stream(list).filter(e -> e.contains("vmmsc") && e.endsWith(".zip"))
572             .collect(Collectors.toList());
573         assertFalse("Did not find vMMSCs", vmmscList.isEmpty());
574
575         Map<String, String> vspNames = new HashMap<>();
576         for (String vnfFile : vmmscList) {
577             String msg = String.format("Going to onboard the VNF %s", vnfFile);
578             getExtendTest().log(Status.INFO, msg);
579             LOGGER.info(msg);
580
581             VendorLicenseModel vendorLicenseModel = VendorLicenseModelRestUtils.createVendorLicense(getUser());
582             ResourceReqDetails resourceReqDetails = ElementFactory.getDefaultResource();
583             VendorSoftwareProductObject createVendorSoftwareProduct = VendorSoftwareProductRestUtils
584                 .createVendorSoftwareProduct(resourceReqDetails, vnfFile, pathFile, getUser(), vendorLicenseModel);
585
586             getExtendTest().log(Status.INFO, String.format("Searching for onboarded %s", vnfFile));
587             HomePage.showVspRepository();
588             getExtendTest().log(Status.INFO, String.format("Going to import %s......", vnfFile.substring(0, vnfFile.indexOf("."))));
589             OnboardingUiUtils.importVSP(createVendorSoftwareProduct);
590
591             ResourceGeneralPage.getLeftMenu().moveToDeploymentArtifactScreen();
592             DeploymentArtifactPage.verifyArtifactsExistInTable(pathFile, vnfFile);
593
594             String vspName = createVendorSoftwareProduct.getName();
595             DeploymentArtifactPage.clickCertifyButton(vspName);
596             vspNames.put(vnfFile, vspName);
597         }
598
599         // create service
600         ServiceReqDetails serviceMetadata = ElementFactory.getDefaultService();
601         ServiceUIUtils.createService(serviceMetadata);
602         ServiceGeneralPage.getLeftMenu().moveToCompositionScreen();
603         CanvasManager serviceCanvasManager = CanvasManager.getCanvasManager();
604
605         for (String vsp : vspNames.values()) {
606             CompositionPage.searchForElement(vsp);
607             CanvasElement vfElement = serviceCanvasManager.createElementOnCanvas(vsp);
608             assertNotNull(vfElement);
609         }
610         ServiceVerificator.verifyNumOfComponentInstances(serviceMetadata, "0.1", vspNames.values().size(), getUser());
611         File imageFilePath = GeneralUIUtils.takeScreenshot(null, SetupCDTest.getScreenshotFolder(), "Info_" + getExtendTest().getModel().getName());
612         final String absolutePath = new File(SetupCDTest.getReportFolder()).toURI().relativize(imageFilePath.toURI()).getPath();
613         SetupCDTest.getExtendTest().log(Status.INFO, "Three kinds of vMMSC are in canvas now." + getExtendTest().addScreenCaptureFromPath(absolutePath));
614
615         ServiceGeneralPage.clickSubmitForTestingButton(serviceMetadata.getName());
616
617         reloginWithNewRole(UserRoleEnum.TESTER);
618         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
619         TesterOperationPage.certifyComponent(serviceMetadata.getName());
620
621         reloginWithNewRole(UserRoleEnum.GOVERNOR);
622         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
623         GovernorOperationPage.approveService(serviceMetadata.getName());
624
625         reloginWithNewRole(UserRoleEnum.OPS);
626         GeneralUIUtils.findComponentAndClick(serviceMetadata.getName());
627         OpsOperationPage.distributeService();
628         OpsOperationPage.displayMonitor();
629
630         List<WebElement> rowsFromMonitorTable = OpsOperationPage.getRowsFromMonitorTable();
631         AssertJUnit.assertEquals(1, rowsFromMonitorTable.size());
632
633         OpsOperationPage.waitUntilArtifactsDistributed(0);
634     }
635
636 }