re base code
[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.NodeTypeEnum;
32 import org.openecomp.sdc.be.impl.ComponentsUtils;
33 import org.openecomp.sdc.be.model.*;
34 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
35 import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
36 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
37 import org.openecomp.sdc.be.model.operations.impl.UniqueIdBuilder;
38 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
39 import org.openecomp.sdc.be.resources.data.auditing.model.ResourceCommonInfo;
40 import org.openecomp.sdc.be.resources.data.auditing.model.ResourceVersionInfo;
41 import org.openecomp.sdc.be.user.UserBusinessLogic;
42 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
43 import org.openecomp.sdc.common.api.ConfigurationSource;
44 import org.openecomp.sdc.common.impl.ExternalConfiguration;
45 import org.openecomp.sdc.common.impl.FSConfigurationSource;
46 import org.openecomp.sdc.exception.ResponseFormat;
47
48 import java.util.ArrayList;
49 import java.util.HashMap;
50 import java.util.List;
51 import java.util.Map;
52
53 import static org.junit.Assert.*;
54 import static org.junit.Assert.assertEquals;
55 import static org.junit.Assert.assertNull;
56 import static org.junit.Assert.assertTrue;
57
58 public class ResourceInstanceBusinessLogicTest {
59
60     private static final String RESOURCE_ID_WITH_HEAT_PARAMS = "MyResourceId";
61     private static final String RESOURCE_ID_NO_PAYLOAD = "NoHeatPayload";
62     private static final String RESOURCE_ID_NO_HEAT_PARAMS = "NoHeatParams";
63     private static final String RESOURCE_INSTANCE_ID = "MyResourceInstanceId";
64     private static final String SERVICE_ID = "MyServiceId";
65     private static final String HEAT_LABEL = "myHeat";
66     private static final String HEAT_ENV_LABEL = HEAT_LABEL + "Env";
67     private static final String USER_ID = "jh0003";
68     private static final long ARTIFACT_CREATION_TIME = System.currentTimeMillis();
69
70     static User adminUser = new User("John", "Doh", USER_ID, "", "ADMIN", null);
71
72     @InjectMocks
73     static ComponentInstanceBusinessLogic bl = new ComponentInstanceBusinessLogic();
74
75     public static final ArtifactsBusinessLogic artifactBusinessLogic = Mockito.mock(ArtifactsBusinessLogic.class);
76     public static final UserBusinessLogic userAdminManager = Mockito.mock(UserBusinessLogic.class);
77 //    public static final ServiceOperation serviceOperation = Mockito.mock(ServiceOperation.class);
78     public static final ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
79     public static final IGroupInstanceOperation groupInstanceOperation = Mockito.mock(IGroupInstanceOperation.class);
80     public static final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
81
82     static ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), "src/test/resources/config/catalog-be");
83     static ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
84
85     // @BeforeClass
86     public static void setup() {
87
88         Map<String, Object> deploymentResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getDeploymentResourceInstanceArtifacts();
89         Map<String, Object> placeHolderData = (Map<String, Object>) deploymentResourceArtifacts.get(ArtifactsBusinessLogic.HEAT_ENV_NAME);
90
91         ArtifactDefinition heatArtifact = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true);
92         Map<String, ArtifactDefinition> artifacts = new HashMap<>();
93         artifacts.put(HEAT_LABEL.toLowerCase(), heatArtifact);
94         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifact = Either.left(artifacts);
95         Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_WITH_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifact);
96
97         ArtifactDefinition heatArtifactNoPayload = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_PAYLOAD, HEAT_LABEL, ARTIFACT_CREATION_TIME, true, false);
98         Map<String, ArtifactDefinition> artifactsNoPayload = new HashMap<>();
99         artifactsNoPayload.put(HEAT_LABEL.toLowerCase(), heatArtifactNoPayload);
100         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoPayload = Either.left(artifactsNoPayload);
101         Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_PAYLOAD, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoPayload);
102
103         ArtifactDefinition heatArtifactNoParams = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false);
104         Map<String, ArtifactDefinition> artifactsNoParams = new HashMap<>();
105         artifactsNoParams.put(HEAT_LABEL.toLowerCase(), heatArtifactNoParams);
106         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoParams = Either.left(artifactsNoParams);
107         Mockito.when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoParams);
108
109         Either<ArtifactDefinition, ResponseFormat> eitherPlaceHolder = Either.left(getArtifactPlaceHolder(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL));
110         Mockito.when(artifactBusinessLogic.createArtifactPlaceHolderInfo(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL.toLowerCase(), placeHolderData, USER_ID, ArtifactGroupTypeEnum.DEPLOYMENT, false)).thenReturn(eitherPlaceHolder);
111
112      //   Mockito.when(artifactBusinessLogic.createArtifactAuditingFields(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString())).thenReturn(new EnumMap<AuditingFieldsKey, Object>(AuditingFieldsKey.class));
113
114         Either<ArtifactDefinition, StorageOperationStatus> eitherArtifact = Either.left(getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false));
115         Mockito.when(artifactBusinessLogic.addHeatEnvArtifact(Mockito.any(ArtifactDefinition.class), Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString())).thenReturn(eitherArtifact);
116
117         Either<User, ActionStatus> eitherUser = Either.left(adminUser);
118         Mockito.when(userAdminManager.getUser(USER_ID, false)).thenReturn(eitherUser);
119
120         Object lightService = new Service();
121         Either<Object, StorageOperationStatus> eitherLightService = Either.left(lightService);
122
123         Mockito.doNothing().when(componentsUtils).auditComponent(Mockito.any(ResponseFormat.class), Mockito.any(User.class), Mockito.any(Component.class), Mockito.any(AuditingActionEnum.class),
124                 Mockito.any(ResourceCommonInfo.class), Mockito.any(ResourceVersionInfo.class));
125
126         Either<ArtifactDefinition, ResponseFormat> heatEnvEither = Either.left(getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false));
127
128         Mockito.when(artifactBusinessLogic.createHeatEnvPlaceHolder(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString(), Mockito.any(User.class),
129                 Mockito.any(Component.class), Mockito.any())).thenReturn(heatEnvEither);
130
131         Either<List<GroupInstance>, StorageOperationStatus>  groupInstanceEitherLeft = Either.left(new ArrayList<>());
132         Mockito.when(groupInstanceOperation.getAllGroupInstances(Mockito.anyString(),  Mockito.any(NodeTypeEnum.class))).thenReturn(groupInstanceEitherLeft);
133
134         bl.setToscaOperationFacade(toscaOperationFacade);
135
136         StorageOperationStatus status = StorageOperationStatus.OK;
137         Mockito.when(toscaOperationFacade.addDeploymentArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any(Map.class))).thenReturn(status);
138         Mockito.when(toscaOperationFacade.addInformationalArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any())).thenReturn(status);
139         Mockito.when(toscaOperationFacade.addGroupInstancesToComponentInstance(Mockito.any(Component.class), Mockito.any(ComponentInstance.class), Mockito.any(), Mockito.any(Map.class))).thenReturn(status);
140
141     }
142
143     @Before
144     public void initMocks() {
145         MockitoAnnotations.initMocks(this);
146         setup();
147     }
148
149     @Test
150     public void testAddResourceInstanceArtifacts() throws Exception {
151         ComponentInstance resourceInstance = new ComponentInstance();
152         resourceInstance.setName(RESOURCE_INSTANCE_ID);
153         resourceInstance.setComponentUid(RESOURCE_ID_WITH_HEAT_PARAMS);
154         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
155         Service service = new Service();
156         service.setUniqueId(SERVICE_ID);
157
158         Map<String, String> existingEnvVersions = new HashMap<>();
159         Resource originResource = new Resource();
160         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
161         Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
162         assertTrue(addArtifactsRes.isLeft());
163
164         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
165         assertNotNull(deploymentArtifacts);
166
167         ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
168         assertNotNull(heatDefinition);
169     }
170
171      @Test
172     public void testAddResourceInstanceArtifactsNoParams() throws Exception {
173         ComponentInstance resourceInstance = new ComponentInstance();
174         resourceInstance.setName(RESOURCE_INSTANCE_ID);
175         resourceInstance.setComponentUid(RESOURCE_ID_NO_HEAT_PARAMS);
176         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
177         Service service = new Service();
178         service.setUniqueId(SERVICE_ID);
179         Map<String, String> existingEnvVersions = new HashMap<>();
180         Resource originResource = new Resource();
181         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
182         Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
183         assertTrue(addArtifactsRes.isLeft());
184
185         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
186         assertNotNull(deploymentArtifacts);
187
188         ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
189         assertNotNull(heatDefinition);
190
191         List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
192         assertNull(heatParameters);
193
194     }
195
196     @SuppressWarnings("unchecked")
197     @Test
198     public void testAddResourceInstanceArtifactsNoArtifacts() throws Exception {
199         ComponentInstance resourceInstance = new ComponentInstance();
200         resourceInstance.setName(RESOURCE_INSTANCE_ID);
201         resourceInstance.setComponentUid(RESOURCE_ID_NO_PAYLOAD);
202         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
203         Service service = new Service();
204         service.setUniqueId(SERVICE_ID);
205         Map<String, String> existingEnvVersions = new HashMap<>();
206         Resource originResource = new Resource();
207         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
208
209         Either<ActionStatus, ResponseFormat> addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
210         assertTrue(addArtifactsRes.isLeft());
211
212         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
213         assertNotNull(deploymentArtifacts);
214         assertEquals(0, deploymentArtifacts.size());
215
216         Mockito.verify(artifactBusinessLogic, Mockito.times(0)).addHeatEnvArtifact(Mockito.any(ArtifactDefinition.class), Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.any(NodeTypeEnum.class), Mockito.anyString());
217     }
218
219     private static ArtifactDefinition getHeatArtifactDefinition(String userId, String resourceId, String artifactName, long time, boolean placeholderOnly, boolean withHeatParams) {
220         ArtifactDefinition artifactInfo = new ArtifactDefinition();
221
222         artifactInfo.setArtifactName(artifactName + ".yml");
223         artifactInfo.setArtifactType("HEAT");
224         artifactInfo.setDescription("hdkfhskdfgh");
225         artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
226
227         artifactInfo.setUserIdCreator(userId);
228         String fullName = "Jim H";
229         artifactInfo.setUpdaterFullName(fullName);
230         artifactInfo.setCreatorFullName(fullName);
231         artifactInfo.setCreationDate(time);
232         artifactInfo.setLastUpdateDate(time);
233         artifactInfo.setUserIdLastUpdater(userId);
234         artifactInfo.setArtifactLabel(HEAT_LABEL.toLowerCase());
235         artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, artifactInfo.getArtifactLabel()));
236
237         if (!placeholderOnly) {
238             artifactInfo.setEsId(artifactInfo.getUniqueId());
239             artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
240
241             if (withHeatParams) {
242                 List<HeatParameterDefinition> heatParams = new ArrayList<>();
243                 HeatParameterDefinition heatParam = new HeatParameterDefinition();
244                 heatParam.setCurrentValue("11");
245                 heatParam.setDefaultValue("22");
246                 heatParam.setDescription("desc");
247                 heatParam.setName("myParam");
248                 heatParam.setType("number");
249                 heatParams.add(heatParam);
250                 artifactInfo.setListHeatParameters(heatParams);
251             }
252         }
253
254         return artifactInfo;
255     }
256
257     private static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
258         ArtifactDefinition artifact = new ArtifactDefinition();
259
260         artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
261         artifact.setArtifactLabel(logicalName.toLowerCase());
262
263         return artifact;
264     }
265 }