c49c2dc4479e633429c50a012e209af9d938b58e
[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.junit.jupiter.api.Assertions.assertNotNull;
23 import static org.junit.jupiter.api.Assertions.assertTrue;
24
25 import java.util.ArrayList;
26 import java.util.List;
27 import java.util.Map;
28
29 import org.onap.sdc.backend.ci.tests.datatypes.enums.ServiceInstantiationType;
30 import org.onap.sdc.frontend.ci.tests.datatypes.LogicalOperator;
31 import org.onap.sdc.frontend.ci.tests.datatypes.ServiceCreateData;
32 import org.onap.sdc.frontend.ci.tests.datatypes.ServiceDependencyProperty;
33 import org.onap.sdc.frontend.ci.tests.execute.setup.DriverFactory;
34 import org.onap.sdc.frontend.ci.tests.execute.setup.SetupCDTest;
35 import org.onap.sdc.frontend.ci.tests.flow.CreateServiceFlow;
36 import org.onap.sdc.frontend.ci.tests.flow.CreateSubtitutionFilterFlow;
37 import org.onap.sdc.frontend.ci.tests.flow.DownloadToscaTemplateFlow;
38 import org.onap.sdc.frontend.ci.tests.pages.ResourcePropertiesAssignmentPage;
39 import org.onap.sdc.frontend.ci.tests.pages.ServiceComponentPage;
40 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.CompositionPage;
41 import org.onap.sdc.frontend.ci.tests.pages.component.workspace.ToscaArtifactsPage;
42 import org.onap.sdc.frontend.ci.tests.pages.home.HomePage;
43 import org.onap.sdc.frontend.ci.tests.utilities.FileHandling;
44 import org.openqa.selenium.WebDriver;
45 import org.testng.annotations.BeforeClass;
46 import org.testng.annotations.Test;
47
48 public class CreateServiceSubstitutionFilterTest extends SetupCDTest {
49     private final String serviceName = "CreateServiceSubstitutionFilterTest";
50     private final String stringValue = "Test";
51     private final String booleanValue = "TRUE";
52     private final LogicalOperator operator = LogicalOperator.EQUALS;
53     private final List<ServiceDependencyProperty> substitutionFilterProperties = new ArrayList<ServiceDependencyProperty>();
54     private final ServiceCreateData serviceCreateData = loadServiceCreateData();
55
56     private WebDriver webDriver;
57
58     @BeforeClass
59     public void classSetup() {
60         webDriver = DriverFactory.getDriver();
61     }
62
63     @Test
64     public void createSubsitutionFilter() throws Exception {
65        new CreateServiceFlow(webDriver, serviceCreateData).run(new HomePage(webDriver));
66
67        ServiceComponentPage serviceComponentPage = new ServiceComponentPage(webDriver);
68        serviceComponentPage.isLoaded();
69
70        loadSubstitutionFilterProperties(serviceComponentPage);
71        final CompositionPage compositionPage = serviceComponentPage.goToComposition();
72
73        substitutionFilterProperties.forEach(substitutionFilterProperty -> {
74            final CreateSubtitutionFilterFlow createSubtitutionFilterFlow = new CreateSubtitutionFilterFlow(webDriver, substitutionFilterProperty);
75            createSubtitutionFilterFlow.run();
76        });
77
78        serviceComponentPage = compositionPage.goToServiceGeneral();
79        serviceComponentPage.isLoaded();
80
81        verifyToscaTemplateYaml(serviceComponentPage, false);
82     }
83
84     private ServiceCreateData loadServiceCreateData() {
85         ServiceCreateData serviceCreateData = new ServiceCreateData();
86         serviceCreateData.setRandomName(serviceName);
87         serviceCreateData.setDescription(serviceName);
88         serviceCreateData.setCategory("Network Service");
89         serviceCreateData.setInstantiationType(ServiceInstantiationType.A_LA_CARTE);
90         return serviceCreateData;
91     }
92
93     private void loadSubstitutionFilterProperties(final ServiceComponentPage serviceComponentPage) {
94         final ResourcePropertiesAssignmentPage propertiesPage = serviceComponentPage.goToPropertiesAssignment();
95         propertiesPage.isLoaded();
96         final Map<String, String> propertyNamesAndTypes = propertiesPage.getPropertyNamesAndTypes();
97         propertyNamesAndTypes.forEach((name, type)
98                 -> substitutionFilterProperties.add(new ServiceDependencyProperty(name, getPropertyValueByType(type), operator)));
99     }
100
101     private void verifyToscaTemplateYaml(final ServiceComponentPage serviceComponentPage, final boolean delete) throws Exception {
102         final DownloadToscaTemplateFlow downloadCsarTemplateFlow = new DownloadToscaTemplateFlow(webDriver);
103         final ToscaArtifactsPage toscaArtifactsPage = (ToscaArtifactsPage) downloadCsarTemplateFlow.run(serviceComponentPage).get();
104         final Map<?, ?> yaml = FileHandling.parseYamlFile(getConfig().getDownloadAutomationFolder()
105                 .concat(java.io.File.separator).concat(toscaArtifactsPage.getDownloadedArtifactList().get(0)));
106         verifyToscaTemplateHasSubstitutionFilter(yaml);
107     }
108
109     private void verifyToscaTemplateHasSubstitutionFilter(final Map<?, ?> yaml) {
110         assertNotNull(yaml, "No contents in TOSCA Template");
111         final List<?> substitutionFilters = (List<?>) getSubstitutionFilterFromYaml(yaml).get("properties");
112         substitutionFilterProperties.forEach(substitutionFilterProperty -> {
113             final Map<?, ?> substitutionFilter = (Map<?, ?>) substitutionFilters.stream()
114                     .filter(subFilter -> ((Map<?, ?>) subFilter).containsKey(substitutionFilterProperty.getName())).findAny().get();
115             assertTrue(substitutionFilter.containsKey(substitutionFilterProperty.getName()), "Added substitution filter not found in TOSCA Template");
116
117             final Map<?, ?> substitutionFilterValue = (Map<?, ?>) ((List<?>) substitutionFilter.get(substitutionFilterProperty.getName())).get(0);
118             assertTrue(substitutionFilterValue.containsValue(convertValue(substitutionFilterProperty.getValue()))
119                     , "Invalid value for added substitution filters found in TOSCA Template");
120             assertTrue(substitutionFilterValue.containsKey(substitutionFilterProperty.getLogicalOperator().getName())
121                     , "Invalid logical operator for added substitution filters found in TOSCA Template");
122         });
123     }
124
125     private Map<?,?> getSubstitutionFilterFromYaml(final Map<?,?> yaml) {
126         final Map<?, ?> topology = (Map<?, ?>) yaml.get("topology_template");
127         final Map<?, ?> substitutionMappings = (Map<?, ?>) topology.get("substitution_mappings");
128         return (Map<?, ?>) substitutionMappings.get("substitution_filter");
129     }
130
131     private Object convertValue(String value) {
132         return booleanValue.equals(value) ? Boolean.parseBoolean(value) : value;
133     }
134
135     private String getPropertyValueByType(String type) {
136         return "string".equals(type) ? stringValue : booleanValue;
137     }
138 }