2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.components.impl;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertNotNull;
25 import static org.junit.Assert.assertNull;
26 import static org.junit.Assert.assertTrue;
28 import java.util.ArrayList;
29 import java.util.EnumMap;
30 import java.util.HashMap;
31 import java.util.List;
34 import org.junit.Before;
35 import org.junit.Test;
36 import org.mockito.InjectMocks;
37 import org.mockito.Mockito;
38 import org.mockito.MockitoAnnotations;
39 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic;
40 import org.openecomp.sdc.be.components.impl.ComponentInstanceBusinessLogic;
41 import org.openecomp.sdc.be.components.impl.ServiceComponentInstanceBusinessLogic;
42 import org.openecomp.sdc.be.config.ConfigurationManager;
43 import org.openecomp.sdc.be.dao.api.ActionStatus;
44 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
45 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
46 import org.openecomp.sdc.be.impl.ComponentsUtils;
47 import org.openecomp.sdc.be.model.ArtifactDefinition;
48 import org.openecomp.sdc.be.model.Component;
49 import org.openecomp.sdc.be.model.ComponentInstance;
50 import org.openecomp.sdc.be.model.GroupInstance;
51 import org.openecomp.sdc.be.model.HeatParameterDefinition;
52 import org.openecomp.sdc.be.model.Resource;
53 import org.openecomp.sdc.be.model.Service;
54 import org.openecomp.sdc.be.model.User;
55 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
56 import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
57 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
58 import org.openecomp.sdc.be.model.operations.impl.ServiceOperation;
59 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
60 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
61 import org.openecomp.sdc.be.user.UserBusinessLogic;
62 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
63 import org.openecomp.sdc.common.api.ConfigurationSource;
64 import org.openecomp.sdc.common.datastructure.AuditingFieldsKeysEnum;
65 import org.openecomp.sdc.common.impl.ExternalConfiguration;
66 import org.openecomp.sdc.common.impl.FSConfigurationSource;
67 import org.openecomp.sdc.exception.ResponseFormat;
69 import fj.data.Either;
71 public class ResourceInstanceBusinessLogicTest {
73 private static final String RESOURCE_ID_WITH_HEAT_PARAMS = "MyResourceId";
74 private static final String RESOURCE_ID_NO_PAYLOAD = "NoHeatPayload";
75 private static final String RESOURCE_ID_NO_HEAT_PARAMS = "NoHeatParams";
76 private static final String RESOURCE_INSTANCE_ID = "MyResourceInstanceId";
77 private static final String SERVICE_ID = "MyServiceId";
78 private static final String HEAT_LABEL = "myHeat";
79 private static final String HEAT_ENV_LABEL = HEAT_LABEL + "Env";
80 private static final String USER_ID = "jh0003";
81 private static final long ARTIFACT_CREATION_TIME = System.currentTimeMillis();
83 static User adminUser = new User("John", "Doh", USER_ID, "", "ADMIN", null);
86 static ServiceComponentInstanceBusinessLogic bl = new ServiceComponentInstanceBusinessLogic();
88 public static final ArtifactsBusinessLogic artifactBusinessLogic = Mockito.mock(ArtifactsBusinessLogic.class);
89 public static final UserBusinessLogic userAdminManager = Mockito.mock(UserBusinessLogic.class);
90 public static final ServiceOperation serviceOperation = Mockito.mock(ServiceOperation.class);
91 public static final ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
92 public static final IGroupInstanceOperation groupInstanceOperation = Mockito.mock(IGroupInstanceOperation.class);
93 public static final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
95 static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
96 static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
99 public static void setup() {
101 Map<String, Object> deploymentResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getDeploymentResourceInstanceArtifacts();
102 Map<String, Object> placeHolderData = (Map<String, Object>) deploymentResourceArtifacts.get(ArtifactsBusinessLogic.HEAT_ENV_NAME);
104 ArtifactDefinition heatArtifact = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true);
105 Map<String, ArtifactDefinition> artifacts = new HashMap<String, ArtifactDefinition>();
106 artifacts.put(HEAT_LABEL.toLowerCase(), heatArtifact);
107 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifact = Either.left(artifacts);
108 Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_WITH_HEAT_PARAMS, NodeTypeEnum.Resource, true, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifact);
110 ArtifactDefinition heatArtifactNoPayload = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_PAYLOAD, HEAT_LABEL, ARTIFACT_CREATION_TIME, true, false);
111 Map<String, ArtifactDefinition> artifactsNoPayload = new HashMap<String, ArtifactDefinition>();
112 artifactsNoPayload.put(HEAT_LABEL.toLowerCase(), heatArtifactNoPayload);
113 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoPayload = Either.left(artifactsNoPayload);
114 Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_PAYLOAD, NodeTypeEnum.Resource, true, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoPayload);
116 ArtifactDefinition heatArtifactNoParams = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false);
117 Map<String, ArtifactDefinition> artifactsNoParams = new HashMap<String, ArtifactDefinition>();
118 artifactsNoParams.put(HEAT_LABEL.toLowerCase(), heatArtifactNoParams);
119 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoParams = Either.left(artifactsNoParams);
120 Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_HEAT_PARAMS, NodeTypeEnum.Resource, true, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoParams);
122 Either<ArtifactDefinition, ResponseFormat> eitherPlaceHolder = Either.left(getArtifactPlaceHolder(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL));
123 Mockito.when(artifactBusinessLogic.createArtifactPlaceHolderInfo(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL.toLowerCase(), placeHolderData, USER_ID, ArtifactGroupTypeEnum.DEPLOYMENT, false)).thenReturn(eitherPlaceHolder);
125 Mockito.when(artifactBusinessLogic.createArtifactAuditingFields(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString())).thenReturn(new EnumMap<AuditingFieldsKeysEnum, Object>(AuditingFieldsKeysEnum.class));
127 Either<ArtifactDefinition, StorageOperationStatus> eitherArtifact = Either.left(getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false));
128 Mockito.when(artifactBusinessLogic.addHeatEnvArtifact(Mockito.any(ArtifactDefinition.class), Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString())).thenReturn(eitherArtifact);
130 Either<User, ActionStatus> eitherUser = Either.left(adminUser);
131 Mockito.when(userAdminManager.getUser(USER_ID, false)).thenReturn(eitherUser);
133 Object lightService = new Service();
134 Either<Object, StorageOperationStatus> eitherLightService = Either.left(lightService);
135 Mockito.when(serviceOperation.getLightComponent(Mockito.anyString(), Mockito.anyBoolean())).thenReturn(eitherLightService);
137 Mockito.doNothing().when(componentsUtils).auditComponent(Mockito.any(ResponseFormat.class), Mockito.any(User.class), Mockito.any(Component.class), Mockito.anyString(), Mockito.anyString(), Mockito.any(AuditingActionEnum.class),
138 Mockito.any(ComponentTypeEnum.class), Mockito.any(EnumMap.class));
140 Either<ArtifactDefinition, ResponseFormat> heatEnvEither = Either.left(getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false));
142 Mockito.when(artifactBusinessLogic.createHeatEnvPlaceHolder(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString(), Mockito.any(User.class),
143 Mockito.any(Component.class), Mockito.anyObject())).thenReturn(heatEnvEither);
145 Either<List<GroupInstance>, StorageOperationStatus> groupInstanceEitherLeft = Either.left(new ArrayList<GroupInstance>());
146 Mockito.when(groupInstanceOperation.getAllGroupInstances(Mockito.anyString(), Mockito.any(NodeTypeEnum.class))).thenReturn(groupInstanceEitherLeft);
148 bl.setToscaOperationFacade(toscaOperationFacade);
150 StorageOperationStatus status = StorageOperationStatus.OK;
151 Mockito.when(toscaOperationFacade.addDeploymentArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any(Map.class))).thenReturn(status);
152 Mockito.when(toscaOperationFacade.addGroupInstancesToComponentInstance(Mockito.any(Component.class), Mockito.any(ComponentInstance.class), Mockito.any(List.class), Mockito.any(Map.class))).thenReturn(status);
157 public void initMocks() {
158 MockitoAnnotations.initMocks(this);
159 Mockito.reset(artifactBusinessLogic, serviceOperation, componentsUtils, userAdminManager);
164 public void testAddResourceInstanceArtifacts() throws Exception {
165 ComponentInstance resourceInstance = new ComponentInstance();
166 resourceInstance.setName(RESOURCE_INSTANCE_ID);
167 resourceInstance.setComponentUid(RESOURCE_ID_WITH_HEAT_PARAMS);
168 resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
169 Service service = new Service();
170 service.setUniqueId(SERVICE_ID);
172 Map<String, String> existingEnvVersions = new HashMap<>();
173 Resource originResource = new Resource();
174 originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
175 Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
176 assertTrue(addArtifactsRes.isLeft());
178 Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
179 assertNotNull(deploymentArtifacts);
180 // assertTrue(deploymentArtifacts.size() == 2);
182 ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
183 assertNotNull(heatDefinition);
184 // assertEquals(getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true), heatDefinition);
186 // ArtifactDefinition heatEnvDefinition = deploymentArtifacts.get(HEAT_ENV_LABEL.toLowerCase());
187 // assertNotNull(heatEnvDefinition);
189 // List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
190 // assertNotNull(heatParameters);
192 // List<HeatParameterDefinition> heatEnvParameters = heatEnvDefinition.getListHeatParameters();
193 // assertNotNull(heatEnvParameters);
195 // assertEquals(heatParameters.size(), heatEnvParameters.size());
198 // for (HeatParameterDefinition heatEnvParameter : heatEnvParameters) {
199 // HeatParameterDefinition heatParameterDefinition = heatParameters.get(index);
200 // assertEquals(heatEnvParameter.getUniqueId(), heatParameterDefinition.getUniqueId());
201 // assertEquals(heatEnvParameter.getType(), heatParameterDefinition.getType());
202 // assertEquals(heatEnvParameter.getName(), heatParameterDefinition.getName());
203 // assertEquals(heatEnvParameter.getDescription(), heatParameterDefinition.getDescription());
204 // assertEquals(heatEnvParameter.getCurrentValue(), heatParameterDefinition.getCurrentValue());
205 // // current of heat parameter should be the default for heat env
207 // assertEquals(heatEnvParameter.getDefaultValue(), heatParameterDefinition.getCurrentValue());
214 public void testAddResourceInstanceArtifactsNoParams() throws Exception {
215 ComponentInstance resourceInstance = new ComponentInstance();
216 resourceInstance.setName(RESOURCE_INSTANCE_ID);
217 resourceInstance.setComponentUid(RESOURCE_ID_NO_HEAT_PARAMS);
218 resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
219 Service service = new Service();
220 service.setUniqueId(SERVICE_ID);
221 Map<String, String> existingEnvVersions = new HashMap<>();
222 Resource originResource = new Resource();
223 originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
224 Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
225 assertTrue(addArtifactsRes.isLeft());
227 Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
228 assertNotNull(deploymentArtifacts);
229 // assertTrue(deploymentArtifacts.size() == 2);
231 ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
232 assertNotNull(heatDefinition);
233 // assertEquals(getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false), heatDefinition);
235 // ArtifactDefinition heatEnvDefinition = deploymentArtifacts.get(HEAT_ENV_LABEL.toLowerCase());
236 // assertNotNull(heatEnvDefinition);
238 List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
239 assertNull(heatParameters);
241 // List<HeatParameterDefinition> heatEnvParameters = heatEnvDefinition.getListHeatParameters();
242 // assertNull(heatEnvParameters);
246 @SuppressWarnings("unchecked")
248 public void testAddResourceInstanceArtifactsNoArtifacts() throws Exception {
249 ComponentInstance resourceInstance = new ComponentInstance();
250 resourceInstance.setName(RESOURCE_INSTANCE_ID);
251 resourceInstance.setComponentUid(RESOURCE_ID_NO_PAYLOAD);
252 resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
253 Service service = new Service();
254 service.setUniqueId(SERVICE_ID);
255 Map<String, String> existingEnvVersions = new HashMap<>();
256 Resource originResource = new Resource();
257 originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
259 Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
260 assertTrue(addArtifactsRes.isLeft());
262 Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
263 assertNotNull(deploymentArtifacts);
264 assertTrue(deploymentArtifacts.size() == 0);
266 Mockito.verify(artifactBusinessLogic, Mockito.times(0)).addHeatEnvArtifact(Mockito.any(ArtifactDefinition.class), Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString());
269 private static ArtifactDefinition getHeatArtifactDefinition(String userId, String resourceId, String artifactName, long time, boolean placeholderOnly, boolean withHeatParams) {
270 ArtifactDefinition artifactInfo = new ArtifactDefinition();
272 artifactInfo.setArtifactName(artifactName + ".yml");
273 artifactInfo.setArtifactType("HEAT");
274 artifactInfo.setDescription("hdkfhskdfgh");
275 artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
277 artifactInfo.setUserIdCreator(userId);
278 String fullName = "Jim H";
279 artifactInfo.setUpdaterFullName(fullName);
280 // long time = System.currentTimeMillis();
281 artifactInfo.setCreatorFullName(fullName);
282 artifactInfo.setCreationDate(time);
283 artifactInfo.setLastUpdateDate(time);
284 artifactInfo.setUserIdLastUpdater(userId);
285 artifactInfo.setArtifactLabel(HEAT_LABEL.toLowerCase());
286 artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, artifactInfo.getArtifactLabel()));
288 if (!placeholderOnly) {
289 artifactInfo.setEsId(artifactInfo.getUniqueId());
290 artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
292 if (withHeatParams) {
293 List<HeatParameterDefinition> heatParams = new ArrayList<HeatParameterDefinition>();
294 HeatParameterDefinition heatParam = new HeatParameterDefinition();
295 heatParam.setCurrentValue("11");
296 heatParam.setDefaultValue("22");
297 heatParam.setDescription("desc");
298 heatParam.setName("myParam");
299 heatParam.setType("number");
300 heatParams.add(heatParam);
301 artifactInfo.setListHeatParameters(heatParams);
308 private static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
309 ArtifactDefinition artifact = new ArtifactDefinition();
311 artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
312 artifact.setArtifactLabel(logicalName.toLowerCase());