Nested Dependency issues
[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.getNodesGetAttrIn().size());
96     Assert.assertEquals(ONE, data.getNodesGetAttrOut().size());
97     Assert.assertEquals(ONE, data.getOutputParametersGetAttrIn().size());
98
99   }
100
101   @Test
102   public void testGetNetworkRoleFromResourceUtil() throws Exception {
103     inputFilesPath = INPUT_FILE_PATH_FOR_INOUT_ATTR_TEST;
104     initTranslatorAndTranslate();
105     Resource targetResource = new Resource();
106     targetResource.setType(NESTED_FILE_NAME_INOUT_ATTR_TEST);
107
108     Optional<String> networkRole = HeatToToscaUtil.getNetworkRoleFromSubInterfaceId(targetResource, this
109         .translationContext);
110
111     Assert.assertEquals(NETWORK_ROLE_INOUT_ATTR_TEST,networkRole.get());
112   }
113
114   @Test
115   public void testGetNetworkRoleFromResourceUtil_Port() throws Exception {
116     inputFilesPath = INPUT_FILE_PATH_FOR_PORT_NETWORK_ROLE;
117     initTranslatorAndTranslate();
118     List<String> validNeutronPortTemplateIds = Arrays.asList("vdbe_0_oam_port_1", "vdbe_oam_port", "vdbe_oam_port_2",
119         "vdbe_0_int_oam_port_1", "vdbe_int_oam_port", "vdbe_int_oam_port_2");
120     validatePortNetworkRole(validNeutronPortTemplateIds, "oam");
121
122     List<String> validVmiPortTemplateIds = Arrays.asList("vdbe_0_untr_vmi_0", "vdbe_untr_vmi");
123     validatePortNetworkRole(validVmiPortTemplateIds, "untr");
124
125     List<String> portIdsNotFollowingHeatGuidelines = Arrays.asList("vdbe_0_oam_neutronNotFollowingHeatGuidelines_2",
126         "vdbe_0_untr_vmiNotFollowingHeatGuidelines_1");
127     validatePortNetworkRole(portIdsNotFollowingHeatGuidelines, null);
128
129   }
130
131   @Test
132   public void testSubInterfaceResourceNetworkRolePositive() throws Exception {
133     List<String> subInterfaceResourceIds=Arrays.asList("vm_type_11_subint_networkrole_vmi_11",
134         "v_subint_networkrole_vmi", "v_1_subint_networkrole_vmi", "v_subint_networkrole_vmi_11",
135         "vm_type_subint_networkrole_vmi_11", "vm_type_11_subint_networkrole_vmi",
136         "vm_type_subint_networkrole_vmi");
137
138     subInterfaceResourceIds.forEach(resourceId -> {
139       Optional<String> networkRole = HeatToToscaUtil.extractNetworkRoleFromSubInterfaceId(
140         resourceId,
141         HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
142       Assert.assertTrue(networkRole.isPresent()
143           && "networkrole".equals(networkRole.get()));
144       }
145     );
146   }
147
148   @Test
149   public void testSubInterfaceResourceNetworkRoleNegative() throws Exception {
150     List<String> subInterfaceResourceIds=Arrays.asList("vm_type_11_subint_vmi_11",
151         "vm_type_11_subint_11_vmi_11");
152
153     subInterfaceResourceIds.forEach(resourceId -> {
154         Optional<String> networkRole = HeatToToscaUtil.extractNetworkRoleFromSubInterfaceId(
155           resourceId,
156           HeatResourcesTypes.CONTRAIL_V2_VIRTUAL_MACHINE_INTERFACE_RESOURCE_TYPE.getHeatResource());
157         Assert.assertFalse(networkRole.isPresent());
158       }
159     );
160   }
161
162   @Test
163   public void testIsSubInterfaceResourceUtil() throws Exception {
164     inputFilesPath = INPUT_FILE_PATH_FOR_INOUT_ATTR_TEST;
165     initTranslatorAndTranslate();
166     Resource targetResource = new Resource();
167     targetResource.setType(HeatResourcesTypes.RESOURCE_GROUP_RESOURCE_TYPE.getHeatResource());
168     Map<String, Object> propetyMap = new HashMap<>();
169     Map<String, Object> resourceDefPropsMap = new HashMap<>();
170     resourceDefPropsMap.put("type", NESTED_FILE_NAME_INOUT_ATTR_TEST);
171     propetyMap.put(HeatConstants.RESOURCE_DEF_PROPERTY_NAME, resourceDefPropsMap);
172     targetResource.setProperties(propetyMap);
173
174     Assert.assertTrue(HeatToToscaUtil.isSubInterfaceResource(targetResource, this
175         .translationContext));
176   }
177
178   @Test
179   public void testTranslateVlanToNetMultiNestedConnection() throws Exception {
180     inputFilesPath =
181         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/nestedMultiLevels/inputfiles";
182     outputFilesPath =
183         "/mock/services/heattotosca/subInterfaceToInterfaceConnection/nestedMultiLevels" +
184             "/expectedoutputfiles";
185     initTranslatorAndTranslate();
186     testTranslation();
187   }
188
189   private void validatePortNetworkRole(List<String> portNodeTemplateIds, String expectedNetworkRole) {
190     FilePortConsolidationData filePortConsolidationData =
191         translationContext.getConsolidationData().getPortConsolidationData()
192             .getFilePortConsolidationData(MAIN_SERVICE_TEMPLATE_YAML);
193     for (String portNodeTemplateId : portNodeTemplateIds) {
194       PortTemplateConsolidationData portTemplateConsolidationData =
195           filePortConsolidationData.getPortTemplateConsolidationData(portNodeTemplateId);
196       Assert.assertEquals(expectedNetworkRole, portTemplateConsolidationData.getNetworkRole());
197     }
198   }
199 }