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