Improve testing stability
[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  * Modifications copyright (c) 2019 Nokia
20  * ================================================================================
21  */
22
23 package org.openecomp.sdc.be.components.impl;
24
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.exception.ResponseFormat;
57
58 import java.util.ArrayList;
59 import java.util.HashMap;
60 import java.util.List;
61 import java.util.Map;
62
63 import static org.junit.Assert.assertEquals;
64 import static org.junit.Assert.assertNotNull;
65 import static org.junit.Assert.assertNull;
66 import static org.junit.Assert.assertTrue;
67 import static org.mockito.ArgumentMatchers.any;
68 import static org.mockito.Mockito.when;
69
70 public class ResourceInstanceBusinessLogicTest extends BaseBusinessLogicMock {
71
72     private static final String RESOURCE_ID_WITH_HEAT_PARAMS = "MyResourceId";
73     private static final String RESOURCE_ID_NO_PAYLOAD = "NoHeatPayload";
74     private static final String RESOURCE_ID_NO_HEAT_PARAMS = "NoHeatParams";
75     private static final String RESOURCE_INSTANCE_ID = "MyResourceInstanceId";
76     private static final String SERVICE_ID = "MyServiceId";
77     private static final String HEAT_LABEL = "myHeat";
78     private static final String HEAT_ENV_LABEL = HEAT_LABEL + "Env";
79     private static final String USER_ID = "jh0003";
80     private static final long ARTIFACT_CREATION_TIME = System.currentTimeMillis();
81
82     private final ComponentInstanceOperation componentInstanceOperation = Mockito.mock(ComponentInstanceOperation.class);
83     private final ArtifactsBusinessLogic artifactBusinessLogic = Mockito.mock(ArtifactsBusinessLogic.class);
84     private final ComponentInstanceMergeDataBusinessLogic compInstMergeDataBL = Mockito.mock(ComponentInstanceMergeDataBusinessLogic.class);
85     private final ComponentInstanceChangeOperationOrchestrator onChangeInstanceOperationOrchestrator = Mockito.mock(ComponentInstanceChangeOperationOrchestrator.class);
86     private final ForwardingPathOperation forwardingPathOperation = Mockito.mock(ForwardingPathOperation.class);
87     private final NodeFilterOperation serviceFilterOperation = Mockito.mock(NodeFilterOperation.class);
88
89     private static final UserBusinessLogic userAdminManager = Mockito.mock(UserBusinessLogic.class);
90     public static final ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
91     public static final IGroupInstanceOperation groupInstanceOperation = Mockito.mock(IGroupInstanceOperation.class);
92     public static final ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
93
94     static User adminUser = new User("John", "Doh", USER_ID, "", "ADMIN", null);
95
96     private ComponentInstanceBusinessLogic bl = new ComponentInstanceBusinessLogic(elementDao, groupOperation, groupInstanceOperation,
97         groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation,
98         componentInstanceOperation, artifactBusinessLogic, compInstMergeDataBL, onChangeInstanceOperationOrchestrator,
99         forwardingPathOperation, serviceFilterOperation, artifactToscaOperation);
100
101     @Before
102     public void setUp() throws Exception {
103         MockitoAnnotations.openMocks(this);
104         Map<String, Object> deploymentResourceArtifacts = ConfigurationManager.getConfigurationManager().getConfiguration().getDeploymentResourceInstanceArtifacts();
105         Map<String, Object> placeHolderData = (Map<String, Object>) deploymentResourceArtifacts.get(ArtifactsBusinessLogic.HEAT_ENV_NAME);
106
107         ArtifactDefinition heatArtifact = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_WITH_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, true);
108         Map<String, ArtifactDefinition> artifacts = new HashMap<>();
109         artifacts.put(HEAT_LABEL.toLowerCase(), heatArtifact);
110         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifact = Either.left(artifacts);
111         when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_WITH_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifact);
112
113         ArtifactDefinition heatArtifactNoPayload = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_PAYLOAD, HEAT_LABEL, ARTIFACT_CREATION_TIME, true, false);
114         Map<String, ArtifactDefinition> artifactsNoPayload = new HashMap<>();
115         artifactsNoPayload.put(HEAT_LABEL.toLowerCase(), heatArtifactNoPayload);
116         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoPayload = Either.left(artifactsNoPayload);
117         when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_PAYLOAD, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoPayload);
118
119         ArtifactDefinition heatArtifactNoParams = getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false);
120         Map<String, ArtifactDefinition> artifactsNoParams = new HashMap<>();
121         artifactsNoParams.put(HEAT_LABEL.toLowerCase(), heatArtifactNoParams);
122         Either<Map<String, ArtifactDefinition>, StorageOperationStatus> eitherGetResourceArtifactNoParams = Either.left(artifactsNoParams);
123         when(artifactBusinessLogic.getArtifacts(RESOURCE_ID_NO_HEAT_PARAMS, NodeTypeEnum.Resource, ArtifactGroupTypeEnum.DEPLOYMENT, null)).thenReturn(eitherGetResourceArtifactNoParams);
124
125         ArtifactDefinition eitherPlaceHolder = getArtifactPlaceHolder(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL);
126         when(artifactBusinessLogic.createArtifactPlaceHolderInfo(RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL.toLowerCase(), placeHolderData, USER_ID, ArtifactGroupTypeEnum.DEPLOYMENT, false)).thenReturn(eitherPlaceHolder);
127
128         //   Mockito.when(artifactBusinessLogic.createArtifactAuditingFields(Mockito.any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString())).thenReturn(new EnumMap<AuditingFieldsKey, Object>(AuditingFieldsKey.class));
129
130         when(userAdminManager.getUser(USER_ID, false)).thenReturn(adminUser);
131
132         Mockito.doNothing().when(componentsUtils).auditComponent(any(ResponseFormat.class), any(User.class), any(Component.class), any(AuditingActionEnum.class),
133                 any(ResourceCommonInfo.class), any(ResourceVersionInfo.class));
134
135         ArtifactDefinition heatEnvEither = getHeatArtifactDefinition(USER_ID, RESOURCE_INSTANCE_ID, HEAT_ENV_LABEL, ARTIFACT_CREATION_TIME, true, false);
136
137         when(artifactBusinessLogic.createHeatEnvPlaceHolder(any(ArrayList.class),any(ArtifactDefinition.class), Mockito.anyString(), Mockito.anyString(), any(NodeTypeEnum.class), Mockito.anyString(), any(User.class),
138                 any(Component.class), any())).thenReturn(heatEnvEither);
139
140         Either<List<GroupInstance>, StorageOperationStatus>  groupInstanceEitherLeft = Either.left(new ArrayList<>());
141         when(groupInstanceOperation.getAllGroupInstances(Mockito.anyString(),  any(NodeTypeEnum.class))).thenReturn(groupInstanceEitherLeft);
142
143         bl.setToscaOperationFacade(toscaOperationFacade);
144
145         StorageOperationStatus status = StorageOperationStatus.OK;
146         Mockito.when(toscaOperationFacade.addDeploymentArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any(Map.class))).thenReturn(status);
147         Mockito.when(toscaOperationFacade.addInformationalArtifactsToInstance(Mockito.any(String.class), Mockito.any(ComponentInstance.class), Mockito.any())).thenReturn(status);
148         Mockito.when(toscaOperationFacade.addGroupInstancesToComponentInstance(Mockito.any(Component.class), Mockito.any(ComponentInstance.class), Mockito.any(), Mockito.any(Map.class))).thenReturn(status);
149     }
150
151     @Test
152     public void testAddResourceInstanceArtifacts() throws Exception {
153         ComponentInstance resourceInstance = new ComponentInstance();
154         resourceInstance.setName(RESOURCE_INSTANCE_ID);
155         resourceInstance.setComponentUid(RESOURCE_ID_WITH_HEAT_PARAMS);
156         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
157         Service service = new Service();
158         service.setUniqueId(SERVICE_ID);
159
160         Map<String, String> existingEnvVersions = new HashMap<>();
161         Resource originResource = new Resource();
162         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
163         ActionStatus addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
164         assertTrue(addArtifactsRes.equals(ActionStatus.OK));
165
166         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
167         assertNotNull(deploymentArtifacts);
168 //        assertTrue(deploymentArtifacts.size() == 2);
169
170         ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
171         assertNotNull(heatDefinition);
172     }
173
174      @Test
175     public void testAddResourceInstanceArtifactsNoParams() throws Exception {
176         ComponentInstance resourceInstance = new ComponentInstance();
177         resourceInstance.setName(RESOURCE_INSTANCE_ID);
178         resourceInstance.setComponentUid(RESOURCE_ID_NO_HEAT_PARAMS);
179         resourceInstance.setUniqueId(RESOURCE_INSTANCE_ID);
180         Service service = new Service();
181         service.setUniqueId(SERVICE_ID);
182         Map<String, String> existingEnvVersions = new HashMap<>();
183         Resource originResource = new Resource();
184         originResource.setUniqueId(RESOURCE_ID_NO_PAYLOAD);
185         ActionStatus addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
186         assertTrue(addArtifactsRes.equals(ActionStatus.OK));
187
188         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
189         assertNotNull(deploymentArtifacts);
190 //        assertTrue(deploymentArtifacts.size() == 2);
191
192         ArtifactDefinition heatDefinition = deploymentArtifacts.get(HEAT_LABEL.toLowerCase());
193         assertNotNull(heatDefinition);
194 //        assertEquals(getHeatArtifactDefinition(USER_ID, RESOURCE_ID_NO_HEAT_PARAMS, HEAT_LABEL, ARTIFACT_CREATION_TIME, false, false), heatDefinition);
195
196 //        ArtifactDefinition heatEnvDefinition = deploymentArtifacts.get(HEAT_ENV_LABEL.toLowerCase());
197 //        assertNotNull(heatEnvDefinition);
198
199         List<HeatParameterDefinition> heatParameters = heatDefinition.getListHeatParameters();
200         assertNull(heatParameters);
201
202 //        List<HeatParameterDefinition> heatEnvParameters = heatEnvDefinition.getListHeatParameters();
203 //        assertNull(heatEnvParameters);
204
205     }
206
207     @SuppressWarnings("unchecked")
208     @Test
209     public void testAddResourceInstanceArtifactsNoArtifacts() throws Exception {
210         ComponentInstance resourceInstance = new ComponentInstance();
211         resourceInstance.setName(RESOURCE_INSTANCE_ID);
212         resourceInstance.setComponentUid(RESOURCE_ID_NO_PAYLOAD);
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
220         ActionStatus addArtifactsRes = bl.addComponentInstanceArtifacts(service, resourceInstance, originResource, adminUser, existingEnvVersions);
221         assertTrue(addArtifactsRes.equals(ActionStatus.OK));
222
223         Map<String, ArtifactDefinition> deploymentArtifacts = resourceInstance.getDeploymentArtifacts();
224         assertNotNull(deploymentArtifacts);
225         assertEquals(0, deploymentArtifacts.size());
226
227         Mockito.verify(artifactBusinessLogic, Mockito.times(0)).addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class), any(Service.class), any(NodeTypeEnum.class), Mockito.anyString());
228     }
229
230     private static ArtifactDefinition getHeatArtifactDefinition(String userId, String resourceId, String artifactName, long time, boolean placeholderOnly, boolean withHeatParams) {
231         ArtifactDefinition artifactInfo = new ArtifactDefinition();
232
233         artifactInfo.setArtifactName(artifactName + ".yml");
234         artifactInfo.setArtifactType("HEAT");
235         artifactInfo.setDescription("hdkfhskdfgh");
236         artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
237
238         artifactInfo.setUserIdCreator(userId);
239         String fullName = "Jim H";
240         artifactInfo.setUpdaterFullName(fullName);
241         // long time = System.currentTimeMillis();
242         artifactInfo.setCreatorFullName(fullName);
243         artifactInfo.setCreationDate(time);
244         artifactInfo.setLastUpdateDate(time);
245         artifactInfo.setUserIdLastUpdater(userId);
246         artifactInfo.setArtifactLabel(HEAT_LABEL.toLowerCase());
247         artifactInfo.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, artifactInfo.getArtifactLabel()));
248
249         if (!placeholderOnly) {
250             artifactInfo.setEsId(artifactInfo.getUniqueId());
251             artifactInfo.setArtifactChecksum("UEsDBAoAAAAIAAeLb0bDQz");
252
253             if (withHeatParams) {
254                 List<HeatParameterDefinition> heatParams = new ArrayList<>();
255                 HeatParameterDefinition heatParam = new HeatParameterDefinition();
256                 heatParam.setCurrentValue("11");
257                 heatParam.setDefaultValue("22");
258                 heatParam.setDescription("desc");
259                 heatParam.setName("myParam");
260                 heatParam.setType("number");
261                 heatParams.add(heatParam);
262                 artifactInfo.setListHeatParameters(heatParams);
263             }
264         }
265
266         return artifactInfo;
267     }
268
269     private static ArtifactDefinition getArtifactPlaceHolder(String resourceId, String logicalName) {
270         ArtifactDefinition artifact = new ArtifactDefinition();
271
272         artifact.setUniqueId(UniqueIdBuilder.buildPropertyUniqueId(resourceId, logicalName.toLowerCase()));
273         artifact.setArtifactLabel(logicalName.toLowerCase());
274
275         return artifact;
276     }
277 }