5d3d58e74cb49799cb5726cf7767ffa90ab9bd89
[sdc.git] /
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     @Before
51     public void setUp() {
52         MockitoAnnotations.initMocks(this);
53         addMocksToMap();
54     }
55
56     @Test
57     public void testAddComputeTemplateConsolidationData() {
58         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
59         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
60         Set<String> expectedComputeNodeTypes = new HashSet<>();
61         expectedComputeNodeTypes.add(computeNodeType);
62         checkComputeConsolidationData(consolidationData, computeNodeType, expectedComputeNodeTypes);
63     }
64
65     @Test
66     public void testAddSameConsolidationDataTwice_noNewCreated() {
67         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
68         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
69         TypeComputeConsolidationData firstTypeComputeConsolidationData =
70                 consolidationData.getTypeComputeConsolidationData(computeNodeType);
71
72         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
73         TypeComputeConsolidationData secondTypeComputeConsolidationData =
74                 consolidationData.getTypeComputeConsolidationData(computeNodeType);
75         Assert.assertEquals(firstTypeComputeConsolidationData, secondTypeComputeConsolidationData);
76     }
77
78     @Test
79     public void testAddConsolidationData_diffNodeType() {
80         String computeNodeType1 = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
81         consolidationData.addComputeTemplateConsolidationData(computeNodeType1, COMPUTE_NODE_TEMPLATE_ID_1);
82         Set<String> expectedComputeNodeTypes = new HashSet<>();
83         expectedComputeNodeTypes.add(computeNodeType1);
84         checkComputeConsolidationData(consolidationData, computeNodeType1, expectedComputeNodeTypes);
85
86         String computeNodeType2 = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_2.name();
87         consolidationData.addComputeTemplateConsolidationData(computeNodeType2, COMPUTE_NODE_TEMPLATE_ID_2);
88         expectedComputeNodeTypes.add(computeNodeType2);
89         checkComputeConsolidationData(consolidationData, computeNodeType2, expectedComputeNodeTypes);
90     }
91
92     @Test
93     public void testAddConsolidationData_diffNodeTemplateId() {
94         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
95         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
96         Set<String> expectedComputeNodeTypes = new HashSet<>();
97         expectedComputeNodeTypes.add(computeNodeType);
98         checkComputeConsolidationData(consolidationData, computeNodeType, expectedComputeNodeTypes);
99
100         consolidationData.addComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_2);
101         checkComputeConsolidationData(consolidationData, computeNodeType, expectedComputeNodeTypes);
102     }
103
104     @Test
105     public void testAddSameConsolidationDataTwice_testWithMock() throws Exception {
106         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
107         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
108         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1, 2);
109     }
110
111     @Test
112     public void testAddConsolidationData_diffNodeType_testWithMock() throws Exception {
113         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
114         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
115         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_2);
116     }
117
118     @Test
119     public void testAddConsolidationData_diffNodeTemplateId_testWithMock() throws Exception {
120         String computeNodeType = ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1.name();
121         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_1);
122         addAndCheckComputeTemplateConsolidationData(computeNodeType, COMPUTE_NODE_TEMPLATE_ID_2);
123     }
124
125     private void checkComputeConsolidationData(FileComputeConsolidationData fileComputeConsolidationData,
126             String computeNodeType, Set<String> expectedComputeNodeTypes) {
127         TypeComputeConsolidationData typeComputeConsolidationData =
128                 fileComputeConsolidationData.getTypeComputeConsolidationData(computeNodeType);
129         Assert.assertNotNull(typeComputeConsolidationData);
130         checkGetAllComputeTypes(fileComputeConsolidationData, expectedComputeNodeTypes);
131     }
132
133     private void checkGetAllComputeTypes(FileComputeConsolidationData fileComputeConsolidationData,
134             Set<String> expectedComputeNodeTypes) {
135         Collection<String> allComputeTypes = fileComputeConsolidationData.getAllComputeTypes();
136         Assert.assertNotNull(allComputeTypes);
137         Assert.assertEquals(allComputeTypes.size(), expectedComputeNodeTypes.size());
138         Assert.assertTrue(allComputeTypes.containsAll(expectedComputeNodeTypes));
139     }
140
141     private void addAndCheckComputeTemplateConsolidationData(
142             String computeNodeType, String computeNodeTemplateId) throws Exception {
143         addAndCheckComputeTemplateConsolidationData(computeNodeType,
144                 computeNodeTemplateId, 1);
145     }
146
147     private void addAndCheckComputeTemplateConsolidationData(String computeNodeType,
148             String computeNodeTemplateId, int expectedTime) throws Exception {
149         TypeComputeConsolidationData fileComputeConsolidationDataMock =
150                 setTypeComputeConsolidationDataMock(computeNodeType);
151
152         consolidationData.addComputeTemplateConsolidationData(
153                 computeNodeType, computeNodeTemplateId);
154
155         Mockito.verify(fileComputeConsolidationDataMock, Mockito.times(expectedTime))
156                .addComputeTemplateConsolidationData(computeNodeTemplateId);
157     }
158
159     private void addMocksToMap() {
160         mockMap.put(ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_1, mockTypeComputeConsolidationData1);
161         mockMap.put(ComputeNodeTypeEnum.COMPUTE_NODE_TYPE_2, mockTypeComputeConsolidationData2);
162     }
163
164     private TypeComputeConsolidationData setTypeComputeConsolidationDataMock(
165             String computeType) throws Exception {
166         TypeComputeConsolidationData typeComputeConsolidationDataMock =
167                 getFileComputeConsolidationDataMock(computeType);
168         consolidationData.setTypeComputeConsolidationData(computeType, typeComputeConsolidationDataMock);
169         return typeComputeConsolidationDataMock;
170     }
171
172     private TypeComputeConsolidationData getFileComputeConsolidationDataMock(String computeType) throws Exception {
173         ComputeNodeTypeEnum enumValue = ComputeNodeTypeEnum.valueOf(computeType);
174         TypeComputeConsolidationData mock = mockMap.get(enumValue);
175         if (mock == null) {
176             throw new Exception("This compute Type doesn't support. "
177                                         + "Please add it to ComputeNodeTypeEnum enum");
178         }
179         return mock;
180     }
181
182 }