564cddb73c5e95425a2a7127ccb24546d5f594c6
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / test / java / org / openecomp / sdc / translator / services / heattotosca / impl / resourcetranslation / ContrailV2VlanToInterfaceResourceConnectionTest.java
1 /*
2  * Copyright © 2016-2018 European Support Limited
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License");
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
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
17 package org.openecomp.sdc.translator.services.heattotosca.impl.resourcetranslation;
18
19 import com.google.common.collect.ArrayListMultimap;
20 import com.google.common.collect.ListMultimap;
21 import org.junit.Assert;
22 import org.junit.Before;
23 import org.junit.Test;
24 import org.openecomp.sdc.heat.datatypes.model.HeatResourcesTypes;
25 import org.openecomp.sdc.heat.datatypes.model.Resource;
26 import org.openecomp.sdc.heat.services.HeatConstants;
27 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.FilePortConsolidationData;
28 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.PortTemplateConsolidationData;
29 import org.openecomp.sdc.translator.datatypes.heattotosca.unifiedmodel.consolidation.SubInterfaceTemplateConsolidationData;
30 import org.openecomp.sdc.translator.services.heattotosca.HeatToToscaUtil;
31
32 import java.io.IOException;
33 import java.util.Arrays;
34 import java.util.HashMap;
35 import java.util.List;
36 import java.util.Map;
37 import java.util.Optional;
38
39 public class ContrailV2VlanToInterfaceResourceConnectionTest extends BaseResourceTranslationTest {
40
41   private static final String PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST = "vdbe_untr_vmi";
42   private static final int ONE = 1;
43   private static final int TWO = 2;
44   private static final String NETWORK_ROLE_INOUT_ATTR_TEST = "untr";
45   private static final String NESTED_FILE_NAME_INOUT_ATTR_TEST = "nested.yml";
46   private static final String INPUT_FILE_PATH_FOR_INOUT_ATTR_TEST =
47       "/mock/services/heattotosca/subInterfaceToInterfaceConnection/inoutattr/inputfiles";
48   private static final String INPUT_FILE_PATH_FOR_PORT_NETWORK_ROLE =
49       "/mock/services/heattotosca/subInterfaceToInterfaceConnection/portNetworkRole/inputfiles";
50   private static final String MAIN_SERVICE_TEMPLATE_YAML = "MainServiceTemplate.yaml";
51
52
53   @Override
54   @Before
55   public void setUp() throws IOException {
56     // do not delete this function. it prevents the superclass setup from running
57   }
58
59   @Test
60   public void testTranslateVlanToInterfaceNestedConnection() throws Exception {
61     inputFilesPath =
62         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/nested/inputfiles";
63     outputFilesPath =
64         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/nested/expectedoutputfiles";
65     initTranslatorAndTranslate();
66     testTranslation();
67   }
68
69   @Test
70   public void testTranslateVlanToInterfaceNestedInOutAttr() throws Exception {
71     inputFilesPath = INPUT_FILE_PATH_FOR_INOUT_ATTR_TEST;
72     outputFilesPath =
73         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/inoutattr" +
74             "/expectedoutputfiles";
75     initTranslatorAndTranslate();
76     testTranslation();
77
78     Assert.assertNotNull(this.translationContext.getConsolidationData().getPortConsolidationData()
79         .getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML)
80         .getPortTemplateConsolidationData(PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST));
81
82     PortTemplateConsolidationData portTemplateConsolidationData =
83         this.translationContext.getConsolidationData().getPortConsolidationData()
84             .getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML)
85             .getPortTemplateConsolidationData(PORT_NODE_TEMPLATE_ID_FOR_ATTR_TEST);
86     ListMultimap<String, SubInterfaceTemplateConsolidationData> subInfMap = ArrayListMultimap.create();
87     portTemplateConsolidationData.copyMappedInto(subInfMap);
88     List<SubInterfaceTemplateConsolidationData> subInfList =
89         subInfMap.get("org.openecomp.resource.abstract.nodes.heat.subinterface.nested");
90
91     Assert.assertEquals(ONE, subInfList.size());
92     SubInterfaceTemplateConsolidationData data = subInfList.get(0);
93
94     Assert.assertEquals(NETWORK_ROLE_INOUT_ATTR_TEST, data.getNetworkRole());
95     Assert.assertEquals(ONE, data.getNodesConnectedIn().size());
96     Assert.assertEquals(ONE, data.getNodesConnectedOut().size());
97     Assert.assertEquals(TWO, data.getNodesConnectedOut().get("control_int_net").size());
98     Assert.assertEquals(ONE, data.getNodesGetAttrIn().size());
99     Assert.assertEquals(ONE, data.getNodesGetAttrOut().size());
100     Assert.assertEquals(ONE, data.getOutputParametersGetAttrIn().size());
101
102   }
103
104   @Test
105   public void testGetNetworkRoleFromResourceUtil() throws Exception {
106     inputFilesPath = INPUT_FILE_PATH_FOR_INOUT_ATTR_TEST;
107     initTranslatorAndTranslate();
108     Resource targetResource = new Resource();
109     targetResource.setType(NESTED_FILE_NAME_INOUT_ATTR_TEST);
110
111     Optional<String> networkRole = HeatToToscaUtil.getNetworkRoleFromSubInterfaceId(targetResource, this
112         .translationContext);
113
114     Assert.assertEquals(NETWORK_ROLE_INOUT_ATTR_TEST,networkRole.get());
115   }
116
117   @Test
118   public void testGetNetworkRoleFromResourceUtil_Port() throws Exception {
119     inputFilesPath = INPUT_FILE_PATH_FOR_PORT_NETWORK_ROLE;
120     initTranslatorAndTranslate();
121     List<String> validNeutronPortTemplateIds = Arrays.asList("vdbe_0_oam_port_1", "vdbe_oam_port", "vdbe_oam_port_2",
122         "vdbe_0_int_oam_port_1", "vdbe_int_oam_port", "vdbe_int_oam_port_2");
123     validatePortNetworkRole(validNeutronPortTemplateIds, "oam");
124
125     List<String> validVmiPortTemplateIds = Arrays.asList("vdbe_0_untr_vmi_0", "vdbe_untr_vmi");
126     validatePortNetworkRole(validVmiPortTemplateIds, "untr");
127
128     List<String> portIdsNotFollowingHeatGuidelines = Arrays.asList("vdbe_0_oam_neutronNotFollowingHeatGuidelines_2",
129         "vdbe_0_untr_vmiNotFollowingHeatGuidelines_1");
130     validatePortNetworkRole(portIdsNotFollowingHeatGuidelines, null);
131
132   }
133
134   @Test
135   public void testSubInterfaceResourceNetworkRolePositive() throws Exception {
136     List<String> subInterfaceResourceIds=Arrays.asList("vm_type_11_subint_networkrole_vmi_11",
137         "v_subint_networkrole_vmi", "v_1_subint_networkrole_vmi", "v_subint_networkrole_vmi_11",
138         "vm_type_subint_networkrole_vmi_11", "vm_type_11_subint_networkrole_vmi",
139         "vm_type_subint_networkrole_vmi");
140
141     subInterfaceResourceIds.forEach(resourceId -> {
142       Optional<String> networkRole = HeatToToscaUtil.extractNetworkRoleFromSubInterfaceId(
143         resourceId,
144         HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
145       Assert.assertTrue(networkRole.isPresent()
146           && "networkrole".equals(networkRole.get()));
147       }
148     );
149   }
150
151   @Test
152   public void testSubInterfaceResourceNetworkRoleNegative() throws Exception {
153     List<String> subInterfaceResourceIds=Arrays.asList("vm_type_11_subint_vmi_11",
154         "vm_type_11_subint_11_vmi_11");
155
156     subInterfaceResourceIds.forEach(resourceId -> {
157         Optional<String> networkRole = HeatToToscaUtil.extractNetworkRoleFromSubInterfaceId(
158           resourceId,
159           HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
160         Assert.assertFalse(networkRole.isPresent());
161       }
162     );
163   }
164
165   @Test
166   public void testIsSubInterfaceResourceUtil() throws Exception {
167     inputFilesPath = INPUT_FILE_PATH_FOR_INOUT_ATTR_TEST;
168     initTranslatorAndTranslate();
169     Resource targetResource = new Resource();
170     targetResource.setType(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource());
171     Map<String, Object> propetyMap = new HashMap<>();
172     Map<String, Object> resourceDefPropsMap = new HashMap<>();
173     resourceDefPropsMap.put("type", NESTED_FILE_NAME_INOUT_ATTR_TEST);
174     propetyMap.put(HeatConstants.RESOURCE_DEF_PROPERTY_NAME, resourceDefPropsMap);
175     targetResource.setProperties(propetyMap);
176
177     Assert.assertTrue(HeatToToscaUtil.isSubInterfaceResource(targetResource, this
178         .translationContext));
179   }
180
181   @Test
182   public void testTranslateVlanToNetMultiNestedConnection() throws Exception {
183     inputFilesPath =
184         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/nestedMultiLevels/inputfiles";
185     outputFilesPath =
186         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/nestedMultiLevels" +
187             "/expectedoutputfiles";
188     initTranslatorAndTranslate();
189     testTranslation();
190   }
191
192   private void validatePortNetworkRole(List<String> portNodeTemplateIds, String expectedNetworkRole) {
193     FilePortConsolidationData filePortConsolidationData =
194         translationContext.getConsolidationData().getPortConsolidationData()
195             .getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML);
196     for (String portNodeTemplateId : portNodeTemplateIds) {
197       PortTemplateConsolidationData portTemplateConsolidationData =
198           filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
199       Assert.assertEquals(expectedNetworkRole, portTemplateConsolidationData.getNetworkRole());
200     }
201   }
202 }