Improve testing stability
[sdc.git] / openecomp-be / lib / openecomp-sdc-translator-lib / openecomp-sdc-translator-core / src / test / java / org / openecomp / sdc / translator / datatypes / heattotosca / unifiedmodel / consolidation / PortConsolidationDataTest.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.datatypes.heattotosca.unifiedmodel.consolidation;
18
19 import java.util.EnumMap;
20 import java.util.HashSet;
21 import java.util.Set;
22 import org.junit.Assert;
23 import org.junit.Before;
24 import org.junit.Test;
25 import org.mockito.Mock;
26 import org.mockito.Mockito;
27 import org.mockito.MockitoAnnotations;
28 import org.openecomp.sdc.heat.datatypes.model.Resource;
29
30 public class PortConsolidationDataTest {
31
32     private static final String PORT_NODE_TYPE_1 = "portNodeType1";
33     private static final String PORT_NODE_TYPE_2 = "portNodeType2";
34     private static final String PORT_NODE_TEMPLATE_ID_1 = "portNodeTemplateId1";
35     private static final String PORT_NODE_TEMPLATE_ID_2 = "portNodeTemplateId2";
36     private static final String SUB_INTERFACE_NODE_TEMPLATE_ID_1 = "subInterfaceNodeTemplateId1";
37     private static final String SUB_INTERFACE_NODE_TEMPLATE_ID_2 = "subInterfaceNodeTemplateId2";
38     private static final String PORT_RESOURCE_ID = "portResourceId";
39     private static final String PORT_RESOURCE_TYPE = "portResourceType";
40
41     private final EnumMap<ServiceTemplateFileNameEnum, FilePortConsolidationData> mockMap =
42             new EnumMap<>(ServiceTemplateFileNameEnum.class);
43
44     @Mock
45     private FilePortConsolidationData mockFilePortConsolidationData1;
46     @Mock
47     private FilePortConsolidationData mockFilePortConsolidationData2;
48
49     private final Resource resource = new Resource();
50     private final PortConsolidationData consolidationData = new PortConsolidationData();
51
52     @Before
53     public void setUp() {
54         MockitoAnnotations.openMocks(this);
55         addMocksToMap();
56     }
57
58     @Test
59     public void testAddConsolidationData_noNewCreated() {
60         String serviceTemplateName = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
61         consolidationData.addPortTemplateConsolidationData(serviceTemplateName, PORT_NODE_TYPE_1, PORT_NODE_TYPE_1,
62                 PORT_RESOURCE_ID, PORT_RESOURCE_TYPE);
63         consolidationData.getFilePortConsolidationData(serviceTemplateName);
64         Set<String> expectedServiceTemplateNames = new HashSet<>();
65         expectedServiceTemplateNames.add(serviceTemplateName);
66         checkPortConsolidationData(consolidationData, serviceTemplateName, expectedServiceTemplateNames);
67
68         consolidationData.addPortTemplateConsolidationData(serviceTemplateName, PORT_NODE_TYPE_1, PORT_NODE_TYPE_1,
69                 PORT_RESOURCE_ID, PORT_RESOURCE_TYPE);
70         consolidationData.getFilePortConsolidationData(serviceTemplateName);
71         checkPortConsolidationData(consolidationData, serviceTemplateName, expectedServiceTemplateNames);
72     }
73
74     @Test
75     public void testAddConsolidationData_DiffNodeTypes() {
76         String serviceTemplateName = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
77         consolidationData.addPortTemplateConsolidationData(serviceTemplateName, PORT_NODE_TYPE_1, PORT_NODE_TYPE_1,
78                 PORT_RESOURCE_ID, PORT_RESOURCE_TYPE);
79         Set<String> expectedServiceTemplateNames = new HashSet<>();
80         expectedServiceTemplateNames.add(serviceTemplateName);
81         checkPortConsolidationData(consolidationData, serviceTemplateName, expectedServiceTemplateNames);
82         consolidationData.addPortTemplateConsolidationData(serviceTemplateName, PORT_NODE_TYPE_2, PORT_NODE_TYPE_2,
83                 PORT_RESOURCE_ID, PORT_RESOURCE_TYPE);
84         checkPortConsolidationData(consolidationData, serviceTemplateName, expectedServiceTemplateNames);
85     }
86
87     @Test
88     public void testAddConsolidationData_DiffServiceTemplate() {
89         String serviceTemplateName1 = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
90         consolidationData.addPortTemplateConsolidationData(
91                 serviceTemplateName1, PORT_NODE_TYPE_1, PORT_RESOURCE_ID, PORT_RESOURCE_TYPE, PORT_NODE_TYPE_1);
92         Set<String> expectedServiceTemplateNames =  new HashSet<>();
93         expectedServiceTemplateNames.add(serviceTemplateName1);
94         checkPortConsolidationData(consolidationData, serviceTemplateName1, expectedServiceTemplateNames);
95
96         String serviceTemplateName2 = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_2.name();
97         consolidationData.addPortTemplateConsolidationData(
98                 serviceTemplateName2, PORT_NODE_TYPE_2, PORT_RESOURCE_ID, PORT_RESOURCE_TYPE, PORT_NODE_TYPE_2);
99         expectedServiceTemplateNames.add(serviceTemplateName2);
100         checkPortConsolidationData(consolidationData, serviceTemplateName2, expectedServiceTemplateNames);
101     }
102
103     @Test
104     public void testAddConsolidationData_DiffNodeTypes_testWithMock() throws Exception {
105         String serviceTemplateName = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
106         addAndCheckPortTemplateConsolidationData(serviceTemplateName,
107                 PORT_NODE_TYPE_1);
108         addAndCheckPortTemplateConsolidationData(serviceTemplateName,
109                 PORT_NODE_TYPE_2);
110     }
111
112     @Test
113     public void testAddConsolidationData_DiffServiceTemplate_testWithMock() throws Exception {
114         addAndCheckPortTemplateConsolidationData(ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name(),
115                 PORT_NODE_TYPE_1);
116         addAndCheckPortTemplateConsolidationData(ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_2.name(),
117                 PORT_NODE_TYPE_2);
118     }
119
120     @Test
121     public void testAddSubInterfaceConsolidationData_Same() throws Exception {
122         String serviceTemplateName = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
123         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateName,
124                 SUB_INTERFACE_NODE_TEMPLATE_ID_1, PORT_NODE_TEMPLATE_ID_1);
125         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateName,
126                 SUB_INTERFACE_NODE_TEMPLATE_ID_1, PORT_NODE_TEMPLATE_ID_1, 2);
127     }
128
129     @Test
130     public void testAddSubInterfaceConsolidationData_diffNodeTempId() throws Exception {
131         String serviceTemplateName = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
132         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateName,
133                 SUB_INTERFACE_NODE_TEMPLATE_ID_1, PORT_NODE_TEMPLATE_ID_1);
134         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateName,
135                 SUB_INTERFACE_NODE_TEMPLATE_ID_2, PORT_NODE_TEMPLATE_ID_1);
136     }
137
138     @Test
139     public void testAddSubInterfaceConsolidationData_diffNodeTempId_diffParentPort() throws Exception {
140         String serviceTemplateName = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
141         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateName,
142                 SUB_INTERFACE_NODE_TEMPLATE_ID_1, PORT_NODE_TEMPLATE_ID_1);
143         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateName,
144                 SUB_INTERFACE_NODE_TEMPLATE_ID_2, PORT_NODE_TEMPLATE_ID_2);
145     }
146
147     @Test
148     public void testAddSubInterfaceConsolidationData_diffServiceTemp() throws Exception {
149         addAndCheckSubInterfaceTemplateConsolidationData(
150                 ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name(),
151                 SUB_INTERFACE_NODE_TEMPLATE_ID_1, SUB_INTERFACE_NODE_TEMPLATE_ID_1);
152         addAndCheckSubInterfaceTemplateConsolidationData(
153                 ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_2.name(),
154                 SUB_INTERFACE_NODE_TEMPLATE_ID_2, SUB_INTERFACE_NODE_TEMPLATE_ID_2);
155     }
156
157     private void addAndCheckPortTemplateConsolidationData(String serviceTemplateFileName,
158             String portNodeType) throws Exception {
159         FilePortConsolidationData filePortConsolidationDataMock =
160                 setFilePortConsolidationDataMock(serviceTemplateFileName);
161
162         consolidationData.addPortTemplateConsolidationData(
163                 serviceTemplateFileName, portNodeType, PORT_RESOURCE_ID, PORT_RESOURCE_TYPE, portNodeType);
164
165         Mockito.verify(filePortConsolidationDataMock)
166                .addPortTemplateConsolidationData(portNodeType, PORT_RESOURCE_ID, PORT_RESOURCE_TYPE, portNodeType);
167     }
168
169     private void addAndCheckSubInterfaceTemplateConsolidationData(String serviceTemplateFileName,
170             String subInterfaceNodeTemplateId, String subInterfaceNodeTemplateType) throws Exception {
171         addAndCheckSubInterfaceTemplateConsolidationData(serviceTemplateFileName, subInterfaceNodeTemplateId,
172                 subInterfaceNodeTemplateType, 1);
173     }
174
175     private void addAndCheckSubInterfaceTemplateConsolidationData(String serviceTemplateFileName,
176             String subInterfaceNodeTemplateId, String parentPortNodeTemplateId, int expectedTime) throws Exception {
177
178         FilePortConsolidationData filePortConsolidationDataMock =
179                 setFilePortConsolidationDataMock(serviceTemplateFileName);
180         consolidationData.addSubInterfaceTemplateConsolidationData(serviceTemplateFileName, resource,
181                 subInterfaceNodeTemplateId, parentPortNodeTemplateId);
182
183         Mockito.verify(filePortConsolidationDataMock, Mockito.times(expectedTime))
184                 .addSubInterfaceTemplateConsolidationData(resource, subInterfaceNodeTemplateId,
185                         parentPortNodeTemplateId);
186     }
187
188     private void addMocksToMap() {
189         mockMap.put(ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1, mockFilePortConsolidationData1);
190         mockMap.put(ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_2, mockFilePortConsolidationData2);
191     }
192
193     private FilePortConsolidationData setFilePortConsolidationDataMock(String serviceTemplateName) throws Exception {
194         FilePortConsolidationData filePortConsolidationDataMock =
195                 getFileComputeConsolidationDataMock(serviceTemplateName);
196         consolidationData.setFilePortConsolidationData(serviceTemplateName, filePortConsolidationDataMock);
197         return filePortConsolidationDataMock;
198     }
199
200     private FilePortConsolidationData getFileComputeConsolidationDataMock(String serviceTemplateName) throws Exception {
201         ServiceTemplateFileNameEnum enumValue = ServiceTemplateFileNameEnum.valueOf(serviceTemplateName);
202         FilePortConsolidationData mock = mockMap.get(enumValue);
203         if (mock == null) {
204             throw new Exception("This service Template File Name doesn't supported. "
205                                         + "Please add it to ServiceTemplateFileName enum");
206         }
207         return mock;
208     }
209
210     private void checkPortConsolidationData(PortConsolidationData consolidationData,
211             String serviceTemplateFileName, Set<String> expectedServiceTemplateNames) {
212         FilePortConsolidationData filePortConsolidationData = consolidationData
213                 .getFilePortConsolidationData(serviceTemplateFileName);
214         Assert.assertNotNull(filePortConsolidationData);
215         checkGetAllServiceTemplateFileNames(consolidationData, expectedServiceTemplateNames);
216     }
217
218     private void checkGetAllServiceTemplateFileNames(PortConsolidationData consolidationData,
219                 Set<String> expectedServiceTemplateNames) {
220         Set<String> allServiceTemplateFileNames = consolidationData.getAllServiceTemplateFileNames();
221         Assert.assertNotNull(allServiceTemplateFileNames);
222         Assert.assertEquals(expectedServiceTemplateNames.size(), allServiceTemplateFileNames.size());
223         Assert.assertTrue(allServiceTemplateFileNames.containsAll(expectedServiceTemplateNames));
224     }
225 }