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