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 / FileComputeConsolidationDataTest.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.Collection;
20 import java.util.EnumMap;
21 import java.util.HashSet;
22 import java.util.Set;
23
24 import org.junit.Assert;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.mockito.Mock;
28 import org.mockito.Mockito;
29 import org.mockito.MockitoAnnotations;
30
31 public class FileComputeConsolidationDataTest {
32
33     private static final String COMPUTE_NODE_TEMPLATE_ID_1 = "computeNodeTemplateId1";
34     private static final String COMPUTE_NODE_TEMPLATE_ID_2 = "computeNodeTemplateId2";
35     private final FileComputeConsolidationData consolidationData = new FileComputeConsolidationData();
36
37     private enum ComputeNodeTypeEnum {
38         COMPUTE_NODE_TYPE_1,
39         COMPUTE_NODE_TYPE_2
40     }
41
42     private final EnumMap<ComputeNodeTypeEnum, TypeComputeConsolidationData> mockMap =
43             new EnumMap<>(ComputeNodeTypeEnum.class);
44
45     @Mock
46     private TypeComputeConsolidationData mockTypeComputeConsolidationData1;
47     @Mock
48     private TypeComputeConsolidationData mockTypeComputeConsolidationData2;
49
50     @Mock
51     TypeComputeConsolidationData typeComputeConsolidationDataMock;
52
53     @Before
54     public void setUp() {
55         MockitoAnnotations.openMocks(this);
56         addMocksToMap();
57     }
58
59     @Test
60     public void testAddComputeTemplateConsolidationData() {
61         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
62         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
63         Set<String> expectedComputeNodeTypes = new HashSet<>();
64         expectedComputeNodeTypes.add(computeNodeType);
65         checkComputeConsolidationData(consolidationData, computeNodeType, expectedComputeNodeTypes);
66     }
67
68     @Test
69     public void testAddSameConsolidationDataTwice_noNewCreated() {
70         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
71         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
72         TypeComputeConsolidationData firstTypeComputeConsolidationData =
73                 consolidationData.getTypeComputeConsolidationData(computeNodeType);
74
75         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
76         TypeComputeConsolidationData secondTypeComputeConsolidationData =
77                 consolidationData.getTypeComputeConsolidationData(computeNodeType);
78         Assert.assertEquals(firstTypeComputeConsolidationData, secondTypeComputeConsolidationData);
79     }
80
81     @Test
82     public void testAddConsolidationData_diffNodeType() {
83         String computeNodeType1 = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
84         consolidationData.addComputeTemplateConsolidationData(computeNodeType1, COMPUTE_NODE_TEMPLATE_ID_1);
85         Set<String> expectedComputeNodeTypes = new HashSet<>();
86         expectedComputeNodeTypes.add(computeNodeType1);
87         checkComputeConsolidationData(consolidationData, computeNodeType1, expectedComputeNodeTypes);
88
89         String computeNodeType2 = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_2.name();
90         consolidationData.addComputeTemplateConsolidationData(computeNodeType2, COMPUTE_NODE_TEMPLATE_ID_2);
91         expectedComputeNodeTypes.add(computeNodeType2);
92         checkComputeConsolidationData(consolidationData, computeNodeType2, expectedComputeNodeTypes);
93     }
94
95     @Test
96     public void testAddConsolidationData_diffNodeTemplateId() {
97         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
98         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
99         Set<String> expectedComputeNodeTypes = new HashSet<>();
100         expectedComputeNodeTypes.add(computeNodeType);
101         checkComputeConsolidationData(consolidationData, computeNodeType, expectedComputeNodeTypes);
102
103         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_2);
104         checkComputeConsolidationData(consolidationData, computeNodeType, expectedComputeNodeTypes);
105     }
106
107     @Test
108     public void testAddSameConsolidationDataTwice_testWithMock() throws Exception {
109         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
110         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
111         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1, 2);
112     }
113
114     @Test
115     public void testAddConsolidationData_diffNodeType_testWithMock() throws Exception {
116         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
117         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
118         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_2);
119     }
120
121     @Test
122     public void testAddConsolidationData_diffNodeTemplateId_testWithMock() throws Exception {
123         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
124         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
125         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_2);
126     }
127
128     @Test
129     public void isNumberOfComputeTypesLegalPositive() {
130         FileComputeConsolidationData fileComputeConsolidationData = new FileComputeConsolidationData();
131         fileComputeConsolidationData.setTypeComputeConsolidationData("server_oam",
132                 typeComputeConsolidationDataMock);
133
134         Mockito.when(typeComputeConsolidationDataMock.isNumberOfComputeConsolidationDataPerTypeLegal())
135                .thenReturn(true);
136
137         Assert.assertTrue(fileComputeConsolidationData.isNumberOfComputeTypesLegal());
138     }
139
140     @Test
141     public void isNumberOfComputeTypesLegalNegative() {
142         TypeComputeConsolidationData typeComputeConsolidationData = new TypeComputeConsolidationData();
143         typeComputeConsolidationData.setComputeTemplateConsolidationData(
144                 "server_oam_1", new ComputeTemplateConsolidationData());
145         typeComputeConsolidationData.setComputeTemplateConsolidationData(
146                 "server_oam_2", new ComputeTemplateConsolidationData());
147
148
149         FileComputeConsolidationData fileComputeConsolidationData = new FileComputeConsolidationData();
150         fileComputeConsolidationData.setTypeComputeConsolidationData("server_oam", typeComputeConsolidationData);
151
152         Assert.assertFalse(fileComputeConsolidationData.isNumberOfComputeTypesLegal());
153     }
154
155     private void checkComputeConsolidationData(FileComputeConsolidationData fileComputeConsolidationData,
156             String computeNodeType, Set<String> expectedComputeNodeTypes) {
157         TypeComputeConsolidationData typeComputeConsolidationData =
158                 fileComputeConsolidationData.getTypeComputeConsolidationData(computeNodeType);
159         Assert.assertNotNull(typeComputeConsolidationData);
160         checkGetAllComputeTypes(fileComputeConsolidationData, expectedComputeNodeTypes);
161     }
162
163     private void checkGetAllComputeTypes(FileComputeConsolidationData fileComputeConsolidationData,
164             Set<String> expectedComputeNodeTypes) {
165         Collection<String> allComputeTypes = fileComputeConsolidationData.getAllComputeTypes();
166         Assert.assertNotNull(allComputeTypes);
167         Assert.assertEquals(allComputeTypes.size(), expectedComputeNodeTypes.size());
168         Assert.assertTrue(allComputeTypes.containsAll(expectedComputeNodeTypes));
169     }
170
171     private void addAndCheckComputeTemplateConsolidationData(
172             String computeNodeType, String computeNodeTemplateId) throws Exception {
173         addAndCheckComputeTemplateConsolidationData(computeNodeType,
174                 computeNodeTemplateId, 1);
175     }
176
177     private void addAndCheckComputeTemplateConsolidationData(String computeNodeType,
178             String computeNodeTemplateId, int expectedTime) throws Exception {
179         TypeComputeConsolidationData fileComputeConsolidationDataMock =
180                 setTypeComputeConsolidationDataMock(computeNodeType);
181
182         consolidationData.addComputeTemplateConsolidationData(
183                 computeNodeType, computeNodeTemplateId);
184
185         Mockito.verify(fileComputeConsolidationDataMock, Mockito.times(expectedTime))
186                .addComputeTemplateConsolidationData(computeNodeTemplateId);
187     }
188
189     private void addMocksToMap() {
190         mockMap.put(ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1, mockTypeComputeConsolidationData1);
191         mockMap.put(ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_2, mockTypeComputeConsolidationData2);
192     }
193
194     private TypeComputeConsolidationData setTypeComputeConsolidationDataMock(
195             String computeType) throws Exception {
196         TypeComputeConsolidationData typeComputeConsolidationDataMock =
197                 getFileComputeConsolidationDataMock(computeType);
198         consolidationData.setTypeComputeConsolidationData(computeType, typeComputeConsolidationDataMock);
199         return typeComputeConsolidationDataMock;
200     }
201
202     private TypeComputeConsolidationData getFileComputeConsolidationDataMock(String computeType) throws Exception {
203         ComputeNodeTypeEnum enumValue = ComputeNodeTypeEnum.valueOf(computeType);
204         TypeComputeConsolidationData mock = mockMap.get(enumValue);
205         if (mock == null) {
206             throw new Exception("This compute Type doesn't support. "
207                                         + "Please add it to ComputeNodeTypeEnum enum");
208         }
209         return mock;
210     }
211
212 }