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 / ComputeConsolidationDataTest.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
29 public class ComputeConsolidationDataTest {
30
31     private static final String COMPUTE_NODE_TEMPLATE_ID_1 = "computeNodeTemplateId1";
32     private static final String COMPUTE_NODE_TEMPLATE_ID_2 = "computeNodeTemplateId2";
33     private static final String COMPUTE_NODE_TYPE_1 = "computeNodeType1";
34     private static final String COMPUTE_NODE_TYPE_2 = "computeNodeType2";
35     private static final String MAIN_SERVICE_TEMPLATE = "MainServiceTemplate.yaml";
36
37     @Mock
38     private FileComputeConsolidationData fileComputeConsolidationDataMock;
39
40     private final EnumMap<ServiceTemplateFileNameEnum, FileComputeConsolidationData> mockMap =
41             new EnumMap<>(ServiceTemplateFileNameEnum.class);
42
43     @Mock
44     private FileComputeConsolidationData mockFileComputeConsolidationData1;
45     @Mock
46     private FileComputeConsolidationData mockFileComputeConsolidationData2;
47
48     private final ComputeConsolidationData consolidationData = new ComputeConsolidationData();
49
50     @Before
51     public void setUp() {
52         MockitoAnnotations.openMocks(this);
53         addMocksToMap();
54     }
55
56     @Test
57     public void testAddComputeTemplateConsolidationData() {
58         String serviceTemplate = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
59         consolidationData.addComputeTemplateConsolidationData(
60                 serviceTemplate, COMPUTE_NODE_TYPE_1, COMPUTE_NODE_TEMPLATE_ID_1);
61
62         Set<String> expectedServiceTemplateNames = new HashSet<>();
63         expectedServiceTemplateNames.add(serviceTemplate);
64         checkComputeConsolidationData(consolidationData, serviceTemplate,
65                 expectedServiceTemplateNames);
66     }
67
68     @Test
69     public void testAddSameConsolidationDataTwice_noNewCreated() {
70         String serviceTemplate = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
71         consolidationData.addComputeTemplateConsolidationData(serviceTemplate,
72                 COMPUTE_NODE_TYPE_1, COMPUTE_NODE_TEMPLATE_ID_1);
73         Set<String> expectedServiceTemplateNames = new HashSet<>();
74         expectedServiceTemplateNames.add(serviceTemplate);
75         checkComputeConsolidationData(consolidationData, serviceTemplate, expectedServiceTemplateNames);
76
77         consolidationData.addComputeTemplateConsolidationData(serviceTemplate,
78                 COMPUTE_NODE_TYPE_1, COMPUTE_NODE_TEMPLATE_ID_1);
79         checkComputeConsolidationData(consolidationData, serviceTemplate, expectedServiceTemplateNames);
80     }
81
82     @Test
83     public void testAddDiffConsolidationData_diffNodeTypes() {
84         String serviceTemplate = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
85         consolidationData.addComputeTemplateConsolidationData(serviceTemplate,
86                 COMPUTE_NODE_TYPE_1, COMPUTE_NODE_TEMPLATE_ID_1);
87         Set<String> expectedServiceTemplateNames = new HashSet<>();
88         expectedServiceTemplateNames.add(serviceTemplate);
89         checkComputeConsolidationData(consolidationData, serviceTemplate, expectedServiceTemplateNames);
90
91         consolidationData.addComputeTemplateConsolidationData(serviceTemplate,
92                 COMPUTE_NODE_TYPE_2, COMPUTE_NODE_TEMPLATE_ID_2);
93         checkComputeConsolidationData(consolidationData, serviceTemplate, expectedServiceTemplateNames);
94     }
95
96     @Test
97     public void testAddDiffConsolidationData_diffServiceTemplate() {
98         String serviceTemplate1 = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
99         consolidationData.addComputeTemplateConsolidationData(serviceTemplate1, COMPUTE_NODE_TYPE_1,
100                 COMPUTE_NODE_TEMPLATE_ID_1);
101         Set<String> expectedServiceTemplateNames =  new HashSet<>();
102         expectedServiceTemplateNames.add(serviceTemplate1);
103         checkComputeConsolidationData(consolidationData, serviceTemplate1, expectedServiceTemplateNames);
104
105         String serviceTemplate2 = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_2.name();
106         consolidationData.addComputeTemplateConsolidationData(serviceTemplate2, COMPUTE_NODE_TYPE_2,
107                 COMPUTE_NODE_TEMPLATE_ID_2);
108         expectedServiceTemplateNames.add(serviceTemplate2);
109         checkComputeConsolidationData(consolidationData, serviceTemplate2, expectedServiceTemplateNames);
110     }
111
112     @Test
113     public void testAddSameConsolidationDataTwice_testWithMock() throws Exception {
114         String serviceTemplate = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
115         addAndCheckComputeTemplateConsolidationData(serviceTemplate, COMPUTE_NODE_TYPE_1,
116                 COMPUTE_NODE_TEMPLATE_ID_1);
117         addAndCheckComputeTemplateConsolidationData(serviceTemplate, COMPUTE_NODE_TYPE_1,
118                 COMPUTE_NODE_TEMPLATE_ID_1, 2);
119     }
120
121     @Test
122     public void testAddDiffConsolidationData_diffNodeTypes_testWithMock() throws Exception {
123         String serviceTemplate = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
124         addAndCheckComputeTemplateConsolidationData(serviceTemplate, COMPUTE_NODE_TYPE_1,
125                 COMPUTE_NODE_TEMPLATE_ID_1);
126         addAndCheckComputeTemplateConsolidationData(serviceTemplate, COMPUTE_NODE_TYPE_2,
127                 COMPUTE_NODE_TEMPLATE_ID_2);
128     }
129
130     @Test
131     public void testAddDiffConsolidationData_diffServiceTemplate_testWithMock() throws Exception {
132         String serviceTemplate1 = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
133         addAndCheckComputeTemplateConsolidationData(serviceTemplate1, COMPUTE_NODE_TYPE_1,
134                 COMPUTE_NODE_TEMPLATE_ID_1);
135         String serviceTemplate2 = ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1.name();
136         addAndCheckComputeTemplateConsolidationData(serviceTemplate2, COMPUTE_NODE_TYPE_2,
137                 COMPUTE_NODE_TEMPLATE_ID_2);
138     }
139
140     private void checkComputeConsolidationData(ComputeConsolidationData consolidationData,
141             String serviceTemplateFileName, Set<String> expectedServiceTemplateNames) {
142         FileComputeConsolidationData fileComputeConsolidationData = consolidationData
143                 .getFileComputeConsolidationData(serviceTemplateFileName);
144         Assert.assertNotNull(fileComputeConsolidationData);
145         checkGetAllServiceTemplateFileNames(consolidationData, expectedServiceTemplateNames);
146     }
147
148     private void checkGetAllServiceTemplateFileNames(ComputeConsolidationData consolidationData,
149                 Set<String> expectedServiceTemplateNames) {
150         Set<String> allServiceTemplateFileNames = consolidationData.getAllServiceTemplateFileNames();
151         Assert.assertNotNull(allServiceTemplateFileNames);
152         Assert.assertEquals(allServiceTemplateFileNames.size(), expectedServiceTemplateNames.size());
153         Assert.assertTrue(allServiceTemplateFileNames.containsAll(expectedServiceTemplateNames));
154     }
155
156     private void addAndCheckComputeTemplateConsolidationData(String serviceTemplateFileName,
157             String computeNodeType, String computeNodeTemplateId) throws Exception {
158         addAndCheckComputeTemplateConsolidationData(serviceTemplateFileName, computeNodeType,
159                 computeNodeTemplateId, 1);
160     }
161
162     private void addAndCheckComputeTemplateConsolidationData(String serviceTemplateFileName,
163             String computeNodeType, String computeNodeTemplateId, int expectedTime) throws Exception {
164         FileComputeConsolidationData fileComputeConsolidationDataMock =
165                 setFileComputeConsolidationDataMock(serviceTemplateFileName);
166         consolidationData.addComputeTemplateConsolidationData(
167                 serviceTemplateFileName, computeNodeType, computeNodeTemplateId);
168
169         Mockito.verify(fileComputeConsolidationDataMock, Mockito.times(expectedTime))
170                .addComputeTemplateConsolidationData(computeNodeType, computeNodeTemplateId);
171     }
172
173     private FileComputeConsolidationData setFileComputeConsolidationDataMock(
174             String serviceTemplateName) throws Exception {
175         FileComputeConsolidationData mock = getFileComputeConsolidationDataMock(serviceTemplateName);
176         consolidationData.setFileComputeConsolidationData(serviceTemplateName, mock);
177         return mock;
178     }
179
180     private void addMocksToMap() {
181         mockMap.put(ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_1, mockFileComputeConsolidationData1);
182         mockMap.put(ServiceTemplateFileNameEnum.SERVICE_TEMPLATE_FILE_NAME_2, mockFileComputeConsolidationData2);
183     }
184
185     private FileComputeConsolidationData getFileComputeConsolidationDataMock(String serviceTemplateName)
186             throws Exception {
187         ServiceTemplateFileNameEnum enumValue = ServiceTemplateFileNameEnum.valueOf(serviceTemplateName);
188         FileComputeConsolidationData mock = mockMap.get(enumValue);
189         if (mock == null) {
190             throw new Exception("This service Template File Name doesn't supported. "
191                                         + "Please add it to ServiceTemplateFileName enum");
192         }
193         return mock;
194     }
195
196     @Test
197     public void isNumberOfComputeTypesLegal() {
198         ComputeConsolidationData computeConsolidationData = new ComputeConsolidationData();
199         computeConsolidationData.setFileComputeConsolidationData(MAIN_SERVICE_TEMPLATE,
200                 fileComputeConsolidationDataMock);
201
202         computeConsolidationData.isNumberOfComputeTypesLegal(MAIN_SERVICE_TEMPLATE);
203         Mockito.verify(fileComputeConsolidationDataMock).isNumberOfComputeTypesLegal();
204     }
205
206     @Test
207     public void isNumberOfComputeTypesLegalNegative() {
208         ComputeConsolidationData computeConsolidationData = new ComputeConsolidationData();
209
210         Assert.assertFalse(computeConsolidationData.isNumberOfComputeTypesLegal(MAIN_SERVICE_TEMPLATE));
211     }
212 }