Sync Integ to Master
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / ResourceInstanceBusinessLogicTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
4  * ================================================================================
5  * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6  * ================================================================================
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  * 
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  * 
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  * ============LICENSE_END=========================================================
19  */
20
21 package org.openecomp.sdc.be.components.impl;
22
23 import fj.data.Either;
24 import org.junit.Before;
25 import org.junit.Test;
26 import org.mockito.InjectMocks;
27 import org.mockito.Mockito;
28 import org.mockito.MockitoAnnotations;
29 import org.openecomp.sdc.be.config.ConfigurationManager;
30 import org.openecomp.sdc.be.dao.api.ActionStatus;
31 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
32 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
33 import org.openecomp.sdc.be.impl.ComponentsUtils;
34 import org.openecomp.sdc.be.model.ArtifactDefinition;
35 import org.openecomp.sdc.be.model.Component;
36 import org.openecomp.sdc.be.model.ComponentInstance;
37 import org.openecomp.sdc.be.model.GroupInstance;
38 import org.openecomp.sdc.be.model.HeatParameterDefinition;
39 import org.openecomp.sdc.be.model.Resource;
40 import org.openecomp.sdc.be.model.Service;
41 import org.openecomp.sdc.be.model.User;
42 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
43 import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
44 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
45 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
46 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
47 import org.openecomp.sdc.be.resources.data.auditing.model.ResourceAuditData;
48 import org.openecomp.sdc.be.user.UserBusinessLogic;
49 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
50 import org.openecomp.sdc.common.api.ConfigurationSource;
51 import org.openecomp.sdc.common.datastructure.AuditingFieldsKeysEnum;
52 import org.openecomp.sdc.common.impl.ExternalConfiguration;
53 import org.openecomp.sdc.common.impl.FSConfigurationSource;
54 import org.openecomp.sdc.exception.ResponseFormat;
55
56 import java.util.ArrayList;
57 import java.util.EnumMap;
58 import java.util.HashMap;
59 import java.util.List;
60 import java.util.Map;
61
62 import static org.junit.Assert.assertNotNull;
63 import static org.junit.Assert.assertNull;
64 import static org.junit.Assert.assertTrue;
65
66 public class ResourceInstanceBusinessLogicTest {
67
68     private static final String RESOURCE_ID_WITH_HEAT_PARAMS = "MyResourceId";
69     private static final String RESOURCE_ID_NO_PAYLOAD = "NoHeatPayload";
70     private static final String RESOURCE_ID_NO_HEAT_PARAMS = "NoHeatParams";
71     private static final String RESOURCE_INSTANCE_ID = "MyResourceInstanceId";
72     private static final String SERVICE_ID = "MyServiceId";
73     private static final String HEAT_LABEL = "myHeat";
74     private static final String HEAT_ENV_LABEL = HEAT_LABEL + "Env";
75     private static final String USER_ID = "jh0003";
76     private static final long ARTIFACT_CREATION_TIME = System.currentTimeMillis();
77
78     static User adminUser = new User("John", "Doh", USER_ID, "", "ADMIN", null);
79
80     @InjectMocks
81     static ComponentInstanceBusinessLogic bl = new ComponentInstanceBusinessLogic();
82
83     public static final ArtifactsBusinessLogic artifactBusinessLogic = Mockito.mock(ArtifactsBusinessLogic.class);
84     public static final UserBusinessLogic userAdminManager = Mockito.mock(UserBusinessLogic.class);
85 //    public static final ServiceOperation serviceOperation = Mockito.mock(ServiceOperation.class);
86     public static final ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
87     public static final IGroupInstanceOperation groupInstanceOperation = Mockito.mock(IGroupInstanceOperation.class);
88     public static final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
89
90     static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
91     static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
92
93     // @BeforeClass
94     public static void setup() {
95
96         Map<String, Object> deploymentResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getDeploymentResourceInstanceArtifacts();
97         Map<String, Object> placeHolderData = (Map<String, Object>) deploymentResourceArtifacts.get(ArtifactsBusinessLogic.HEAT_ENV_NAME);
98
99         ArtifactDefinition heatArtifact = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true);
100         Map<String, ArtifactDefinition> artifacts = new HashMap<String, ArtifactDefinition>();
101         artifacts.put(HEAT_LABEL.toLowerCase(), heatArtifact);
102         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifact = Either.left(artifacts);
103         Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_WITH_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifact);
104
105         ArtifactDefinition heatArtifactNoPayload = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_PAYLOAD, HEAT_LABEL, ARTIFACT_CREATION_TIME, true, false);
106         Map<String, ArtifactDefinition> artifactsNoPayload = new HashMap<String, ArtifactDefinition>();
107         artifactsNoPayload.put(HEAT_LABEL.toLowerCase(), heatArtifactNoPayload);
108         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoPayload = Either.left(artifactsNoPayload);
109         Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_PAYLOAD, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoPayload);
110
111         ArtifactDefinition heatArtifactNoParams = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false);
112         Map<String, ArtifactDefinition> artifactsNoParams = new HashMap<String, ArtifactDefinition>();
113         artifactsNoParams.put(HEAT_LABEL.toLowerCase(), heatArtifactNoParams);
114         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoParams = Either.left(artifactsNoParams);
115         Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoParams);
116
117         Either<ArtifactDefinition, ResponseFormat> eitherPlaceHolder = Either.left(getArtifactPlaceHolder(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL));
118         Mockito.when(artifactBusinessLogic.createArtifactPlaceHolderInfo(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL.toLowerCase(), placeHolderData, USER_ID, ArtifactGroupTypeEnum.DEPLOYMENT, false)).thenReturn(eitherPlaceHolder);
119
120         Mockito.when(artifactBusinessLogic.createArtifactAuditingFields(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString())).thenReturn(new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class));
121
122         Either<ArtifactDefinition, StorageOperationStatus> eitherArtifact = Either.left(getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false));
123         Mockito.when(artifactBusinessLogic.addHeatEnvArtifact(Mockito.any(ArtifactDefinition.class), Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString())).thenReturn(eitherArtifact);
124
125         Either<User, ActionStatus> eitherUser = Either.left(adminUser);
126         Mockito.when(userAdminManager.getUser(USER_ID, false)).thenReturn(eitherUser);
127
128         Object lightService = new Service();
129         Either<Object, StorageOperationStatus> eitherLightService = Either.left(lightService);
130
131         Mockito.doNothing().when(componentsUtils).auditComponent(Mockito.any(ResponseFormat.class), Mockito.any(User.class), Mockito.any(Component.class), Mockito.any(AuditingActionEnum.class),
132                 Mockito.any(ComponentTypeEnum.class), Mockito.any(ResourceAuditData.class));
133
134         Either<ArtifactDefinition, ResponseFormat> heatEnvEither = Either.left(getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false));
135
136         Mockito.when(artifactBusinessLogic.createHeatEnvPlaceHolder(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString(), Mockito.any(User.class),
137                 Mockito.any(Component.class), Mockito.anyObject())).thenReturn(heatEnvEither);
138
139         Either<List<GroupInstance>, StorageOperationStatus>  groupInstanceEitherLeft = Either.left(new ArrayList<GroupInstance>());
140         Mockito.when(groupInstanceOperation.getAllGroupInstances(Mockito.anyString(),  Mockito.any(NodeTypeEnum.class))).thenReturn(groupInstanceEitherLeft);
141
142         bl.setToscaOperationFacade(toscaOperationFacade);
143
144         StorageOperationStatus status = StorageOperationStatus.OK;
145         Mockito.when(toscaOperationFacade.addDeploymentArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any(Map.class))).thenReturn(status);
146         Mockito.when(toscaOperationFacade.addInformationalArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any())).thenReturn(status);
147         Mockito.when(toscaOperationFacade.addGroupInstancesToComponentInstance(Mockito.any(Component.class), Mockito.any(ComponentInstance.class), Mockito.any(), Mockito.any(Map.class))).thenReturn(status);
148
149     }
150
151     @Before
152     public void initMocks() {
153         MockitoAnnotations.initMocks(this);
154 //        Mockito.reset(artifactBusinessLogic, serviceOperation, componentsUtils, userAdminManager);
155         setup();
156     }
157
158     @Test
159     public void testAddResourceInstanceArtifacts() throws Exception {
160         ComponentInstance resourceInstance = new ComponentInstance();
161         resourceInstance.setName(RESOURCE_INSTANCE_ID);
162         resourceInstance.setComponentUid(RESOURCE_ID_WITH_HEAT_PARAMS);
163         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
164         Service service = new Service();
165         service.setUniqueId(SERVICE_ID);
166
167         Map<String, String> existingEnvVersions = new HashMap<>();
168         Resource originResource = new Resource();
169         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
170         Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
171         assertTrue(addArtifactsRes.isLeft());
172
173         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
174         assertNotNull(deploymentArtifacts);
175 //        assertTrue(deploymentArtifacts.size() == 2);
176
177         ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
178         assertNotNull(heatDefinition);
179 //        assertEquals(getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true), heatDefinition);
180 //
181 //        ArtifactDefinition heatEnvDefinition = deploymentArtifacts.get(HEAT_ENV_LABEL.toLowerCase());
182 //        assertNotNull(heatEnvDefinition);
183 //
184 //        List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
185 //        assertNotNull(heatParameters);
186 //
187 //        List<HeatParameterDefinition> heatEnvParameters = heatEnvDefinition.getListHeatParameters();
188 //        assertNotNull(heatEnvParameters);
189 //
190 //        assertEquals(heatParameters.size(), heatEnvParameters.size());
191 //
192 //        int index = 0;
193 //        for (HeatParameterDefinition heatEnvParameter : heatEnvParameters) {
194 //            HeatParameterDefinition heatParameterDefinition = heatParameters.get(index);
195 //            assertEquals(heatEnvParameter.getUniqueId(), heatParameterDefinition.getUniqueId());
196 //            assertEquals(heatEnvParameter.getType(), heatParameterDefinition.getType());
197 //            assertEquals(heatEnvParameter.getName(), heatParameterDefinition.getName());
198 //            assertEquals(heatEnvParameter.getDescription(), heatParameterDefinition.getDescription());
199 //            assertEquals(heatEnvParameter.getCurrentValue(), heatParameterDefinition.getCurrentValue());
200 //            // current of heat parameter should be the default for heat env
201 //            // parameter
202 //            assertEquals(heatEnvParameter.getDefaultValue(), heatParameterDefinition.getCurrentValue());
203 //
204 //            index++;
205 //        }
206     }
207
208      @Test
209     public void testAddResourceInstanceArtifactsNoParams() throws Exception {
210         ComponentInstance resourceInstance = new ComponentInstance();
211         resourceInstance.setName(RESOURCE_INSTANCE_ID);
212         resourceInstance.setComponentUid(RESOURCE_ID_NO_HEAT_PARAMS);
213         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
214         Service service = new Service();
215         service.setUniqueId(SERVICE_ID);
216         Map<String, String> existingEnvVersions = new HashMap<>();
217         Resource originResource = new Resource();
218         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
219         Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
220         assertTrue(addArtifactsRes.isLeft());
221
222         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
223         assertNotNull(deploymentArtifacts);
224 //        assertTrue(deploymentArtifacts.size() == 2);
225
226         ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
227         assertNotNull(heatDefinition);
228 //        assertEquals(getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false), heatDefinition);
229
230 //        ArtifactDefinition heatEnvDefinition = deploymentArtifacts.get(HEAT_ENV_LABEL.toLowerCase());
231 //        assertNotNull(heatEnvDefinition);
232
233         List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
234         assertNull(heatParameters);
235
236 //        List<HeatParameterDefinition> heatEnvParameters = heatEnvDefinition.getListHeatParameters();
237 //        assertNull(heatEnvParameters);
238
239     }
240
241     @SuppressWarnings("unchecked")
242     @Test
243     public void testAddResourceInstanceArtifactsNoArtifacts() throws Exception {
244         ComponentInstance resourceInstance = new ComponentInstance();
245         resourceInstance.setName(RESOURCE_INSTANCE_ID);
246         resourceInstance.setComponentUid(RESOURCE_ID_NO_PAYLOAD);
247         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
248         Service service = new Service();
249         service.setUniqueId(SERVICE_ID);
250         Map<String, String> existingEnvVersions = new HashMap<>();
251         Resource originResource = new Resource();
252         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
253
254         Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
255         assertTrue(addArtifactsRes.isLeft());
256
257         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
258         assertNotNull(deploymentArtifacts);
259         assertTrue(deploymentArtifacts.size() == 0);
260
261         Mockito.verify(artifactBusinessLogic, Mockito.times(0)).addHeatEnvArtifact(Mockito.any(ArtifactDefinition.class), Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString());
262     }
263
264     private static ArtifactDefinition getHeatArtifactDefinition(String userId, String resourceId, String artifactName, long time, boolean placeholderOnly, boolean withHeatParams) {
265         ArtifactDefinition artifactInfo = new ArtifactDefinition();
266
267         artifactInfo.setArtifactName(artifactName + ".yml");
268         artifactInfo.setArtifactType("HEAT");
269         artifactInfo.setDescription("hdkfhskdfgh");
270         artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
271
272         artifactInfo.setUserIdCreator(userId);
273         String fullName = "Jim H";
274         artifactInfo.setUpdaterFullName(fullName);
275         // long time = System.currentTimeMillis();
276         artifactInfo.setCreatorFullName(fullName);
277         artifactInfo.setCreationDate(time);
278         artifactInfo.setLastUpdateDate(time);
279         artifactInfo.setUserIdLastUpdater(userId);
280         artifactInfo.setArtifactLabel(HEAT_LABEL.toLowerCase());
281         artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, artifactInfo.getArtifactLabel()));
282
283         if (!placeholderOnly) {
284             artifactInfo.setEsId(artifactInfo.getUniqueId());
285             artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
286
287             if (withHeatParams) {
288                 List<HeatParameterDefinition> heatParams = new ArrayList<HeatParameterDefinition>();
289                 HeatParameterDefinition heatParam = new HeatParameterDefinition();
290                 heatParam.setCurrentValue("11");
291                 heatParam.setDefaultValue("22");
292                 heatParam.setDescription("desc");
293                 heatParam.setName("myParam");
294                 heatParam.setType("number");
295                 heatParams.add(heatParam);
296                 artifactInfo.setListHeatParameters(heatParams);
297             }
298         }
299
300         return artifactInfo;
301     }
302
303     private static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
304         ArtifactDefinition artifact = new ArtifactDefinition();
305
306         artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
307         artifact.setArtifactLabel(logicalName.toLowerCase());
308
309         return artifact;
310     }
311 }