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=========================================================
19 * Modifications copyright (c) 2019 Nokia
20 * ================================================================================
23 package org.openecomp.sdc.be.components.impl;
25 import fj.data.Either;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.Mockito;
29 import org.mockito.MockitoAnnotations;
30 import org.openecomp.sdc.be.components.impl.instance.ComponentInstanceChangeOperationOrchestrator;
31 import org.openecomp.sdc.be.components.merge.instance.ComponentInstanceMergeDataBusinessLogic;
32 import org.openecomp.sdc.be.config.ConfigurationManager;
33 import org.openecomp.sdc.be.dao.api.ActionStatus;
34 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
35 import org.openecomp.sdc.be.impl.ComponentsUtils;
36 import org.openecomp.sdc.be.model.ArtifactDefinition;
37 import org.openecomp.sdc.be.model.Component;
38 import org.openecomp.sdc.be.model.ComponentInstance;
39 import org.openecomp.sdc.be.model.GroupInstance;
40 import org.openecomp.sdc.be.model.HeatParameterDefinition;
41 import org.openecomp.sdc.be.model.Resource;
42 import org.openecomp.sdc.be.model.Service;
43 import org.openecomp.sdc.be.model.User;
44 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ForwardingPathOperation;
45 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeFilterOperation;
46 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
47 import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
48 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
49 import org.openecomp.sdc.be.model.operations.impl.ComponentInstanceOperation;
50 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
51 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
52 import org.openecomp.sdc.be.resources.data.auditing.model.ResourceCommonInfo;
53 import org.openecomp.sdc.be.resources.data.auditing.model.ResourceVersionInfo;
54 import org.openecomp.sdc.be.user.UserBusinessLogic;
55 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
56 import org.openecomp.sdc.common.api.ConfigurationSource;
57 import org.openecomp.sdc.common.impl.ExternalConfiguration;
58 import org.openecomp.sdc.common.impl.FSConfigurationSource;
59 import org.openecomp.sdc.exception.ResponseFormat;
61 import java.util.ArrayList;
62 import java.util.HashMap;
63 import java.util.List;
66 import static org.junit.Assert.assertEquals;
67 import static org.junit.Assert.assertNotNull;
68 import static org.junit.Assert.assertNull;
69 import static org.junit.Assert.assertTrue;
70 import static org.mockito.ArgumentMatchers.any;
71 import static org.mockito.Mockito.when;
73 public class ResourceInstanceBusinessLogicTest extends BaseBusinessLogicMock {
75 private static final String RESOURCE_ID_WITH_HEAT_PARAMS = "MyResourceId";
76 private static final String RESOURCE_ID_NO_PAYLOAD = "NoHeatPayload";
77 private static final String RESOURCE_ID_NO_HEAT_PARAMS = "NoHeatParams";
78 private static final String RESOURCE_INSTANCE_ID = "MyResourceInstanceId";
79 private static final String SERVICE_ID = "MyServiceId";
80 private static final String HEAT_LABEL = "myHeat";
81 private static final String HEAT_ENV_LABEL = HEAT_LABEL + "Env";
82 private static final String USER_ID = "jh0003";
83 private static final long ARTIFACT_CREATION_TIME = System.currentTimeMillis();
85 private final ComponentInstanceOperation componentInstanceOperation = Mockito.mock(ComponentInstanceOperation.class);
86 private final ArtifactsBusinessLogic artifactBusinessLogic = Mockito.mock(ArtifactsBusinessLogic.class);
87 private final ComponentInstanceMergeDataBusinessLogic compInstMergeDataBL = Mockito.mock(ComponentInstanceMergeDataBusinessLogic.class);
88 private final ComponentInstanceChangeOperationOrchestrator onChangeInstanceOperationOrchestrator = Mockito.mock(ComponentInstanceChangeOperationOrchestrator.class);
89 private final ForwardingPathOperation forwardingPathOperation = Mockito.mock(ForwardingPathOperation.class);
90 private final NodeFilterOperation serviceFilterOperation = Mockito.mock(NodeFilterOperation.class);
92 private static final UserBusinessLogic userAdminManager = Mockito.mock(UserBusinessLogic.class);
93 public static final ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
94 public static final IGroupInstanceOperation groupInstanceOperation = Mockito.mock(IGroupInstanceOperation.class);
95 public static final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
97 static User adminUser = new User("John", "Doh", USER_ID, "", "ADMIN", null);
99 private ComponentInstanceBusinessLogic bl = new ComponentInstanceBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
100 groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation,
101 componentInstanceOperation, artifactBusinessLogic, compInstMergeDataBL, onChangeInstanceOperationOrchestrator,
102 forwardingPathOperation, serviceFilterOperation, artifactToscaOperation);
104 static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
106 public void setUp() throws Exception {
107 MockitoAnnotations.initMocks(this);
108 Map<String, Object> deploymentResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getDeploymentResourceInstanceArtifacts();
109 Map<String, Object> placeHolderData = (Map<String, Object>) deploymentResourceArtifacts.get(ArtifactsBusinessLogic.HEAT_ENV_NAME);
111 ArtifactDefinition heatArtifact = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true);
112 Map<String, ArtifactDefinition> artifacts = new HashMap<>();
113 artifacts.put(HEAT_LABEL.toLowerCase(), heatArtifact);
114 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifact = Either.left(artifacts);
115 when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_WITH_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifact);
117 ArtifactDefinition heatArtifactNoPayload = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_PAYLOAD, HEAT_LABEL, ARTIFACT_CREATION_TIME, true, false);
118 Map<String, ArtifactDefinition> artifactsNoPayload = new HashMap<>();
119 artifactsNoPayload.put(HEAT_LABEL.toLowerCase(), heatArtifactNoPayload);
120 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoPayload = Either.left(artifactsNoPayload);
121 when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_PAYLOAD, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoPayload);
123 ArtifactDefinition heatArtifactNoParams = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false);
124 Map<String, ArtifactDefinition> artifactsNoParams = new HashMap<>();
125 artifactsNoParams.put(HEAT_LABEL.toLowerCase(), heatArtifactNoParams);
126 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoParams = Either.left(artifactsNoParams);
127 when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoParams);
129 ArtifactDefinition eitherPlaceHolder = getArtifactPlaceHolder(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL);
130 when(artifactBusinessLogic.createArtifactPlaceHolderInfo(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL.toLowerCase(), placeHolderData, USER_ID, ArtifactGroupTypeEnum.DEPLOYMENT, false)).thenReturn(eitherPlaceHolder);
132 // Mockito.when(artifactBusinessLogic.createArtifactAuditingFields(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString())).thenReturn(new EnumMap<AuditingFieldsKey, Object>(AuditingFieldsKey.class));
134 when(userAdminManager.getUser(USER_ID, false)).thenReturn(adminUser);
136 Mockito.doNothing().when(componentsUtils).auditComponent(any(ResponseFormat.class), any(User.class), any(Component.class), any(AuditingActionEnum.class),
137 any(ResourceCommonInfo.class), any(ResourceVersionInfo.class));
139 ArtifactDefinition heatEnvEither = getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false);
141 when(artifactBusinessLogic.createHeatEnvPlaceHolder(any(ArrayList.class),any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString(), any(NodeTypeEnum.class), Mockito.anyString(), any(User.class),
142 any(Component.class), any())).thenReturn(heatEnvEither);
144 Either<List<GroupInstance>, StorageOperationStatus> groupInstanceEitherLeft = Either.left(new ArrayList<>());
145 when(groupInstanceOperation.getAllGroupInstances(Mockito.anyString(), any(NodeTypeEnum.class))).thenReturn(groupInstanceEitherLeft);
147 bl.setToscaOperationFacade(toscaOperationFacade);
149 StorageOperationStatus status = StorageOperationStatus.OK;
150 Mockito.when(toscaOperationFacade.addDeploymentArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any(Map.class))).thenReturn(status);
151 Mockito.when(toscaOperationFacade.addInformationalArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any())).thenReturn(status);
152 Mockito.when(toscaOperationFacade.addGroupInstancesToComponentInstance(Mockito.any(Component.class), Mockito.any(ComponentInstance.class), Mockito.any(), Mockito.any(Map.class))).thenReturn(status);
156 public void testAddResourceInstanceArtifacts() throws Exception {
157 ComponentInstance resourceInstance = new ComponentInstance();
158 resourceInstance.setName(RESOURCE_INSTANCE_ID);
159 resourceInstance.setComponentUid(RESOURCE_ID_WITH_HEAT_PARAMS);
160 resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
161 Service service = new Service();
162 service.setUniqueId(SERVICE_ID);
164 Map<String, String> existingEnvVersions = new HashMap<>();
165 Resource originResource = new Resource();
166 originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
167 ActionStatus addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
168 assertTrue(addArtifactsRes.equals(ActionStatus.OK));
170 Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
171 assertNotNull(deploymentArtifacts);
172 // assertTrue(deploymentArtifacts.size() == 2);
174 ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
175 assertNotNull(heatDefinition);
179 public void testAddResourceInstanceArtifactsNoParams() throws Exception {
180 ComponentInstance resourceInstance = new ComponentInstance();
181 resourceInstance.setName(RESOURCE_INSTANCE_ID);
182 resourceInstance.setComponentUid(RESOURCE_ID_NO_HEAT_PARAMS);
183 resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
184 Service service = new Service();
185 service.setUniqueId(SERVICE_ID);
186 Map<String, String> existingEnvVersions = new HashMap<>();
187 Resource originResource = new Resource();
188 originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
189 ActionStatus addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
190 assertTrue(addArtifactsRes.equals(ActionStatus.OK));
192 Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
193 assertNotNull(deploymentArtifacts);
194 // assertTrue(deploymentArtifacts.size() == 2);
196 ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
197 assertNotNull(heatDefinition);
198 // assertEquals(getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false), heatDefinition);
200 // ArtifactDefinition heatEnvDefinition = deploymentArtifacts.get(HEAT_ENV_LABEL.toLowerCase());
201 // assertNotNull(heatEnvDefinition);
203 List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
204 assertNull(heatParameters);
206 // List<HeatParameterDefinition> heatEnvParameters = heatEnvDefinition.getListHeatParameters();
207 // assertNull(heatEnvParameters);
211 @SuppressWarnings("unchecked")
213 public void testAddResourceInstanceArtifactsNoArtifacts() throws Exception {
214 ComponentInstance resourceInstance = new ComponentInstance();
215 resourceInstance.setName(RESOURCE_INSTANCE_ID);
216 resourceInstance.setComponentUid(RESOURCE_ID_NO_PAYLOAD);
217 resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
218 Service service = new Service();
219 service.setUniqueId(SERVICE_ID);
220 Map<String, String> existingEnvVersions = new HashMap<>();
221 Resource originResource = new Resource();
222 originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
224 ActionStatus addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
225 assertTrue(addArtifactsRes.equals(ActionStatus.OK));
227 Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
228 assertNotNull(deploymentArtifacts);
229 assertEquals(0, deploymentArtifacts.size());
231 Mockito.verify(artifactBusinessLogic, Mockito.times(0)).addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class), any(Service.class), any(NodeTypeEnum.class), Mockito.anyString());
234 private static ArtifactDefinition getHeatArtifactDefinition(String userId, String resourceId, String artifactName, long time, boolean placeholderOnly, boolean withHeatParams) {
235 ArtifactDefinition artifactInfo = new ArtifactDefinition();
237 artifactInfo.setArtifactName(artifactName + ".yml");
238 artifactInfo.setArtifactType("HEAT");
239 artifactInfo.setDescription("hdkfhskdfgh");
240 artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
242 artifactInfo.setUserIdCreator(userId);
243 String fullName = "Jim H";
244 artifactInfo.setUpdaterFullName(fullName);
245 // long time = System.currentTimeMillis();
246 artifactInfo.setCreatorFullName(fullName);
247 artifactInfo.setCreationDate(time);
248 artifactInfo.setLastUpdateDate(time);
249 artifactInfo.setUserIdLastUpdater(userId);
250 artifactInfo.setArtifactLabel(HEAT_LABEL.toLowerCase());
251 artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, artifactInfo.getArtifactLabel()));
253 if (!placeholderOnly) {
254 artifactInfo.setEsId(artifactInfo.getUniqueId());
255 artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
257 if (withHeatParams) {
258 List<HeatParameterDefinition> heatParams = new ArrayList<>();
259 HeatParameterDefinition heatParam = new HeatParameterDefinition();
260 heatParam.setCurrentValue("11");
261 heatParam.setDefaultValue("22");
262 heatParam.setDescription("desc");
263 heatParam.setName("myParam");
264 heatParam.setType("number");
265 heatParams.add(heatParam);
266 artifactInfo.setListHeatParameters(heatParams);
273 private static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
274 ArtifactDefinition artifact = new ArtifactDefinition();
276 artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
277 artifact.setArtifactLabel(logicalName.toLowerCase());