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 static org.assertj.core.api.Assertions.assertThat;
26 import static org.assertj.core.api.Assertions.assertThatCode;
27 import static org.assertj.core.api.AssertionsForClassTypes.assertThatThrownBy;
28 import static org.junit.Assert.assertArrayEquals;
29 import static org.junit.Assert.assertEquals;
30 import static org.junit.Assert.assertNotEquals;
31 import static org.junit.Assert.assertNotNull;
32 import static org.junit.Assert.assertNull;
33 import static org.junit.Assert.assertTrue;
34 import static org.junit.Assert.fail;
35 import static org.mockito.ArgumentMatchers.any;
36 import static org.mockito.ArgumentMatchers.anyBoolean;
37 import static org.mockito.ArgumentMatchers.anyList;
38 import static org.mockito.ArgumentMatchers.anyString;
39 import static org.mockito.ArgumentMatchers.eq;
40 import static org.mockito.Mockito.doReturn;
41 import static org.mockito.Mockito.times;
42 import static org.mockito.Mockito.verify;
43 import static org.mockito.Mockito.when;
44 import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.HEAT_ENV_NAME;
45 import static org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.HEAT_VF_ENV_NAME;
47 import com.fasterxml.jackson.annotation.JsonInclude;
48 import com.fasterxml.jackson.databind.DeserializationFeature;
49 import com.fasterxml.jackson.databind.ObjectMapper;
50 import com.fasterxml.jackson.databind.SerializationFeature;
51 import com.google.gson.Gson;
52 import com.google.gson.GsonBuilder;
53 import com.google.gson.JsonElement;
54 import fj.data.Either;
55 import java.io.IOException;
56 import java.util.ArrayList;
57 import java.util.Arrays;
58 import java.util.Collections;
59 import java.util.HashMap;
60 import java.util.List;
62 import java.util.Optional;
63 import java.util.stream.Collectors;
64 import mockit.Deencapsulation;
65 import org.apache.commons.codec.binary.Base64;
66 import org.apache.commons.collections.CollectionUtils;
67 import org.apache.commons.collections.MapUtils;
68 import org.apache.commons.lang3.tuple.ImmutablePair;
69 import org.junit.Assert;
70 import org.junit.Before;
71 import org.junit.Test;
72 import org.junit.runner.RunWith;
73 import org.mockito.InjectMocks;
74 import org.mockito.Mock;
75 import org.mockito.Mockito;
76 import org.mockito.MockitoAnnotations;
77 import org.mockito.junit.MockitoJUnitRunner;
78 import org.openecomp.sdc.be.MockGenerator;
79 import org.openecomp.sdc.be.components.ArtifactsResolver;
80 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.ArtifactOperationEnum;
81 import org.openecomp.sdc.be.components.impl.artifact.ArtifactOperationInfo;
82 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
83 import org.openecomp.sdc.be.components.impl.exceptions.ComponentException;
84 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
85 import org.openecomp.sdc.be.components.utils.ArtifactBuilder;
86 import org.openecomp.sdc.be.components.utils.ObjectGenerator;
87 import org.openecomp.sdc.be.components.validation.UserValidations;
88 import org.openecomp.sdc.be.config.ArtifactConfigManager;
89 import org.openecomp.sdc.be.config.ArtifactConfiguration;
90 import org.openecomp.sdc.be.config.ComponentType;
91 import org.openecomp.sdc.be.config.Configuration.ArtifactTypeConfig;
92 import org.openecomp.sdc.be.config.ConfigurationManager;
93 import org.openecomp.sdc.be.dao.api.ActionStatus;
94 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
95 import org.openecomp.sdc.be.dao.cassandra.CassandraOperationStatus;
96 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
97 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphDao;
98 import org.openecomp.sdc.be.dao.jsongraph.types.JsonParseFlagEnum;
99 import org.openecomp.sdc.be.datatypes.components.ResourceMetadataDataDefinition;
100 import org.openecomp.sdc.be.datatypes.elements.ArtifactDataDefinition;
101 import org.openecomp.sdc.be.datatypes.elements.GroupDataDefinition;
102 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
103 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
104 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
105 import org.openecomp.sdc.be.impl.ComponentsUtils;
106 import org.openecomp.sdc.be.info.ArtifactTemplateInfo;
107 import org.openecomp.sdc.be.model.ArtifactDefinition;
108 import org.openecomp.sdc.be.model.ArtifactType;
109 import org.openecomp.sdc.be.model.Component;
110 import org.openecomp.sdc.be.model.ComponentInstance;
111 import org.openecomp.sdc.be.model.ComponentParametersView;
112 import org.openecomp.sdc.be.model.DataTypeDefinition;
113 import org.openecomp.sdc.be.model.GroupDefinition;
114 import org.openecomp.sdc.be.model.GroupInstance;
115 import org.openecomp.sdc.be.model.HeatParameterDefinition;
116 import org.openecomp.sdc.be.model.InterfaceDefinition;
117 import org.openecomp.sdc.be.model.LifecycleStateEnum;
118 import org.openecomp.sdc.be.model.Operation;
119 import org.openecomp.sdc.be.model.Resource;
120 import org.openecomp.sdc.be.model.ResourceMetadataDefinition;
121 import org.openecomp.sdc.be.model.Service;
122 import org.openecomp.sdc.be.model.User;
123 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
124 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeTemplateOperation;
125 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
126 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
127 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
128 import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation;
129 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
130 import org.openecomp.sdc.be.model.operations.impl.ArtifactOperation;
131 import org.openecomp.sdc.be.model.operations.impl.ArtifactTypeOperation;
132 import org.openecomp.sdc.be.model.operations.impl.UserAdminOperation;
133 import org.openecomp.sdc.be.resources.data.DAOArtifactData;
134 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
135 import org.openecomp.sdc.be.servlets.RepresentationUtils;
136 import org.openecomp.sdc.be.tosca.CsarUtils;
137 import org.openecomp.sdc.be.tosca.ToscaExportHandler;
138 import org.openecomp.sdc.be.user.Role;
139 import org.openecomp.sdc.be.user.UserBusinessLogic;
140 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
141 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
142 import org.openecomp.sdc.common.datastructure.Wrapper;
143 import org.openecomp.sdc.common.util.GeneralUtility;
144 import org.openecomp.sdc.exception.ResponseFormat;
146 @RunWith(MockitoJUnitRunner.Silent.class)
147 public class ArtifactsBusinessLogicTest extends BaseBusinessLogicMock {
149 private static final User USER = new User("John", "Doh", "jh0003", "jh0003@gmail.com", "ADMIN",
150 System.currentTimeMillis());
151 private static final String RESOURCE_INSTANCE_NAME = "Service-111";
152 private static final String INSTANCE_ID = "S-123-444-ghghghg";
153 private static final String ARTIFACT_NAME = "service-Myservice-template.yml";
154 private static final String ARTIFACT_LABEL = "assettoscatemplate";
155 private static final String ES_ARTIFACT_ID = "123123dfgdfgd0";
156 private static final byte[] PAYLOAD = "some payload".getBytes();
157 private static final String RESOURCE_NAME = "My-Resource_Name with space";
158 private static final String RESOURCE_CATEGORY1 = "Network Layer 2-3";
159 private static final String RESOURCE_SUBCATEGORY = "Router";
160 private static final String ARTIFACT_PLACEHOLDER_FILE_EXTENSION = "fileExtension";
161 public static final Resource resource = Mockito.mock(Resource.class);
164 private ArtifactsBusinessLogic artifactBL;
165 private static User user = null;
166 private static Resource resourceResponse = null;
167 final ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
169 public ComponentsUtils componentsUtils;
171 public ToscaOperationFacade toscaOperationFacade;
172 JanusGraphDao mockJanusGraphDao = Mockito.mock(JanusGraphDao.class);
174 JanusGraphDao janusGraphDao;
176 private UserBusinessLogic userBusinessLogic;
178 private ArtifactOperation artifactOperation;
180 private IInterfaceLifecycleOperation lifecycleOperation;
182 private UserAdminOperation userOperation;
184 private IElementOperation elementOperation;
186 private ArtifactCassandraDao artifactCassandraDao;
188 private NodeTemplateOperation nodeTemplateOperation;
190 private IGraphLockOperation graphLockOperation;
192 private UserValidations userValidations;
194 private ArtifactsResolver artifactsResolver;
196 private CsarUtils csarUtils;
198 private ToscaExportHandler toscaExportHandler;
200 private LifecycleBusinessLogic lifecycleBusinessLogic;
202 private ArtifactTypeOperation artifactTypeOperation;
204 private Gson gson = new GsonBuilder().setPrettyPrinting().create();
206 private static List<ArtifactType> getAllTypes() {
207 final List<ArtifactConfiguration> artifactConfigurationList = ConfigurationManager.getConfigurationManager()
208 .getConfiguration().getArtifacts();
209 return artifactConfigurationList.stream().map(artifactConfiguration -> {
210 final ArtifactType artifactType = new ArtifactType();
211 artifactType.setName(artifactConfiguration.getType());
213 }).collect(Collectors.toList());
217 public void initMocks() {
218 MockitoAnnotations.initMocks(this);
219 Either<ArtifactDefinition, StorageOperationStatus> NotFoundResult = Either
220 .right(StorageOperationStatus.NOT_FOUND);
222 Either<Map<String, ArtifactDefinition>, StorageOperationStatus> NotFoundResult2 = Either
223 .right(StorageOperationStatus.NOT_FOUND);
224 when(artifactOperation.getArtifacts(Mockito.anyString(), eq(NodeTypeEnum.Service), Mockito.anyBoolean()))
225 .thenReturn(NotFoundResult2);
226 when(artifactOperation.getArtifacts(Mockito.anyString(), eq(NodeTypeEnum.Resource), Mockito.anyBoolean()))
227 .thenReturn(NotFoundResult2);
229 Either<Map<String, InterfaceDefinition>, StorageOperationStatus> notFoundInterfaces = Either
230 .right(StorageOperationStatus.NOT_FOUND);
231 when(lifecycleOperation.getAllInterfacesOfResource(Mockito.anyString(), Mockito.anyBoolean()))
232 .thenReturn(notFoundInterfaces);
234 when(userOperation.getUserData("jh0003", false)).thenReturn(Either.left(USER));
236 when(elementOperation.getAllArtifactTypes()).thenReturn(getAllTypes());
238 when(resource.getResourceType()).thenReturn(ResourceTypeEnum.VFC);
240 // User data and management
242 user.setUserId("jh0003");
243 user.setFirstName("Jimmi");
244 user.setLastName("Hendrix");
245 user.setRole(Role.ADMIN.name());
248 resourceResponse = createResourceObject(true);
249 Either<Resource, StorageOperationStatus> eitherCreate = Either.left(resourceResponse);
250 when(toscaOperationFacade.createToscaComponent(any(Resource.class))).thenReturn(eitherCreate);
251 when(toscaOperationFacade.validateCsarUuidUniqueness(Mockito.anyString())).thenReturn(StorageOperationStatus.OK);
252 Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<String, DataTypeDefinition>();
253 when(applicationDataTypeCache.getAll(null)).thenReturn(Either.left(emptyDataTypes));
254 when(mockJanusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
256 Either<Component, StorageOperationStatus> resourceStorageOperationStatusEither = Either
257 .right(StorageOperationStatus.BAD_REQUEST);
258 when(toscaOperationFacade.getToscaElement(resourceResponse.getUniqueId()))
259 .thenReturn(resourceStorageOperationStatusEither);
263 public void testValidJson() {
264 ArtifactDefinition ad = createArtifactDef();
266 String jsonArtifact = "";
268 ObjectMapper mapper = new ObjectMapper();
269 mapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
270 mapper.configure(SerializationFeature.FAIL_ON_EMPTY_BEANS, false);
271 mapper.setSerializationInclusion(JsonInclude.Include.NON_NULL);
274 jsonArtifact = mapper.writeValueAsString(ad);
275 } catch (IOException e) {
276 // TODO Auto-generated catch block
280 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact,
281 ArtifactDefinition.class, false);
282 assertEquals(ad, afterConvert);
285 private ArtifactDefinition createArtifactDef() {
286 ArtifactDefinition ad = new ArtifactDefinition();
287 ad.setArtifactName("artifact1.yaml");
288 ad.setArtifactLabel("label1");
289 ad.setDescription("description");
290 ad.setArtifactType(ArtifactTypeEnum.HEAT.getType());
291 ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
292 ad.setCreationDate(System.currentTimeMillis());
293 ad.setMandatory(false);
298 private Resource createResourceObject(boolean afterCreate) {
299 Resource resource = new Resource();
300 resource.setName(RESOURCE_NAME);
301 resource.addCategory(RESOURCE_CATEGORY1, RESOURCE_SUBCATEGORY);
302 resource.setDescription("My short description");
303 List<String> tgs = new ArrayList<String>();
305 tgs.add(resource.getName());
306 resource.setTags(tgs);
307 List<String> template = new ArrayList<String>();
308 template.add("Root");
309 resource.setDerivedFrom(template);
310 resource.setVendorName("Motorola");
311 resource.setVendorRelease("1.0.0");
312 resource.setContactId("ya5467");
313 resource.setIcon("MyIcon");
316 resource.setName(resource.getName());
317 resource.setVersion("0.1");
318 resource.setUniqueId(resource.getName().toLowerCase() + ":" + resource.getVersion());
319 resource.setCreatorUserId(user.getUserId());
320 resource.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
321 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
327 public void testUpdateCIDeploymentArtifactTimeout() {
328 ArtifactDefinition heatArtifact = new ArtifactDefinition();
329 ArtifactDefinition envArtifact = new ArtifactDefinition();
330 ArtifactDefinition origEnvArtifact = new ArtifactDefinition();
331 ComponentInstance ci = new ComponentInstance();
332 ci.setUniqueId("ciid");
333 ci.setDeploymentArtifacts(fillDeploymentArtifacts(heatArtifact,envArtifact, origEnvArtifact));
334 GroupInstance groupInstance = new GroupInstance();
335 groupInstance.setGroupInstanceArtifacts(new ArrayList<>(Arrays.asList(heatArtifact.getUniqueId(), envArtifact.getUniqueId())));
336 groupInstance.setCustomizationUUID("custUid");
337 groupInstance.setUniqueId("guid");
338 List<GroupInstance> groupInstances = new ArrayList<>();
339 groupInstances.addAll(Arrays.asList(groupInstance));
340 ci.setGroupInstances(groupInstances);
341 Service service = new Service();
342 service.setComponentInstances(Collections.singletonList(ci));
343 service.setUniqueId("suid");
345 when (artifactToscaOperation.updateArtifactOnResource(heatArtifact, service,
346 heatArtifact.getUniqueId(), ComponentTypeEnum.RESOURCE_INSTANCE.getNodeType(), ci.getUniqueId(), false)).thenReturn(Either.left(heatArtifact));
347 when(toscaOperationFacade.generateCustomizationUUIDOnInstance(service.getUniqueId(), ci.getUniqueId()))
348 .thenReturn(StorageOperationStatus.OK);
349 when(toscaOperationFacade.updateGroupInstancesOnComponent(eq(service),eq(ci.getUniqueId()), any(List.class)))
350 .thenReturn(Either.left(new ArrayList()));
351 when(toscaOperationFacade.generateCustomizationUUIDOnInstanceGroup(service.getUniqueId(), ci.getUniqueId(), new ArrayList<>(Arrays.asList("guid"))))
352 .thenReturn(StorageOperationStatus.OK);
353 artifactBL.handleUpdate(ci.getUniqueId(),ComponentTypeEnum.RESOURCE_INSTANCE,
354 new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE),
355 "uid2", envArtifact, null, null, null, null, null, AuditingActionEnum.ARTIFACT_METADATA_UPDATE, user, service, true);
356 assertThat(ci.getDeploymentArtifacts().get("HEAT").getTimeout()).isEqualTo(envArtifact.getTimeout());
357 assertThat(ci.getDeploymentArtifacts().get("HEAT_ENV").getTimeout()).isEqualTo(origEnvArtifact.getTimeout());
361 public void testUpdateCIDeploymentTimeout_invalidTimeout() {
362 ArtifactDefinition heatArtifact = new ArtifactDefinition();
363 ArtifactDefinition envArtifact = new ArtifactDefinition();
364 ArtifactDefinition origEnvArtifact = new ArtifactDefinition();
365 ComponentInstance ci = new ComponentInstance();
366 ci.setUniqueId("ciid");
367 ci.setDeploymentArtifacts(fillDeploymentArtifacts(heatArtifact,envArtifact, origEnvArtifact));
368 GroupInstance groupInstance = new GroupInstance();
369 groupInstance.setGroupInstanceArtifacts(new ArrayList<>(Arrays.asList(heatArtifact.getUniqueId(), envArtifact.getUniqueId())));
370 groupInstance.setCustomizationUUID("custUid");
371 groupInstance.setUniqueId("guid");
372 List<GroupInstance> groupInstances = new ArrayList<>();
373 groupInstances.addAll(Arrays.asList(groupInstance));
374 ci.setGroupInstances(groupInstances);
375 Service service = new Service();
376 service.setComponentInstances(Collections.singletonList(ci));
377 service.setUniqueId("suid");
378 envArtifact.setTimeout(130);
380 when (artifactToscaOperation.updateArtifactOnResource(heatArtifact, service,
381 heatArtifact.getUniqueId(), ComponentTypeEnum.RESOURCE_INSTANCE.getNodeType(), ci.getUniqueId(), false)).thenReturn(Either.left(heatArtifact));
382 when(toscaOperationFacade.generateCustomizationUUIDOnInstance(service.getUniqueId(), ci.getUniqueId()))
383 .thenReturn(StorageOperationStatus.OK);
384 when(toscaOperationFacade.updateGroupInstancesOnComponent(eq(service),eq(ci.getUniqueId()), any(List.class)))
385 .thenReturn(Either.left(new ArrayList()));
386 when(toscaOperationFacade.generateCustomizationUUIDOnInstanceGroup(service.getUniqueId(), ci.getUniqueId(), new ArrayList<>(Arrays.asList("guid"))))
387 .thenReturn(StorageOperationStatus.OK);
389 artifactBL.handleUpdate(ci.getUniqueId(), ComponentTypeEnum.RESOURCE_INSTANCE, new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE),
390 "uid2", envArtifact, null, null, null, null, null, AuditingActionEnum.ARTIFACT_METADATA_UPDATE, user, service, true);
391 } catch (ComponentException exp) {
392 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.ARTIFACT_INVALID_TIMEOUT);
399 public void testUpdateCIDeploymentTimeout_negativeTimeout() {
400 ArtifactDefinition heatArtifact = new ArtifactDefinition();
401 ArtifactDefinition envArtifact = new ArtifactDefinition();
402 ArtifactDefinition origEnvArtifact = new ArtifactDefinition();
403 ComponentInstance ci = new ComponentInstance();
404 ci.setUniqueId("ciid");
405 ci.setDeploymentArtifacts(fillDeploymentArtifacts(heatArtifact,envArtifact, origEnvArtifact));
406 GroupInstance groupInstance = new GroupInstance();
407 groupInstance.setGroupInstanceArtifacts(new ArrayList<>(Arrays.asList(heatArtifact.getUniqueId(), envArtifact.getUniqueId())));
408 groupInstance.setCustomizationUUID("custUid");
409 groupInstance.setUniqueId("guid");
410 List<GroupInstance> groupInstances = new ArrayList<>();
411 groupInstances.addAll(Arrays.asList(groupInstance));
412 ci.setGroupInstances(groupInstances);
413 Service service = new Service();
414 service.setComponentInstances(Collections.singletonList(ci));
415 service.setUniqueId("suid");
416 envArtifact.setTimeout(-1);
418 when (artifactToscaOperation.updateArtifactOnResource(heatArtifact, service,
419 heatArtifact.getUniqueId(), ComponentTypeEnum.RESOURCE_INSTANCE.getNodeType(), ci.getUniqueId(), false)).thenReturn(Either.left(heatArtifact));
420 when(toscaOperationFacade.generateCustomizationUUIDOnInstance(service.getUniqueId(), ci.getUniqueId()))
421 .thenReturn(StorageOperationStatus.OK);
422 when(toscaOperationFacade.updateGroupInstancesOnComponent(eq(service),eq(ci.getUniqueId()), any(List.class)))
423 .thenReturn(Either.left(new ArrayList()));
424 when(toscaOperationFacade.generateCustomizationUUIDOnInstanceGroup(service.getUniqueId(), ci.getUniqueId(), new ArrayList<>(Arrays.asList("guid"))))
425 .thenReturn(StorageOperationStatus.OK);
427 artifactBL.handleUpdate(ci.getUniqueId(), ComponentTypeEnum.RESOURCE_INSTANCE, new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE),
428 "uid2", envArtifact, null, null, null, null, null, AuditingActionEnum.ARTIFACT_METADATA_UPDATE, user, service, true);
429 } catch (ComponentException exp) {
430 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.ARTIFACT_INVALID_TIMEOUT);
437 public void testUpdateCIDeploymentArtifactTimeout_noUpdate() {
438 ArtifactDefinition heatArtifact = new ArtifactDefinition();
439 ArtifactDefinition envArtifact = new ArtifactDefinition();
440 ArtifactDefinition origEnvArtifact = new ArtifactDefinition();
441 ComponentInstance ci = new ComponentInstance();
442 ci.setUniqueId("ciid");
443 ci.setDeploymentArtifacts(fillDeploymentArtifacts(heatArtifact,envArtifact, origEnvArtifact));
444 envArtifact.setTimeout(heatArtifact.getTimeout());
445 GroupInstance groupInstance = new GroupInstance();
446 groupInstance.setGroupInstanceArtifacts(new ArrayList<>(Arrays.asList(heatArtifact.getUniqueId(), envArtifact.getUniqueId())));
447 groupInstance.setCustomizationUUID("custUid");
448 groupInstance.setUniqueId("guid");
449 List<GroupInstance> groupInstances = new ArrayList<>();
450 groupInstances.addAll(Arrays.asList(groupInstance));
451 ci.setGroupInstances(groupInstances);
452 Service service = new Service();
453 service.setComponentInstances(Collections.singletonList(ci));
454 service.setUniqueId("suid");
456 when(toscaOperationFacade.generateCustomizationUUIDOnInstance(service.getUniqueId(), ci.getUniqueId()))
457 .thenReturn(StorageOperationStatus.OK);
458 when(toscaOperationFacade.updateGroupInstancesOnComponent(eq(service),eq(ci.getUniqueId()), any(List.class)))
459 .thenReturn(Either.left(new ArrayList()));
460 artifactBL.handleUpdate(ci.getUniqueId(),ComponentTypeEnum.RESOURCE_INSTANCE,
461 new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE),
462 "uid2", envArtifact, null, null, null, null, null, AuditingActionEnum.ARTIFACT_METADATA_UPDATE, user, service, true);
463 assertThat(ci.getDeploymentArtifacts().get("HEAT").getTimeout()).isEqualTo(origEnvArtifact.getTimeout());
467 public void testUpdateCIDeploymentArtifactTimeout_nonExistingArtifact() {
468 ArtifactDefinition heatArtifact = new ArtifactDefinition();
469 ArtifactDefinition envArtifact = new ArtifactDefinition();
470 ArtifactDefinition origEnvArtifact = new ArtifactDefinition();
471 envArtifact.setTimeout(heatArtifact.getTimeout());
472 envArtifact.setArtifactType("HEAT_ENV");
473 envArtifact.setGeneratedFromId("uid1");
474 ComponentInstance ci = new ComponentInstance();
475 ci.setUniqueId("ciid");
476 ci.setDeploymentArtifacts(new HashMap<>());
477 Service service = new Service();
478 service.setComponentInstances(Collections.singletonList(ci));
479 service.setUniqueId("suid");
481 when(toscaOperationFacade.generateCustomizationUUIDOnInstance(service.getUniqueId(), ci.getUniqueId()))
482 .thenReturn(StorageOperationStatus.OK);
483 when(toscaOperationFacade.updateGroupInstancesOnComponent(eq(service),eq(ci.getUniqueId()), any(List.class)))
484 .thenReturn(Either.left(new ArrayList()));
485 assertThatThrownBy(() -> {
486 artifactBL.handleUpdate(ci.getUniqueId(),ComponentTypeEnum.RESOURCE_INSTANCE,
487 new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE),
488 "uid2", envArtifact, null, null, null, null, null, AuditingActionEnum.ARTIFACT_METADATA_UPDATE, user, service, true);
489 }).isInstanceOf(ComponentException.class);
493 public void testUpdateCIDeploymentArtifactTimeout_invalidArtifactType() {
494 ArtifactDefinition envArtifact = new ArtifactDefinition();
495 envArtifact.setArtifactType("invalid");
498 artifactBL.handleUpdate("uid", ComponentTypeEnum.RESOURCE_INSTANCE, new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE),
499 "uid2", envArtifact, null, null, null, null, null, AuditingActionEnum.ARTIFACT_METADATA_UPDATE, user, null, true);
501 } catch(ComponentException exp) {
502 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.ARTIFACT_TYPE_NOT_SUPPORTED);
503 assertThat(exp.getParams()[0]).isEqualTo("invalid");
507 private Map<String, ArtifactDefinition> fillDeploymentArtifacts(ArtifactDefinition heatArtifact, ArtifactDefinition envArtifact, ArtifactDefinition origEnvArtifact) {
508 heatArtifact.setArtifactType("HEAT");
509 heatArtifact.setTimeout(60);
510 heatArtifact.setEsId("es");
511 heatArtifact.setArtifactUUID("uuid1");
512 heatArtifact.setUniqueId("uid1");
513 envArtifact.setArtifactUUID("uuid2");
514 envArtifact.setArtifactType("HEAT_ENV");
515 envArtifact.setTimeout(30);
516 envArtifact.setGenerated(true);
517 envArtifact.setGeneratedFromId("uid1");
518 envArtifact.setUniqueId("uid2");
519 origEnvArtifact.setUniqueId("uid2");
520 origEnvArtifact.setGeneratedFromId("uid1");
521 origEnvArtifact.setArtifactType("HEAT_ENV");
522 origEnvArtifact.setTimeout(60);
523 origEnvArtifact.setGenerated(true);
524 Map<String, ArtifactDefinition> deploymentArtifacts = new HashMap<>();
525 deploymentArtifacts.put(heatArtifact.getArtifactType(), heatArtifact);
526 //deploymentArtifacts.put(envArtifact.getArtifactType(), envArtifact);
527 deploymentArtifacts.put(envArtifact.getArtifactType(), origEnvArtifact);
528 return deploymentArtifacts;
532 public void testInvalidStringGroupType() {
533 ArtifactDefinition ad = new ArtifactDefinition();
534 ad.setArtifactName("artifact1");
535 ad.setCreationDate(System.currentTimeMillis());
536 ad.setMandatory(false);
539 JsonElement jsonArtifact = gson.toJsonTree(ad);
540 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", "www");
541 jsonArtifact.getAsJsonObject().addProperty("artifactLabel", " label");
542 jsonArtifact.getAsJsonObject().addProperty("timeout", " 80");
543 jsonArtifact.getAsJsonObject().addProperty("artifactType", " HEAT");
545 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
546 ArtifactDefinition.class, false);
547 assertNull(afterConvert);
551 public void testUpdateArtifactWithEmptyBody() {
553 RepresentationUtils.convertJsonToArtifactDefinition("", ArtifactDefinition.class, true);
555 } catch (ComponentException exp) {
556 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.MISSING_BODY);
561 public void testInvalidNumberGroupType() {
562 ArtifactDefinition ad = new ArtifactDefinition();
563 ad.setArtifactName("artifact1");
564 ad.setCreationDate(System.currentTimeMillis());
565 ad.setMandatory(false);
568 JsonElement jsonArtifact = gson.toJsonTree(ad);
569 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", 123);
570 jsonArtifact.getAsJsonObject().addProperty("artifactLabel", " label");
571 jsonArtifact.getAsJsonObject().addProperty("timeout", " 80");
572 jsonArtifact.getAsJsonObject().addProperty("artifactType", " HEAT");
574 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
575 ArtifactDefinition.class, false);
576 assertNull(afterConvert);
580 public void testMissingArtifactTypeValue() {
581 ArtifactDefinition ad = new ArtifactDefinition();
583 JsonElement jsonArtifact = gson.toJsonTree(ad);
584 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", ArtifactGroupTypeEnum.DEPLOYMENT.toString());
585 jsonArtifact.getAsJsonObject().addProperty("artifactLabel", " label");
586 jsonArtifact.getAsJsonObject().addProperty("timeout", " 80");
587 jsonArtifact.getAsJsonObject().add("artifactType", null);
589 RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
590 ArtifactDefinition.class, true);
592 } catch (ComponentException exp) {
593 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.MANDATORY_PROPERTY_MISSING_VALUE);
594 assertThat(exp.getParams()[0]).isEqualTo("artifactType");
599 public void testMissingArtifactLabel() {
600 ArtifactDefinition ad = new ArtifactDefinition();
602 JsonElement jsonArtifact = gson.toJsonTree(ad);
603 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", ArtifactGroupTypeEnum.DEPLOYMENT.toString());
604 jsonArtifact.getAsJsonObject().addProperty("timeout", " 80");
605 jsonArtifact.getAsJsonObject().addProperty("artifactType", " HEAT");
608 RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
609 ArtifactDefinition.class, false);
611 } catch (ComponentException exp) {
612 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.MISSING_MANDATORY_PROPERTY);
613 assertThat(exp.getParams()[0]).isEqualTo("artifactLabel");
618 public void testMissingArtifactTimeout() {
619 ArtifactDefinition ad = new ArtifactDefinition();
621 JsonElement jsonArtifact = gson.toJsonTree(ad);
622 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", ArtifactGroupTypeEnum.DEPLOYMENT.toString());
623 jsonArtifact.getAsJsonObject().addProperty("artifactLabel", " label");
624 jsonArtifact.getAsJsonObject().addProperty("artifactType", " HEAT");
627 RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
628 ArtifactDefinition.class, true);
630 } catch (ComponentException exp) {
631 assertThat(exp.getActionStatus()).isEqualTo(ActionStatus.MISSING_MANDATORY_PROPERTY);
632 assertThat(exp.getParams()[0]).isEqualTo("timeout");
638 public void testInvalidGroupTypeWithSpace() {
639 ArtifactDefinition ad = new ArtifactDefinition();
640 ad.setArtifactName("artifact1");
641 ad.setCreationDate(System.currentTimeMillis());
642 ad.setMandatory(false);
645 JsonElement jsonArtifact = gson.toJsonTree(ad);
646 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", " DEPLOYMENT");
647 jsonArtifact.getAsJsonObject().addProperty("artifactLabel", " label");
648 jsonArtifact.getAsJsonObject().addProperty("timeout", " 80");
649 jsonArtifact.getAsJsonObject().addProperty("artifactType", " HEAT");
651 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
652 ArtifactDefinition.class, false);
653 assertNull(afterConvert);
657 public void testInvalidTimeoutWithSpace() {
658 ArtifactDefinition ad = new ArtifactDefinition();
659 ad.setArtifactName("artifact1");
660 ad.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
661 ad.setCreationDate(System.currentTimeMillis());
662 ad.setMandatory(false);
664 JsonElement jsonArtifact = gson.toJsonTree(ad);
665 jsonArtifact.getAsJsonObject().addProperty("timeout", "dfsdf15");
666 jsonArtifact.getAsJsonObject().addProperty("artifactLabel", " label");
667 jsonArtifact.getAsJsonObject().addProperty("artifactGroupType", " DEPLOYMENT");
668 jsonArtifact.getAsJsonObject().addProperty("artifactType", " HEAT");
670 ArtifactDefinition afterConvert = RepresentationUtils.convertJsonToArtifactDefinition(jsonArtifact.toString(),
671 ArtifactDefinition.class, true);
672 assertNull(afterConvert);
676 public void testValidMibArtifactsConfiguration() {
677 final ArtifactConfigManager artifactConfigManager = ArtifactConfigManager.getInstance();
678 Optional<ArtifactConfiguration> artifactConfiguration = artifactConfigManager
679 .find(ArtifactTypeEnum.SNMP_POLL.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, ComponentType.RESOURCE);
680 assertThat(artifactConfiguration.isPresent()).isTrue();
682 artifactConfiguration = artifactConfigManager
683 .find(ArtifactTypeEnum.SNMP_TRAP.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, ComponentType.RESOURCE);
684 assertThat(artifactConfiguration.isPresent()).isTrue();
686 artifactConfiguration = artifactConfigManager
687 .find(ArtifactTypeEnum.SNMP_POLL.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, ComponentType.RESOURCE_INSTANCE);
688 assertThat(artifactConfiguration.isPresent()).isTrue();
689 artifactConfiguration = artifactConfigManager
690 .find(ArtifactTypeEnum.SNMP_TRAP.getType(), ArtifactGroupTypeEnum.DEPLOYMENT, ComponentType.RESOURCE_INSTANCE);
691 assertThat(artifactConfiguration.isPresent()).isTrue();
695 public void testDownloadServiceArtifactByNames() {
696 Service service = new Service();
697 String serviceName = "myService";
698 String serviceVersion = "1.0";
699 String serviceId = "serviceId";
700 service.setName(serviceName);
701 service.setVersion(serviceVersion);
702 service.setUniqueId(serviceId);
704 String artifactName = "service-Myservice-template.yml";
705 String artifactLabel = "assettoscatemplate";
706 String esArtifactId = "123123dfgdfgd0";
707 byte[] payload = "some payload".getBytes();
708 ArtifactDefinition toscaTemplateArtifact = new ArtifactDefinition();
709 toscaTemplateArtifact.setArtifactName(artifactName);
710 toscaTemplateArtifact.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
711 toscaTemplateArtifact.setArtifactLabel(artifactLabel);
712 toscaTemplateArtifact.setEsId(esArtifactId);
713 toscaTemplateArtifact.setPayload(payload);
715 Map<String, ArtifactDefinition> toscaArtifacts = new HashMap<>();
716 toscaArtifacts.put(artifactLabel, toscaTemplateArtifact);
717 service.setToscaArtifacts(toscaArtifacts);
719 DAOArtifactData DAOArtifactData = new DAOArtifactData(esArtifactId);
720 DAOArtifactData.setDataAsArray(payload);
721 Either<DAOArtifactData, CassandraOperationStatus> artifactfromESres = Either.left(DAOArtifactData);
722 when(artifactCassandraDao.getArtifact(esArtifactId)).thenReturn(artifactfromESres);
723 List<org.openecomp.sdc.be.model.Component> serviceList = new ArrayList<>();
724 serviceList.add(service);
725 Either<List<org.openecomp.sdc.be.model.Component>, StorageOperationStatus> getServiceRes = Either
727 when(toscaOperationFacade.getBySystemName(ComponentTypeEnum.SERVICE, serviceName)).thenReturn(getServiceRes);
728 byte[] downloadServiceArtifactByNamesRes = artifactBL
729 .downloadServiceArtifactByNames(serviceName, serviceVersion, artifactName);
730 assertThat(downloadServiceArtifactByNamesRes != null
731 && downloadServiceArtifactByNamesRes.length == payload.length).isTrue();
735 public void createHeatEnvPlaceHolder_vf_emptyHeatParameters() throws Exception {
736 ArtifactDefinition heatArtifact = new ArtifactBuilder()
737 .addHeatParam(ObjectGenerator.buildHeatParam("defVal1", "val1"))
738 .addHeatParam(ObjectGenerator.buildHeatParam("defVal2", "val2")).build();
740 Resource component = new Resource();
741 component.setComponentType(ComponentTypeEnum.RESOURCE);
742 when(userBusinessLogic.getUser(anyString(), anyBoolean())).thenReturn(USER);
743 when(artifactToscaOperation.addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class),
744 eq(component), eq(NodeTypeEnum.Resource), eq(true), eq("parentId")))
745 .thenReturn(Either.left(new ArtifactDefinition()));
746 ArtifactDefinition heatEnvPlaceHolder = artifactBL.createHeatEnvPlaceHolder(
747 new ArrayList<>(), heatArtifact, HEAT_VF_ENV_NAME, "parentId", NodeTypeEnum.Resource, "parentName", USER, component,
748 Collections.emptyMap());
749 assertNull(heatEnvPlaceHolder.getListHeatParameters());
753 public void createHeatEnvPlaceHolder_resourceInstance_copyHeatParamasCurrValuesToHeatEnvDefaultVal()
755 HeatParameterDefinition heatParam1 = ObjectGenerator.buildHeatParam("defVal1", "val1");
756 HeatParameterDefinition heatParam2 = ObjectGenerator.buildHeatParam("defVal2", "val2");
757 HeatParameterDefinition heatParam3 = ObjectGenerator.buildHeatParam("defVal3", "val3");
758 ArtifactDefinition heatArtifact = new ArtifactBuilder().addHeatParam(heatParam1).addHeatParam(heatParam2)
759 .addHeatParam(heatParam3).build();
761 Resource component = new Resource();
763 when(userBusinessLogic.getUser(anyString(), anyBoolean())).thenReturn(USER);
764 when(artifactToscaOperation.addHeatEnvArtifact(any(ArtifactDefinition.class), any(ArtifactDefinition.class),
765 eq(component), eq(NodeTypeEnum.Resource), eq(true), eq("parentId")))
766 .thenReturn(Either.left(new ArtifactDefinition()));
768 ArtifactDefinition heatEnvPlaceHolder = artifactBL.createHeatEnvPlaceHolder(
769 new ArrayList<>(), heatArtifact, HEAT_ENV_NAME, "parentId", NodeTypeEnum.ResourceInstance, "parentName", USER, component,
770 Collections.emptyMap());
772 ArtifactDefinition heatEnvArtifact = heatEnvPlaceHolder;
773 List<HeatParameterDefinition> listHeatParameters = heatEnvArtifact.getListHeatParameters();
774 assertEquals(listHeatParameters.size(), 3);
775 verifyHeatParam(listHeatParameters.get(0), heatParam1);
776 verifyHeatParam(listHeatParameters.get(1), heatParam2);
777 verifyHeatParam(listHeatParameters.get(2), heatParam3);
781 public void buildArtifactPayloadWhenShouldLockAndInTransaction() {
782 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
783 artifactDefinition.setArtifactName(ARTIFACT_NAME);
784 artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
785 artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
786 artifactDefinition.setEsId(ES_ARTIFACT_ID);
787 artifactDefinition.setPayload(PAYLOAD);
788 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
790 when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
791 when(artifactToscaOperation.updateArtifactOnResource(any(ArtifactDefinition.class), any(), any(),
792 any(NodeTypeEnum.class), any(String.class), eq(true))).thenReturn(Either.left(artifactDefinition));
793 when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
794 when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
795 artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD),
796 ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME, USER, INSTANCE_ID, true, true);
800 public void buildArtifactPayloadWhenShouldLockAndNotInTransaction() {
801 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
802 artifactDefinition.setArtifactName(ARTIFACT_NAME);
803 artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
804 artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
805 artifactDefinition.setEsId(ES_ARTIFACT_ID);
806 artifactDefinition.setPayload(PAYLOAD);
807 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
809 when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
810 when(artifactToscaOperation.updateArtifactOnResource(any(ArtifactDefinition.class), any(), any(),
811 any(NodeTypeEnum.class), any(String.class), eq(true))).thenReturn(Either.left(artifactDefinition));
812 when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
813 when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
814 artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD),
815 ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME, USER, INSTANCE_ID, true, false);
816 verify(janusGraphDao, times(1)).commit();
819 private ArtifactDefinition buildArtifactPayload() {
820 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
821 artifactDefinition.setArtifactName(ARTIFACT_NAME);
822 artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_TEMPLATE.getType());
823 artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
824 artifactDefinition.setEsId(ES_ARTIFACT_ID);
825 artifactDefinition.setPayload(PAYLOAD);
826 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
828 when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
829 when(artifactToscaOperation.updateArtifactOnResource(any(ArtifactDefinition.class), any(), any(),
830 any(NodeTypeEnum.class), any(String.class), eq(true))).thenReturn(Either.left(artifactDefinition));
831 when(artifactCassandraDao.saveArtifact(any())).thenReturn(CassandraOperationStatus.OK);
832 when(componentsUtils.getResponseFormat(any(ActionStatus.class))).thenReturn(new ResponseFormat());
833 artifactBL.generateAndSaveHeatEnvArtifact(artifactDefinition, String.valueOf(PAYLOAD),
834 ComponentTypeEnum.SERVICE, new Service(), RESOURCE_INSTANCE_NAME, USER, INSTANCE_ID, true, false);
835 verify(janusGraphDao, times(1)).commit();
836 return artifactDefinition;
839 private void verifyHeatParam(HeatParameterDefinition heatEnvParam, HeatParameterDefinition heatYamlParam) {
840 assertEquals(heatEnvParam.getDefaultValue(), heatYamlParam.getCurrentValue());
841 assertNull(heatEnvParam.getCurrentValue());
844 //////////////////////////////////////////////////////////////////////////////////
845 //////////////////////////////////new tests///////////////////////////////////////
846 /////////////////////////////////////////////////////////////////////////////////
847 private ArtifactsBusinessLogic createTestSubject() {
848 return getTestSubject();
852 public void testCheckCreateFields() throws Exception {
853 ArtifactsBusinessLogic testSubject;
855 ArtifactDefinition artifactInfo = buildArtifactPayload();
856 ArtifactGroupTypeEnum type = ArtifactGroupTypeEnum.DEPLOYMENT;
859 testSubject = createTestSubject();
860 Deencapsulation.invoke(testSubject, "checkCreateFields", user, artifactInfo, type);
864 public void testComposeArtifactId() throws Exception {
865 ArtifactsBusinessLogic testSubject;
866 String resourceId = "";
867 String artifactId = "";
868 ArtifactDefinition artifactInfo = buildArtifactPayload();
869 String interfaceName = "";
870 String operationName = "";
874 testSubject = createTestSubject();
875 result = Deencapsulation.invoke(testSubject, "composeArtifactId",
876 new Object[]{resourceId, artifactId, artifactInfo, interfaceName, operationName});
880 public void testConvertParentType() throws Exception {
881 ArtifactsBusinessLogic testSubject;
882 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
886 testSubject = createTestSubject();
887 result = Deencapsulation.invoke(testSubject, "convertParentType", new Object[]{componentType});
891 public void testConvertToOperation() throws Exception {
892 ArtifactsBusinessLogic testSubject;
893 ArtifactDefinition artifactInfo = buildArtifactPayload();
894 String operationName = "";
898 testSubject = createTestSubject();
899 result = Deencapsulation.invoke(testSubject, "convertToOperation",
900 new Object[]{artifactInfo, operationName});
904 public void testCreateInterfaceArtifactNameFromOperation() throws Exception {
905 ArtifactsBusinessLogic testSubject;
906 String operationName = "";
907 String artifactName = "";
911 testSubject = createTestSubject();
912 result = Deencapsulation.invoke(testSubject, "createInterfaceArtifactNameFromOperation",
913 new Object[]{operationName, artifactName});
917 public void testFetchArtifactsFromComponent() throws Exception {
918 ArtifactsBusinessLogic testSubject;
919 String artifactId = "";
920 Component component = createResourceObject(true);
921 Map<String, ArtifactDefinition> artifacts = new HashMap<>();
924 testSubject = createTestSubject();
925 Deencapsulation.invoke(testSubject, "fetchArtifactsFromComponent",
926 artifactId, component, artifacts);
930 public void testValidateArtifact() throws Exception {
931 ArtifactsBusinessLogic testSubject;
932 String componentId = "";
933 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
934 ArtifactsBusinessLogic arb = getTestSubject();
935 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
936 String artifactId = "";
937 ArtifactDefinition artifactInfo = buildArtifactPayload();
938 AuditingActionEnum auditingAction = AuditingActionEnum.ADD_CATEGORY;
940 Component component = createResourceObject(true);
941 boolean shouldLock = false;
942 boolean inTransaction = false;
945 testSubject = createTestSubject();
946 testSubject.validateArtifact(componentId, componentType, operation, artifactId, artifactInfo, auditingAction, user, component, shouldLock, inTransaction);
950 public void testHandleHeatEnvDownload() throws Exception {
951 ArtifactsBusinessLogic testSubject;
952 String componentId = "";
953 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
955 Component component = createResourceObject(true);
956 ArtifactDefinition artifactInfo = buildArtifactPayload();
957 boolean shouldLock = false;
958 boolean inTransaction = false;
962 testSubject = createTestSubject();
963 testSubject.handleHeatEnvDownload(componentId, componentType, user, component, artifactInfo, shouldLock, inTransaction);
967 public void testArtifactGenerationRequired() throws Exception {
968 ArtifactsBusinessLogic testSubject;
969 Component component = createResourceObject(true);
970 ArtifactDefinition artifactInfo = buildArtifactPayload();
974 testSubject = createTestSubject();
975 result = Deencapsulation.invoke(testSubject, "artifactGenerationRequired",
976 new Object[]{component, artifactInfo});
980 public void testUpdateGroupForHeat() throws Exception {
981 ArtifactsBusinessLogic testSubject;
982 ArtifactDefinition artifactInfo = buildArtifactPayload();
983 ArtifactDefinition artAfterUpdate = null;
984 Component component = createResourceObject(true);
985 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
988 testSubject = createTestSubject();
989 testSubject.updateGroupForHeat(artifactInfo, artifactInfo, component);
993 public void testUpdateGroupForHeat_1() throws Exception {
994 ArtifactsBusinessLogic testSubject;
995 ArtifactDefinition artifactInfo = buildArtifactPayload();
996 Component component = createResourceObject(true);
997 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
1000 testSubject = createTestSubject();
1001 testSubject.updateGroupForHeat(artifactInfo, artifactInfo, artifactInfo,
1002 artifactInfo, component);
1007 public void testHandleAuditing() throws Exception {
1008 ArtifactsBusinessLogic testSubject;
1009 AuditingActionEnum auditingActionEnum = AuditingActionEnum.ACTIVATE_SERVICE_BY_API;
1010 Component component = createResourceObject(true);
1011 String componentId = "";
1013 ArtifactDefinition artifactDefinition = buildArtifactPayload();
1014 String prevArtifactUuid = "";
1015 String currentArtifactUuid = "";
1016 ResponseFormat responseFormat = new ResponseFormat();
1017 ComponentTypeEnum componentTypeEnum = ComponentTypeEnum.RESOURCE;
1018 String resourceInstanceName = "";
1021 testSubject = createTestSubject();
1022 testSubject.setComponentsUtils(MockGenerator.mockComponentUtils());
1023 testSubject.handleAuditing(auditingActionEnum, component, componentId, user, artifactDefinition,
1024 prevArtifactUuid, currentArtifactUuid, responseFormat, componentTypeEnum, resourceInstanceName);
1028 public void testIgnoreUnupdateableFieldsInUpdate() throws Exception {
1029 ArtifactsBusinessLogic testSubject;
1030 ArtifactsBusinessLogic arb = getTestSubject();
1031 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
1032 ArtifactDefinition artifactInfo = buildArtifactPayload();
1033 ArtifactDefinition currentArtifactInfo = null;
1036 testSubject = createTestSubject();
1037 Deencapsulation.invoke(testSubject, "ignoreUnupdateableFieldsInUpdate",
1038 operation, artifactInfo, artifactInfo);
1042 public void testFindArtifactOnParentComponent() {
1043 ArtifactsBusinessLogic testSubject;
1044 Component component = createResourceObject(true);
1045 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
1046 String parentId = "";
1047 ArtifactsBusinessLogic arb = getTestSubject();
1048 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
1049 String artifactId = "";
1050 Either<ArtifactDefinition, ResponseFormat> result;
1053 testSubject = createTestSubject();
1054 result = Deencapsulation.invoke(testSubject, "findArtifact", new Object[]{component,
1055 componentType, parentId, operation, artifactId});
1060 public void testValidateInformationalArtifact() throws Exception {
1061 ArtifactsBusinessLogic testSubject;
1062 ArtifactDefinition artifactInfo = buildArtifactPayload();
1063 Component component = createResourceObject(true);
1064 Either<Boolean, ResponseFormat> result;
1067 testSubject = createTestSubject();
1068 result = Deencapsulation.invoke(testSubject, "validateInformationalArtifact",
1069 new Object[]{artifactInfo, component});
1074 public void testGetUpdatedGroups() throws Exception {
1075 ArtifactsBusinessLogic testSubject;
1076 String artifactId = "";
1077 ArtifactDefinition artifactInfo = buildArtifactPayload();
1078 List<GroupDefinition> groups = new ArrayList<>();
1079 List<GroupDataDefinition> result;
1082 testSubject = createTestSubject();
1083 result = Deencapsulation.invoke(testSubject, "getUpdatedGroups", new Object[]{artifactId, artifactInfo, groups});
1088 public void testGetUpdatedGroupInstances() throws Exception {
1089 ArtifactsBusinessLogic testSubject;
1090 String artifactId = "";
1091 ArtifactDefinition artifactInfo = buildArtifactPayload();
1092 List<GroupDefinition> groups = new ArrayList<>();
1093 List<GroupInstance> result;
1096 testSubject = createTestSubject();
1097 result = Deencapsulation.invoke(testSubject, "getUpdatedGroupInstances", new Object[]{artifactId, artifactInfo, groups});
1102 public void testFindArtifact_1() throws Exception {
1103 ArtifactsBusinessLogic testSubject;
1104 String artifactId = "";
1105 Component component = createResourceObject(true);
1106 String parentId = "";
1107 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
1108 Either<ImmutablePair<ArtifactDefinition, ComponentInstance>, ActionStatus> result;
1111 testSubject = createTestSubject();
1112 result = Deencapsulation.invoke(testSubject, "findArtifact",
1113 new Object[]{artifactId, component, parentId, componentType});
1118 public void testFetchArtifactsFromInstance() throws Exception {
1119 ArtifactsBusinessLogic testSubject;
1120 String artifactId = "";
1121 Map<String, ArtifactDefinition> artifacts = new HashMap<>();
1122 ComponentInstance instance = new ComponentInstance();
1126 testSubject = createTestSubject();
1127 Deencapsulation.invoke(testSubject, "fetchArtifactsFromInstance", new Object[]{artifactId, artifacts, instance});
1132 public void testGenerateCustomizationUUIDOnInstance() throws Exception {
1133 ArtifactsBusinessLogic testSubject;
1134 String componentId = "";
1135 String instanceId = "";
1136 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
1137 StorageOperationStatus result;
1140 testSubject = createTestSubject();
1141 result = Deencapsulation.invoke(testSubject, "generateCustomizationUUIDOnInstance",
1142 new Object[]{componentId, instanceId, componentType});
1146 public void testFindComponentInstance() {
1147 ArtifactsBusinessLogic testSubject;
1148 String componentInstanceId = "";
1149 Component component = createResourceObject(true);
1150 ComponentInstance result;
1153 testSubject = createTestSubject();
1154 result = Deencapsulation.invoke(testSubject, "findComponentInstance",
1155 new Object[]{componentInstanceId, component});
1158 @Test(expected = ComponentException.class)
1159 public void testDeploymentArtifactTypeIsLegalForParent_shouldThrowException() {
1160 ArtifactsBusinessLogic testSubject;
1161 ArtifactDefinition artifactInfo = buildArtifactPayload();
1162 ArtifactTypeEnum artifactType = ArtifactTypeEnum.AAI_SERVICE_MODEL;
1163 Map<String, ArtifactTypeConfig> resourceDeploymentArtifacts = new HashMap<>();
1165 testSubject = createTestSubject();
1166 testSubject.validateDeploymentArtifactTypeIsLegalForParent(artifactInfo, artifactType, resourceDeploymentArtifacts);
1170 public void testLoadArtifactTypeConfig() {
1171 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1173 Optional<ArtifactConfiguration> artifactConfiguration = artifactsBusinessLogic.loadArtifactTypeConfig(null);
1174 assertThat(artifactConfiguration.isPresent()).isFalse();
1175 //not configured artifactType
1176 artifactConfiguration = artifactsBusinessLogic.loadArtifactTypeConfig("NotConfiguredArtifactType");
1177 assertThat(artifactConfiguration.isPresent()).isFalse();
1179 //valid artifactType
1180 final String artifactType = ArtifactTypeEnum.YANG.getType();
1181 artifactConfiguration = artifactsBusinessLogic.loadArtifactTypeConfig(artifactType);
1182 assertThat(artifactConfiguration.isPresent()).isTrue();
1183 final ArtifactConfiguration artifactConfiguration1 = artifactConfiguration.get();
1184 assertThat(artifactConfiguration1.getType()).isEqualTo(artifactType);
1185 assertThat(artifactConfiguration1.getCategories()).hasSize(1);
1186 assertThat(artifactConfiguration1.getCategories()).contains(ArtifactGroupTypeEnum.INFORMATIONAL);
1187 assertThat(artifactConfiguration1.getComponentTypes()).hasSize(1);
1188 assertThat(artifactConfiguration1.getComponentTypes()).contains(ComponentType.RESOURCE);
1189 assertThat(artifactConfiguration1.getResourceTypes()).hasSize(11);
1190 assertThat(artifactConfiguration1.getResourceTypes())
1191 .contains(ResourceTypeEnum.VFC.getValue(), ResourceTypeEnum.CP.getValue(), ResourceTypeEnum.VL.getValue(),
1192 ResourceTypeEnum.VF.getValue(), ResourceTypeEnum.VFCMT.getValue(), "Abstract",
1193 ResourceTypeEnum.CVFC.getValue());
1197 public void testValidateArtifactExtension_acceptedExtension() {
1198 final ArtifactDefinition artifactInfo = new ArtifactDefinition();
1199 artifactInfo.setArtifactName("artifact.yml");
1200 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1201 //empty accepted types
1202 assertThatCode(() -> artifactsBusinessLogic.validateArtifactExtension(new ArtifactConfiguration(), artifactInfo))
1203 .doesNotThrowAnyException();
1205 final ArtifactConfiguration artifactConfiguration = new ArtifactConfiguration();
1206 artifactConfiguration.setAcceptedTypes(Arrays.asList("yml", "yaml"));
1207 assertThatCode(() -> artifactsBusinessLogic.validateArtifactExtension(artifactConfiguration, artifactInfo))
1208 .doesNotThrowAnyException();
1211 @Test(expected = ComponentException.class)
1212 public void testValidateArtifactExtension_notAcceptedExtension() {
1213 final ArtifactConfiguration artifactConfiguration = new ArtifactConfiguration();
1214 artifactConfiguration.setAcceptedTypes(Arrays.asList("yml", "yaml"));
1215 final ArtifactDefinition artifactInfo = new ArtifactDefinition();
1216 //not accepted extension
1217 artifactInfo.setArtifactName("artifact.xml");
1219 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1221 artifactsBusinessLogic.validateArtifactExtension(artifactConfiguration, artifactInfo);
1224 @Test(expected = ComponentException.class)
1225 public void testValidateArtifactExtension_noExtension() {
1226 final ArtifactConfiguration artifactConfiguration = new ArtifactConfiguration();
1227 artifactConfiguration.setAcceptedTypes(Arrays.asList("yml", "yaml"));
1228 final ArtifactDefinition artifactInfo = new ArtifactDefinition();
1229 //no extension in the artifact name
1230 artifactInfo.setArtifactName("artifact");
1232 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1234 artifactsBusinessLogic.validateArtifactExtension(artifactConfiguration, artifactInfo);
1237 @Test(expected = ComponentException.class)
1238 public void testValidateHeatEnvDeploymentArtifact_shouldThrowException() {
1239 ArtifactsBusinessLogic testSubject;
1240 Component component = createResourceObject(true);
1241 String parentId = "";
1242 ArtifactDefinition artifactInfo = buildArtifactPayload();
1244 testSubject = createTestSubject();
1245 testSubject.validateHeatEnvDeploymentArtifact(component, parentId, artifactInfo);
1249 public void testFillArtifactPayloadValidation() throws Exception {
1250 ArtifactsBusinessLogic testSubject;
1251 Wrapper<ResponseFormat> errorWrapper = new Wrapper<>();
1252 Wrapper<byte[]> payloadWrapper = new Wrapper<>();
1253 ArtifactDefinition artifactDefinition = buildArtifactPayload();
1256 testSubject = createTestSubject();
1257 testSubject.fillArtifactPayload(payloadWrapper, artifactDefinition);
1260 @Test(expected = ByActionStatusComponentException.class)
1261 public void testHeatTimeoutValue() {
1262 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1263 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1264 artifactInfo.setTimeout(1);
1265 artifactsBusinessLogic.validateHeatTimeoutValue(artifactInfo);
1266 artifactInfo.setTimeout(0);
1267 artifactsBusinessLogic.validateHeatTimeoutValue(artifactInfo);
1271 public void testValidateResourceType_resourceTypeIsAccepted() {
1272 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1273 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1274 final List<String> typeList = Arrays
1275 .asList(ResourceTypeEnum.VF.getValue(), ResourceTypeEnum.PNF.getValue(), ResourceTypeEnum.VFC.getValue());
1276 assertThatCode(() -> {
1277 artifactsBusinessLogic.validateResourceType(ResourceTypeEnum.VF, artifactInfo, typeList);
1278 }).doesNotThrowAnyException();
1281 @Test(expected=ComponentException.class)
1282 public void testValidateResourceType_invalidResourceType() {
1283 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1284 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1285 final List<String> typeList = Collections.singletonList(ResourceTypeEnum.PNF.getValue());
1286 artifactsBusinessLogic.validateResourceType(ResourceTypeEnum.VF, artifactInfo, typeList);
1290 public void testValidateResourceType_emptyResourceTypeConfig_resourceTypeIsAccepted() {
1291 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1292 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1293 assertThatCode(() -> {
1294 artifactsBusinessLogic.validateResourceType(ResourceTypeEnum.VF, artifactInfo, null);
1295 }).doesNotThrowAnyException();
1296 assertThatCode(() -> {
1297 artifactsBusinessLogic.validateResourceType(ResourceTypeEnum.VF, artifactInfo, new ArrayList<>());
1298 }).doesNotThrowAnyException();
1302 public void testValidateAndConvertHeatParameters() throws Exception {
1303 ArtifactsBusinessLogic testSubject;
1304 ArtifactDefinition artifactInfo = buildArtifactPayload();
1305 String artifactType = "";
1306 Either<ArtifactDefinition, ResponseFormat> result;
1309 testSubject = createTestSubject();
1310 testSubject.validateAndConvertHeatParameters(artifactInfo, artifactType);
1314 public void testGetDeploymentArtifacts() throws Exception {
1315 ArtifactsBusinessLogic testSubject;
1316 Component component = createResourceObject(true);
1317 NodeTypeEnum parentType = null;
1319 List<ArtifactDefinition> result;
1322 testSubject = createTestSubject();
1323 result = testSubject.getDeploymentArtifacts(component, ciId);
1328 public void testValidateFirstUpdateHasPayload() throws Exception {
1329 ArtifactsBusinessLogic testSubject;
1330 ArtifactDefinition artifactInfo = buildArtifactPayload();
1331 ArtifactDefinition currentArtifact = null;
1332 Either<Boolean, ResponseFormat> result;
1335 testSubject = createTestSubject();
1336 result = Deencapsulation.invoke(testSubject, "validateFirstUpdateHasPayload",
1337 new Object[]{artifactInfo, artifactInfo});
1341 public void testValidateAndSetArtifactname() throws Exception {
1342 ArtifactsBusinessLogic testSubject;
1343 ArtifactDefinition artifactInfo = buildArtifactPayload();
1344 Either<Boolean, ResponseFormat> result;
1347 testSubject = createTestSubject();
1348 testSubject.validateAndSetArtifactName(artifactInfo);
1351 @Test(expected = ComponentException.class)
1352 public void testValidateArtifactType_notConfiguredArtifactType() {
1353 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1354 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1355 artifactInfo.setArtifactType("notConfiguredType");
1357 .invoke(artifactsBusinessLogic, "validateArtifactType", artifactInfo, ComponentTypeEnum.RESOURCE);
1360 @Test(expected = ComponentException.class)
1361 public void testValidateArtifactType_componentTypeNotSupportedByArtifactType() {
1362 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1363 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1364 artifactInfo.setArtifactType(ArtifactTypeEnum.WORKFLOW.getType());
1367 .invoke(artifactsBusinessLogic, "validateArtifactType", artifactInfo, ComponentTypeEnum.RESOURCE);
1370 @Test(expected = ComponentException.class)
1371 public void testValidateArtifactType_groupTypeNotSupportedByArtifactType() {
1372 final ArtifactsBusinessLogic artifactsBusinessLogic = createTestSubject();
1373 final ArtifactDefinition artifactInfo = buildArtifactPayload();
1374 artifactInfo.setArtifactType(ArtifactTypeEnum.WORKFLOW.getType());
1375 artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.INFORMATIONAL);
1378 .invoke(artifactsBusinessLogic, "validateArtifactType", artifactInfo, ComponentTypeEnum.SERVICE);
1382 public void testValidateArtifactTypeNotChanged() throws Exception {
1383 ArtifactsBusinessLogic testSubject;
1384 ArtifactDefinition artifactInfo = buildArtifactPayload();
1385 ArtifactDefinition currentArtifact = null;
1386 Either<Boolean, ResponseFormat> result;
1389 testSubject = createTestSubject();
1390 result = Deencapsulation.invoke(testSubject, "validateArtifactTypeNotChanged",
1391 new Object[]{artifactInfo, artifactInfo});
1396 public void testValidateOrSetArtifactGroupType() throws Exception {
1397 ArtifactsBusinessLogic testSubject;
1398 ArtifactDefinition artifactInfo = buildArtifactPayload();
1399 ArtifactDefinition currentArtifact = null;
1400 Either<ArtifactDefinition, ResponseFormat> result;
1403 testSubject = createTestSubject();
1404 result = Deencapsulation.invoke(testSubject, "validateOrSetArtifactGroupType",
1405 new Object[]{artifactInfo, artifactInfo});
1409 public void testCheckAndSetUnUpdatableFields() throws Exception {
1410 ArtifactsBusinessLogic testSubject;
1412 ArtifactDefinition artifactInfo = buildArtifactPayload();
1413 ArtifactDefinition currentArtifact = null;
1414 ArtifactGroupTypeEnum type = null;
1417 testSubject = createTestSubject();
1419 Deencapsulation.invoke(testSubject, "checkAndSetUnUpdatableFields", user,
1420 artifactInfo, artifactInfo, ArtifactGroupTypeEnum.class);
1424 public void testCheckAndSetUnupdatableHeatParams() throws Exception {
1425 ArtifactsBusinessLogic testSubject;
1426 List<HeatParameterDefinition> heatParameters = new ArrayList<>();
1427 List<HeatParameterDefinition> currentParameters = new ArrayList<>();
1431 testSubject = createTestSubject();
1432 Deencapsulation.invoke(testSubject, "checkAndSetUnupdatableHeatParams", new Object[]{heatParameters, currentParameters});
1436 public void testGetMapOfParameters() throws Exception {
1437 ArtifactsBusinessLogic testSubject;
1438 List<HeatParameterDefinition> currentParameters = new ArrayList<>();
1439 Map<String, HeatParameterDefinition> result;
1442 testSubject = createTestSubject();
1443 result = Deencapsulation.invoke(testSubject, "getMapOfParameters", new Object[]{currentParameters});
1447 public void testGivenValidVesEventsArtifactPayload_WhenHandlePayload_ThenResultIsDecodedPayload() {
1448 final byte[] payload = "validYaml: yes".getBytes();
1449 ArtifactDefinition artifactInfo = createArtifactInfo(payload, "ves_events_file.yaml", ArtifactTypeEnum.VES_EVENTS);
1451 final boolean isArtifactMetadataUpdate = false;
1452 ArtifactsBusinessLogic testSubject = getTestSubject();
1454 Either<byte[], ResponseFormat> result = Deencapsulation.invoke(testSubject, "handlePayload",
1455 new Object[] { artifactInfo, isArtifactMetadataUpdate });
1456 assertArrayEquals(payload, result.left().value());
1464 public void testGivenInValidVesEventsArtifactPayload_WhenHandlePayload_ThenResultIsInvalidYaml() {
1465 final int expectedStatus = 100;
1466 when(componentsUtils.getResponseFormat(eq(ActionStatus.INVALID_YAML), any(String.class))).thenReturn(new ResponseFormat(expectedStatus));
1467 final byte[] payload = "invalidYaml".getBytes();
1468 ArtifactDefinition artifactInfo = createArtifactInfo(payload, "ves_events_file.yaml", ArtifactTypeEnum.VES_EVENTS);
1470 final boolean isArtifactMetadataUpdate = false;
1471 ArtifactsBusinessLogic testSubject = getTestSubject();
1472 testSubject.setComponentsUtils(componentsUtils);
1474 Either<byte[], ResponseFormat> result = Deencapsulation.invoke(testSubject, "handlePayload",
1475 new Object[]{artifactInfo, isArtifactMetadataUpdate});
1477 int status = result.right().value().getStatus();
1478 assertEquals(expectedStatus, status);
1482 public void testGivenEmptyVesEventsArtifactPayload_WhenHandlePayload_ThenResultIsMissingData() {
1483 final int expectedStatus = 101;
1484 when(componentsUtils.getResponseFormat(eq(ActionStatus.MISSING_DATA), any(String.class))).thenReturn(new ResponseFormat(expectedStatus));
1485 final byte[] payload = "".getBytes();
1486 ArtifactDefinition artifactInfo = createArtifactInfo(payload, "ves_events_file.yaml", ArtifactTypeEnum.VES_EVENTS);
1488 final boolean isArtifactMetadataUpdate = false;
1489 ArtifactsBusinessLogic testSubject = getTestSubject();
1490 testSubject.setComponentsUtils(componentsUtils);
1492 Either<byte[], ResponseFormat> result = Deencapsulation.invoke(testSubject, "handlePayload",
1493 new Object[]{artifactInfo, isArtifactMetadataUpdate});
1495 int status = result.right().value().getStatus();
1496 assertEquals(expectedStatus, status);
1501 public void testGivenValidHeatArtifactPayload_WhenHandlePayload_ThenResultIsDecodedPayload() {
1502 final byte[] payload = "heat_template_version: 1.0".getBytes();
1503 ArtifactDefinition artifactInfo = createArtifactInfo(payload, "heat_template.yaml", ArtifactTypeEnum.HEAT);
1505 final boolean isArtifactMetadataUpdate = false;
1506 ArtifactsBusinessLogic testSubject = getTestSubject();
1508 Either<byte[], ResponseFormat> result = Deencapsulation.invoke(testSubject, "handlePayload",
1509 new Object[]{artifactInfo, isArtifactMetadataUpdate});
1510 assertArrayEquals(payload, result.left().value());
1514 public void testGivenInValidHeatArtifactPayload_WhenHandlePayload_ThenResultIsInvalidYaml() {
1515 final int expectedStatus = 1000;
1516 when(componentsUtils.getResponseFormat(eq(ActionStatus.INVALID_DEPLOYMENT_ARTIFACT_HEAT), any(String.class))).thenReturn(new ResponseFormat(expectedStatus));
1517 final byte[] payload = "validYaml: butNoHeatTemplateVersion".getBytes();
1518 ArtifactDefinition artifactInfo = createArtifactInfo(payload, "heat_template.yaml", ArtifactTypeEnum.HEAT);
1520 final boolean isArtifactMetadataUpdate = false;
1521 ArtifactsBusinessLogic testSubject = getTestSubject();
1522 testSubject.setComponentsUtils(componentsUtils);
1524 Either<byte[], ResponseFormat> result = Deencapsulation.invoke(testSubject, "handlePayload",
1525 new Object[]{artifactInfo, isArtifactMetadataUpdate});
1527 int status = result.right().value().getStatus();
1528 assertEquals(expectedStatus, status);
1531 private ArtifactDefinition createArtifactInfo(byte[] payload, String artifactName, ArtifactTypeEnum artifactType) {
1532 ArtifactDefinition artifactInfo = new ArtifactDefinition();
1533 artifactInfo.setArtifactName(artifactName);
1534 artifactInfo.setArtifactType(artifactType.getType());
1535 artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
1536 artifactInfo.setPayload(Base64.encodeBase64(payload));
1537 return artifactInfo;
1541 public void testValidateUserRole() throws Exception {
1542 ArtifactsBusinessLogic testSubject;
1544 AuditingActionEnum auditingAction = AuditingActionEnum.ADD_CATEGORY;
1545 String componentId = "";
1546 String artifactId = "";
1547 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
1548 ArtifactsBusinessLogic arb = getTestSubject();
1549 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
1550 Either<Boolean, ResponseFormat> result;
1553 testSubject = createTestSubject();
1554 result = Deencapsulation.invoke(testSubject, "validateUserRole",
1555 new Object[]{user, auditingAction, componentId, artifactId, componentType,
1561 public void testDetectAuditingType() throws Exception {
1562 ArtifactsBusinessLogic testSubject;
1563 ArtifactsBusinessLogic arb = getTestSubject();
1564 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
1565 String origMd5 = "";
1566 AuditingActionEnum result;
1569 testSubject = createTestSubject();
1570 result = Deencapsulation.invoke(testSubject, "detectAuditingType",
1571 new Object[]{operation, origMd5});
1572 assertNotNull(result);
1576 public void testDetectNoAuditingType() throws Exception {
1577 ArtifactsBusinessLogic testSubject;
1578 ArtifactsBusinessLogic arb = getTestSubject();
1579 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.LINK);
1580 String origMd5 = "";
1581 AuditingActionEnum result;
1584 testSubject = createTestSubject();
1585 result = Deencapsulation.invoke(testSubject, "detectAuditingType",
1586 new Object[]{operation, origMd5});
1591 public void testCreateEsArtifactData() throws Exception {
1592 ArtifactsBusinessLogic testSubject;
1593 ArtifactDataDefinition artifactInfo = buildArtifactPayload();
1594 byte[] artifactPayload = new byte[]{' '};
1595 DAOArtifactData result;
1598 testSubject = createTestSubject();
1599 result = testSubject.createEsArtifactData(artifactInfo, artifactPayload);
1600 assertNotNull(result);
1605 public void testIsArtifactMetadataUpdateTrue() throws Exception {
1606 ArtifactsBusinessLogic testSubject;
1607 AuditingActionEnum auditingActionEnum = AuditingActionEnum.ARTIFACT_METADATA_UPDATE;
1611 testSubject = createTestSubject();
1612 result = Deencapsulation.invoke(testSubject, "isArtifactMetadataUpdate",
1613 new Object[]{auditingActionEnum});
1614 assertThat(result).isTrue();
1618 public void testIsArtifactMetadataUpdateFalse() throws Exception {
1619 ArtifactsBusinessLogic testSubject;
1620 AuditingActionEnum auditingActionEnum = AuditingActionEnum.ACTIVATE_SERVICE_BY_API;
1624 testSubject = createTestSubject();
1625 result = Deencapsulation.invoke(testSubject, "isArtifactMetadataUpdate",
1626 new Object[]{auditingActionEnum});
1627 assertThat(result).isFalse();
1631 public void testIsDeploymentArtifactTrue() throws Exception {
1632 ArtifactsBusinessLogic testSubject;
1633 ArtifactDefinition artifactInfo = buildArtifactPayload();
1634 artifactInfo.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
1638 testSubject = createTestSubject();
1639 result = Deencapsulation.invoke(testSubject, "isDeploymentArtifact", new Object[]{artifactInfo});
1640 assertThat(result).isTrue();
1644 public void testIsDeploymentArtifactFalse() throws Exception {
1645 ArtifactsBusinessLogic testSubject;
1646 ArtifactDefinition artifactInfo = buildArtifactPayload(); // artifactGroupType == ArtifactGroupTypeEnum.TOSCA
1650 testSubject = createTestSubject();
1651 result = Deencapsulation.invoke(testSubject, "isDeploymentArtifact", new Object[]{artifactInfo});
1652 assertThat(result).isFalse();
1656 public void testSetArtifactPlaceholderCommonFields() throws Exception {
1657 ArtifactsBusinessLogic testSubject;
1658 String resourceId = ES_ARTIFACT_ID;
1660 ArtifactDefinition artifactInfo = buildArtifactPayload();
1663 testSubject = createTestSubject();
1664 Deencapsulation.invoke(testSubject, "setArtifactPlaceholderCommonFields",
1665 resourceId, user, artifactInfo);
1666 assertEquals(resourceId + "." +ARTIFACT_LABEL, artifactInfo.getUniqueId());
1667 assertEquals(user.getFullName(), artifactInfo.getCreatorFullName());
1672 public void testCreateEsHeatEnvArtifactDataFromString() throws Exception {
1673 ArtifactsBusinessLogic testSubject;
1674 ArtifactDefinition artifactDefinition = buildArtifactPayload();
1675 String payloadStr = "";
1676 Either<DAOArtifactData, ResponseFormat> result;
1679 testSubject = createTestSubject();
1680 result = Deencapsulation.invoke(testSubject, "createEsHeatEnvArtifactDataFromString",
1681 new Object[]{artifactDefinition, payloadStr});
1682 assertThat(result.isLeft()).isTrue();
1686 public void testUpdateArtifactOnGroupInstance() throws Exception {
1687 ArtifactsBusinessLogic testSubject;
1688 ComponentTypeEnum componentType = ComponentTypeEnum.RESOURCE;
1689 Component component = createResourceObject(true);
1690 String instanceId = "";
1691 String prevUUID = "";
1692 ArtifactDefinition artifactInfo = buildArtifactPayload();
1693 Either<ArtifactDefinition, ResponseFormat> result;
1696 testSubject = createTestSubject();
1697 result = testSubject.updateArtifactOnGroupInstance(component, instanceId, prevUUID, artifactInfo, artifactInfo);
1698 assertThat(result.isLeft()).isTrue();
1702 public void testGenerateHeatEnvPayload() throws Exception {
1703 ArtifactsBusinessLogic testSubject;
1704 ArtifactDefinition artifactDefinition = buildArtifactPayload();
1708 testSubject = createTestSubject();
1709 result = Deencapsulation.invoke(testSubject, "generateHeatEnvPayload",
1710 new Object[]{artifactDefinition});
1711 assertThat(result.isEmpty()).isFalse();
1716 public void testBuildJsonForUpdateArtifact() throws Exception {
1717 ArtifactsBusinessLogic testSubject;
1718 ArtifactDefinition artifactInfo = buildArtifactPayload();
1719 ArtifactGroupTypeEnum artifactGroupType = ArtifactGroupTypeEnum.DEPLOYMENT;
1720 List<ArtifactTemplateInfo> updatedRequiredArtifacts = new ArrayList<>();
1721 Map<String, Object> result;
1724 testSubject = createTestSubject();
1725 result = testSubject.buildJsonForUpdateArtifact(artifactInfo, artifactGroupType, updatedRequiredArtifacts);
1726 assertThat(MapUtils.isNotEmpty(result)).isTrue();
1730 public void testBuildJsonForUpdateArtifact_1() throws Exception {
1731 ArtifactsBusinessLogic testSubject;
1732 String artifactId = "";
1733 String artifactName = "";
1734 String artifactType = "";
1735 ArtifactGroupTypeEnum artifactGroupType = ArtifactGroupTypeEnum.DEPLOYMENT;
1737 String displayName = "";
1738 String description = "";
1739 byte[] artifactContent = new byte[]{' '};
1740 List<ArtifactTemplateInfo> updatedRequiredArtifacts = new ArrayList<>();
1741 List<HeatParameterDefinition> heatParameters = new ArrayList<>();
1742 Map<String, Object> result;
1745 testSubject = createTestSubject();
1747 result = testSubject.buildJsonForUpdateArtifact(artifactId, artifactName, artifactType, artifactGroupType,
1748 label, displayName, description, artifactContent, updatedRequiredArtifacts, heatParameters);
1749 assertThat(MapUtils.isNotEmpty(result)).isTrue();
1754 public void testNotReplaceCurrHeatValueWithUpdatedValue() throws Exception {
1755 ArtifactsBusinessLogic testSubject;
1756 List<HeatParameterDefinition> currentHeatEnvParams = new ArrayList<>();
1757 List<HeatParameterDefinition> updatedHeatEnvParams = new ArrayList<>();
1761 testSubject = createTestSubject();
1762 boolean result = Deencapsulation.invoke(testSubject, "replaceCurrHeatValueWithUpdatedValue", new Object[]{currentHeatEnvParams, updatedHeatEnvParams});
1763 assertThat(result).isFalse();
1768 public void testReplaceCurrHeatValueWithUpdatedValue() throws Exception {
1769 ArtifactsBusinessLogic testSubject;
1770 HeatParameterDefinition hpdOrig = new HeatParameterDefinition();
1771 hpdOrig.setName("param1");
1772 hpdOrig.setCurrentValue("value1");
1774 HeatParameterDefinition hpdUpd = new HeatParameterDefinition();
1775 hpdUpd.setName("param1");
1776 hpdUpd.setCurrentValue("value2");
1778 List<HeatParameterDefinition> currentHeatEnvParams = new ArrayList<>();
1779 currentHeatEnvParams.add(hpdOrig);
1781 List<HeatParameterDefinition> updatedHeatEnvParams = new ArrayList<>();
1782 updatedHeatEnvParams.add(hpdUpd);
1785 testSubject = createTestSubject();
1786 boolean result = Deencapsulation.invoke(testSubject, "replaceCurrHeatValueWithUpdatedValue", new Object[]{currentHeatEnvParams, updatedHeatEnvParams});
1787 assertThat(result).isTrue();
1788 assertEquals(hpdUpd.getCurrentValue(), hpdOrig.getCurrentValue());
1793 public void testExtractArtifactDefinition() throws Exception {
1794 ArtifactsBusinessLogic testSubject;
1795 ArtifactDefinition artifactDefinition = buildArtifactPayload();
1796 Either<ArtifactDefinition, Operation> eitherArtifact = Either.left(artifactDefinition);
1797 ArtifactDefinition result;
1800 testSubject = createTestSubject();
1801 result = testSubject.extractArtifactDefinition(eitherArtifact);
1802 assertNotNull(result);
1803 assertEquals(artifactDefinition, result);
1808 public void testSetHeatCurrentValuesOnHeatEnvDefaultValues() throws Exception {
1809 ArtifactsBusinessLogic testSubject;
1810 ArtifactDefinition artifact = buildArtifactPayload();
1811 ArtifactDefinition artifactInfo = new ArtifactDefinition();
1813 HeatParameterDefinition hpdOrig = new HeatParameterDefinition();
1814 hpdOrig.setName("param1");
1815 hpdOrig.setCurrentValue("value1");
1816 List<HeatParameterDefinition> currentHeatEnvParams = new ArrayList<>();
1817 currentHeatEnvParams.add(hpdOrig);
1818 artifact.setListHeatParameters(currentHeatEnvParams);
1821 testSubject = createTestSubject();
1822 Deencapsulation.invoke(testSubject, "setHeatCurrentValuesOnHeatEnvDefaultValues",
1823 artifact, artifactInfo);
1825 assertNotEquals(artifact, artifactInfo);
1826 assertEquals(1, artifact.getListHeatParameters().size());
1827 assertEquals(1, artifactInfo.getListHeatParameters().size());
1829 String hpdOrigCurrValue = artifact.getListHeatParameters().get(0).getCurrentValue();
1830 String hpdNewDefaultValue = artifactInfo.getListHeatParameters().get(0).getDefaultValue();
1832 assertEquals(hpdOrigCurrValue, hpdNewDefaultValue);
1836 public void testBuildHeatEnvFileNameArtifactNameNotNull() throws Exception {
1837 String heatEnvExt = "zip";
1838 ArtifactsBusinessLogic testSubject;
1839 ArtifactDefinition heatArtifact = buildArtifactPayload();
1840 ArtifactDefinition heatEnvArtifact = new ArtifactDefinition();
1841 Map<String, Object> placeHolderData = new HashMap<>();
1842 placeHolderData.put(ARTIFACT_PLACEHOLDER_FILE_EXTENSION, heatEnvExt);
1843 String artName = ARTIFACT_NAME.split("\\.")[0];
1846 testSubject = createTestSubject();
1847 Deencapsulation.invoke(testSubject, "buildHeatEnvFileName", new Object[]{heatArtifact, heatEnvArtifact, placeHolderData});
1848 assertThat(heatEnvArtifact.getArtifactName().startsWith(artName)).isTrue();
1849 assertThat(heatEnvArtifact.getArtifactName().endsWith(heatEnvExt)).isTrue();
1853 public void testBuildHeatEnvFileNameArtifactNameIsNull() throws Exception {
1854 String heatEnvExt = "zip";
1855 ArtifactsBusinessLogic testSubject;
1856 ArtifactDefinition heatArtifact = buildArtifactPayload();
1857 heatArtifact.setArtifactName(null);
1858 ArtifactDefinition heatEnvArtifact = new ArtifactDefinition();
1859 Map<String, Object> placeHolderData = new HashMap<>();
1860 placeHolderData.put(ARTIFACT_PLACEHOLDER_FILE_EXTENSION, heatEnvExt);
1863 testSubject = createTestSubject();
1864 Deencapsulation.invoke(testSubject, "buildHeatEnvFileName", new Object[]{heatArtifact, heatEnvArtifact, placeHolderData});
1865 assertThat(heatEnvArtifact.getArtifactName().startsWith(ARTIFACT_LABEL)).isTrue();
1866 assertThat(heatEnvArtifact.getArtifactName().endsWith(heatEnvExt)).isTrue();
1870 public void testHandleEnvArtifactVersion() throws Exception {
1871 ArtifactsBusinessLogic testSubject;
1872 String existingVersion = "1.0";
1873 ArtifactDefinition artifactInfo = buildArtifactPayload();
1874 Map<String, String> existingEnvVersions = new HashMap<>();
1875 existingEnvVersions.put(artifactInfo.getArtifactName(), existingVersion);
1878 testSubject = createTestSubject();
1879 Deencapsulation.invoke(testSubject, "handleEnvArtifactVersion", artifactInfo, existingEnvVersions);
1880 assertEquals(existingVersion, artifactInfo.getArtifactVersion());
1884 public void testHandleArtifactsRequestForInnerVfcComponent() throws Exception {
1885 ArtifactsBusinessLogic testSubject;
1886 List<ArtifactDefinition> artifactsToHandle = new ArrayList<>();
1887 Resource component = createResourceObject(true);
1889 List<ArtifactDefinition> vfcsNewCreatedArtifacts = new ArrayList<>();
1890 ArtifactsBusinessLogic arb = getTestSubject();
1891 ArtifactOperationInfo operation = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
1892 boolean shouldLock = false;
1893 boolean inTransaction = false;
1894 List<ArtifactDefinition> result;
1897 testSubject = createTestSubject();
1898 result = testSubject.handleArtifactsForInnerVfcComponent(artifactsToHandle, component, user,
1899 vfcsNewCreatedArtifacts, operation, shouldLock, inTransaction);
1901 assertThat(CollectionUtils.isEmpty(result)).isTrue();
1905 public void testSetNodeTemplateOperation() throws Exception {
1906 ArtifactsBusinessLogic testSubject;
1907 NodeTemplateOperation nodeTemplateOperation = new NodeTemplateOperation();
1910 testSubject = createTestSubject();
1911 Deencapsulation.invoke(testSubject, "setNodeTemplateOperation", nodeTemplateOperation);
1912 assertEquals(Deencapsulation.getField(testSubject, "nodeTemplateOperation"), nodeTemplateOperation);
1916 @Test(expected = ComponentException.class)
1917 public void validateDeploymentArtifact_invalidComponentType() {
1918 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
1919 Component component = new Resource();
1920 component.setComponentType(ComponentTypeEnum.PRODUCT);
1921 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1923 .invoke(artifactsBusinessLogic, "validateDeploymentArtifact", artifactDefinition, component);
1926 @Test(expected = ComponentException.class)
1927 public void validateDeploymentArtifact_notConfiguredArtifactType() {
1928 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
1929 Component component = new Resource();
1930 component.setComponentType(ComponentTypeEnum.RESOURCE);
1931 artifactDefinition.setArtifactType("NotConfiguredType");
1932 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1934 .invoke(artifactsBusinessLogic, "validateDeploymentArtifact", artifactDefinition, component);
1937 @Test(expected = ComponentException.class)
1938 public void validateDeploymentArtifact_unsupportedResourceType() {
1939 final ArtifactDefinition artifactDefinition = new ArtifactDefinition();
1940 artifactDefinition.setArtifactType(ArtifactTypeEnum.ANSIBLE_PLAYBOOK.getType());
1941 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
1942 final Resource resourceComponent = new Resource();
1943 resourceComponent.setComponentType(ComponentTypeEnum.RESOURCE);
1944 resourceComponent.setResourceType(ResourceTypeEnum.ServiceProxy);
1945 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1947 .invoke(artifactsBusinessLogic, "validateDeploymentArtifact", artifactDefinition, resourceComponent);
1951 public void validateDeploymentArtifact_validArtifact() {
1952 final ArtifactDefinition artifactDefinition = new ArtifactDefinition();
1953 artifactDefinition.setArtifactType(ArtifactTypeEnum.YANG.getType());
1954 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.INFORMATIONAL);
1955 final Resource resourceComponent = new Resource();
1956 resourceComponent.setComponentType(ComponentTypeEnum.RESOURCE);
1957 resourceComponent.setResourceType(ResourceTypeEnum.VF);
1958 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1959 assertThatCode(() -> {
1961 .invoke(artifactsBusinessLogic, "validateDeploymentArtifact", artifactDefinition, resourceComponent);
1962 }).doesNotThrowAnyException();
1967 public void validateHeatArtifact_validArtifact() {
1968 final ArtifactDefinition artifactDefinition = new ArtifactDefinition();
1969 artifactDefinition.setArtifactType(ArtifactTypeEnum.HEAT.getType());
1970 artifactDefinition.setTimeout(1);
1971 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
1972 assertThatCode(() -> {
1974 .invoke(artifactsBusinessLogic, "validateHeatArtifact", new Resource(), "componentId", artifactDefinition);
1975 }).doesNotThrowAnyException();
1979 public void validateInputForResourceInstance() {
1980 final String artifactId = "artifactId";
1981 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
1982 artifactDefinition.setUniqueId(artifactId);
1983 artifactDefinition.setArtifactName(ARTIFACT_NAME);
1984 artifactDefinition.setArtifactType(ArtifactTypeEnum.SNMP_POLL.getType());
1985 artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
1986 artifactDefinition.setEsId(ES_ARTIFACT_ID);
1987 artifactDefinition.setPayload(PAYLOAD);
1988 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.INFORMATIONAL);
1989 artifactDefinition.setDescription("artifact description");
1990 artifactDefinition.setServiceApi(true);
1991 artifactDefinition.setApiUrl("dumbUrl");
1993 final User user = new User();
1994 user.setUserId("userId");
1995 user.setRole(Role.ADMIN.name());
1997 final String parentId = "parentId";
1998 final Service service = new Service();
1999 service.setComponentType(ComponentTypeEnum.SERVICE);
2000 service.setUniqueId(parentId);
2001 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
2002 service.setLastUpdaterUserId(user.getUserId());
2004 final ArtifactOperationInfo operationInfo =
2005 new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
2007 final String componentId = "componentId";
2008 final ComponentInstance componentInstance = new ComponentInstance();
2009 componentInstance.setUniqueId(componentId);
2010 componentInstance.setComponentUid(componentId);
2011 service.setComponentInstances(Collections.singletonList(componentInstance));
2013 final Resource resource = new Resource();
2014 when(toscaOperationFacade.getToscaFullElement(componentId)).thenReturn(Either.left(resource));
2015 when(artifactToscaOperation.getAllInstanceArtifacts(parentId, componentId)).thenReturn(Either.left(new HashMap<>()));
2017 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
2018 artifactsBusinessLogic.setToscaOperationFacade(toscaOperationFacade);
2019 Object result = Deencapsulation
2020 .invoke(artifactsBusinessLogic, "validateInput", componentId, artifactDefinition, operationInfo, artifactId,
2021 user, "interfaceName", ARTIFACT_LABEL, ComponentTypeEnum.RESOURCE_INSTANCE, service);
2022 assertTrue(result instanceof Either<?, ?>);
2023 assertTrue(((Either<?, ?>) result).isLeft());
2025 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
2027 result = Deencapsulation
2028 .invoke(artifactsBusinessLogic, "validateInput", componentId, artifactDefinition, operationInfo, artifactId,
2029 user, "interfaceName", ARTIFACT_LABEL, ComponentTypeEnum.RESOURCE_INSTANCE, service);
2030 assertTrue(result instanceof Either<?, ?>);
2031 assertTrue(((Either<?, ?>) result).isLeft());
2035 public void validateInputForResourceInstanceDeploymentArtifact() {
2036 final String artifactId = "artifactId";
2037 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2038 artifactDefinition.setUniqueId(artifactId);
2039 artifactDefinition.setArtifactName(ARTIFACT_NAME);
2040 artifactDefinition.setArtifactType(ArtifactTypeEnum.SNMP_POLL.getType());
2041 artifactDefinition.setArtifactLabel(ARTIFACT_LABEL);
2042 artifactDefinition.setEsId(ES_ARTIFACT_ID);
2043 artifactDefinition.setPayload(PAYLOAD);
2044 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.DEPLOYMENT);
2045 artifactDefinition.setDescription("artifact description");
2047 final User user = new User();
2048 user.setUserId("userId");
2049 user.setRole(Role.ADMIN.name());
2051 final String parentId = "parentId";
2052 final Service service = new Service();
2053 service.setComponentType(ComponentTypeEnum.SERVICE);
2054 service.setUniqueId(parentId);
2055 service.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
2056 service.setLastUpdaterUserId(user.getUserId());
2058 final ArtifactOperationInfo operationInfo =
2059 new ArtifactOperationInfo(false, false, ArtifactOperationEnum.CREATE);
2061 final String componentId = "componentId";
2062 final ComponentInstance componentInstance = new ComponentInstance();
2063 componentInstance.setUniqueId(componentId);
2064 componentInstance.setComponentUid(componentId);
2065 service.setComponentInstances(Collections.singletonList(componentInstance));
2067 final Resource resource = new Resource();
2068 when(toscaOperationFacade.getToscaFullElement(componentId)).thenReturn(Either.left(resource));
2069 when(artifactToscaOperation.getAllInstanceArtifacts(parentId, componentId)).thenReturn(Either.left(new HashMap<>()));
2071 final ArtifactsBusinessLogic artifactsBusinessLogic = getTestSubject();
2072 artifactsBusinessLogic.setToscaOperationFacade(toscaOperationFacade);
2074 final Object result = Deencapsulation
2075 .invoke(artifactsBusinessLogic, "validateInput", componentId, artifactDefinition, operationInfo, artifactId,
2076 user, "interfaceName", ARTIFACT_LABEL, ComponentTypeEnum.RESOURCE_INSTANCE, service);
2077 assertTrue(result instanceof Either<?, ?>);
2078 assertTrue(((Either<?, ?>) result).isLeft());
2083 public void testHandleArtifactRequest() {
2085 String componentId = "componentId";
2086 ArtifactOperationInfo operationInfo = new ArtifactOperationInfo(false, false, ArtifactOperationEnum.UPDATE);
2087 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2088 artifactDefinition.setArtifactName("other");
2089 artifactDefinition.setUniqueId("artifactId");
2090 artifactDefinition.setPayload("Test".getBytes());
2091 artifactDefinition.setArtifactLabel("other");
2092 artifactDefinition.setDescription("Test artifact");
2093 artifactDefinition.setArtifactType(ArtifactTypeEnum.OTHER.getType());
2094 artifactDefinition.setArtifactUUID("artifactUId");
2095 artifactDefinition.setArtifactLabel("test");
2096 artifactDefinition.setArtifactDisplayName("Test");
2097 artifactDefinition.setEsId("esId");
2099 String requestMd5 = GeneralUtility.calculateMD5Base64EncodedByString("data");
2100 User user = new User();
2101 user.setUserId("userId");
2103 List<ComponentInstance> componentInstanceList = new ArrayList<>();
2104 List<InterfaceDefinition> interfaceDefinitionsList = new ArrayList<>();
2105 Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
2106 Map<String, Operation> operationsMap = new HashMap<>();
2107 artifactDefinitionMap.put("sample", artifactDefinition);
2109 ComponentInstance componentInstance = new ComponentInstance();
2110 componentInstance.setUniqueId(componentId);
2111 componentInstance.setDeploymentArtifacts(artifactDefinitionMap);
2112 componentInstanceList.add(componentInstance);
2114 Operation operation = new Operation();
2115 operation.setUniqueId("ouuid");
2116 operation.setName("operation1");
2117 operation.setImplementation(artifactDefinition);
2118 operationsMap.put("op1", operation);
2120 Map<String, InterfaceDefinition> interfaceDefinitions = new HashMap<>();
2122 InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
2123 interfaceDefinition.setType("iuuid");
2124 interfaceDefinition.setOperationsMap(operationsMap);
2125 interfaceDefinitions.put("iuuid", interfaceDefinition);
2127 interfaceDefinitionsList.add(interfaceDefinition);
2129 ResourceMetadataDataDefinition resourceMetadaData = new ResourceMetadataDataDefinition();
2130 resourceMetadaData.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT.name());
2131 resourceMetadaData.setLastUpdaterUserId(user.getUserId());
2132 Resource resource = new Resource(new ResourceMetadataDefinition(resourceMetadaData));
2133 resource.setComponentInstances(componentInstanceList);
2134 resource.setUniqueId(componentId);
2135 resource.setInterfaces(interfaceDefinitions);
2137 user.setRole(Role.ADMIN.name());
2139 when(userValidations.validateUserExists(Mockito.eq("userId")))
2141 when(toscaOperationFacade.getToscaFullElement(any()))
2142 .thenReturn(Either.left(resource));
2143 when(artifactToscaOperation.getArtifactById(any(), any(), any(), any()))
2144 .thenReturn(Either.left(artifactDefinition));
2145 when(artifactsResolver.findArtifactOnComponent(any(), any(ComponentTypeEnum.class), anyString()))
2146 .thenReturn(artifactDefinition);
2147 when(graphLockOperation.lockComponent(eq(resource.getUniqueId()), any(NodeTypeEnum.class)))
2148 .thenReturn(StorageOperationStatus.OK);
2149 when(artifactToscaOperation.updateArtifactOnResource(any(ArtifactDefinition.class), any(), anyString(), any(NodeTypeEnum.class), any(), anyBoolean()))
2150 .thenReturn(Either.left(artifactDefinition));
2151 when(artifactCassandraDao.saveArtifact(any(DAOArtifactData.class)))
2152 .thenReturn(CassandraOperationStatus.OK);
2153 when(toscaOperationFacade.getToscaElement(anyString()))
2154 .thenReturn(Either.left(resource));
2155 when(interfaceOperation.updateInterfaces(anyString(), anyList()))
2156 .thenReturn(Either.left(interfaceDefinitionsList));
2157 when(artifactToscaOperation.getAllInstanceArtifacts(resource.getUniqueId(), componentId)).thenReturn(Either.left(artifactDefinitionMap));
2158 when(toscaOperationFacade.generateCustomizationUUIDOnInstance(any(), any())).thenReturn(StorageOperationStatus.OK);
2160 Either<ArtifactDefinition, Operation> result = artifactBL.handleArtifactRequest(componentId, user.getUserId(), ComponentTypeEnum.RESOURCE_INSTANCE
2161 , operationInfo, artifactDefinition.getUniqueId(), artifactDefinition, requestMd5, "data", "iuuid",
2162 null, componentId, "resources");
2164 assertThat(result.isLeft()).isTrue();
2165 ArtifactDefinition leftValue = result.left().value();
2166 assertEquals(artifactDefinition.getArtifactName(), leftValue.getArtifactName());
2170 public void testGenerateToscaArtifact() {
2172 Resource resource = new Resource();
2173 resource.setComponentType(ComponentTypeEnum.RESOURCE);
2174 resource.setUniqueId("resourceId");
2176 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2177 artifactDefinition.setUniqueId("artifactId");
2178 artifactDefinition.setArtifactType(ArtifactTypeEnum.TOSCA_CSAR.getType());
2179 User user = new User();
2180 boolean inCertificationRequest = false;
2181 boolean fetchTemplatesFromDB = false;
2182 boolean shouldLock = false;
2183 boolean inTransaction = false;
2185 byte[] csar = "test.csar".getBytes();
2187 when(csarUtils.createCsar(any(Component.class), anyBoolean(), anyBoolean()))
2188 .thenReturn(Either.left(csar));
2189 when(artifactToscaOperation.updateArtifactOnResource(any(ArtifactDefinition.class), any(Component.class), anyString(), any(NodeTypeEnum.class), anyString(), anyBoolean()))
2190 .thenReturn(Either.left(artifactDefinition));
2191 when(artifactCassandraDao.saveArtifact(any(DAOArtifactData.class)))
2192 .thenReturn(CassandraOperationStatus.OK);
2194 Either<ArtifactDefinition, Operation> result
2195 = artifactBL.generateAndSaveToscaArtifact(artifactDefinition, resource, user, inCertificationRequest,
2196 shouldLock, inTransaction, fetchTemplatesFromDB);
2199 Assert.assertEquals(artifactDefinition.getUniqueId(), result.left().value().getUniqueId());
2203 public void testHandleDownloadToscaModelRequest() {
2204 ArtifactsBusinessLogic testSubject = getTestSubject();
2205 byte[] generatedCsar = "test.csar".getBytes();
2207 Resource resource = new Resource();
2208 resource.setComponentType(ComponentTypeEnum.RESOURCE);
2210 ArtifactDefinition csarArtifact = new ArtifactDefinition();
2211 csarArtifact.setArtifactName("csarArtifact");
2212 csarArtifact.setArtifactType(ArtifactTypeEnum.HEAT_ENV.getType());
2213 csarArtifact.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
2215 when(csarUtils.createCsar(any(Component.class), anyBoolean(), anyBoolean()))
2216 .thenReturn(Either.left(generatedCsar));
2218 ImmutablePair<String, byte[]> result =
2219 testSubject.handleDownloadToscaModelRequest(resource, csarArtifact);
2221 assertEquals(csarArtifact.getArtifactName(), result.getKey());
2225 public void testHandleDownloadRequestById_returnsSuccessful() {
2226 String componentId = "componentId";
2227 String artifactId = "artifactId";
2228 String parentId = "parentId";
2230 DAOArtifactData daoArtifactData = new DAOArtifactData();
2231 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2232 InterfaceDefinition interfaceDefinition = new InterfaceDefinition();
2233 Operation operation = new Operation();
2234 operation.setUniqueId("op1");
2236 artifactDefinition.setArtifactName("test.csar");
2237 artifactDefinition.setArtifactType(ComponentTypeEnum.RESOURCE.name());
2238 artifactDefinition.setArtifactType(ArtifactTypeEnum.HEAT.getType());
2239 artifactDefinition.setUniqueId(artifactId);
2240 artifactDefinition.setArtifactGroupType(ArtifactGroupTypeEnum.TOSCA);
2242 daoArtifactData.setDataAsArray("data".getBytes());
2244 Resource resource = new Resource();
2245 resource.setUniqueId("resourceId");
2246 resource.setAbstract(false);
2248 Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
2249 Map<String, InterfaceDefinition> interfaceDefinitionMap = new HashMap<>();
2250 interfaceDefinitionMap.put("interDef1", interfaceDefinition);
2252 artifactDefinitionMap.put("artifact1", artifactDefinition);
2254 resource.setDeploymentArtifacts(artifactDefinitionMap);
2256 User user = new User();
2257 user.setUserId("userId");
2259 when(userValidations.validateUserExists(eq(user.getUserId())))
2261 when(toscaOperationFacade.getToscaFullElement(eq(componentId)))
2262 .thenReturn(Either.left(resource));
2263 when(artifactToscaOperation.getArtifactById(anyString(), anyString(), any(ComponentTypeEnum.class), anyString()))
2264 .thenReturn(Either.left(artifactDefinition));
2265 when(artifactCassandraDao.getArtifact(any()))
2266 .thenReturn(Either.left(daoArtifactData));
2267 when(graphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
2269 ImmutablePair<String, byte[]> result =
2270 artifactBL.handleDownloadRequestById(componentId, artifactId, user.getUserId(), ComponentTypeEnum.RESOURCE,
2272 Assert.assertEquals(artifactDefinition.getArtifactName(), result.getKey());
2276 public void testHandleDownloadRequestById_givenUserIdIsNull_thenReturnsError() {
2277 String componentId = "componentId";
2278 String userId = null;
2279 String artifactId = "artifactId";
2282 ImmutablePair<String, byte[]> result =
2283 artifactBL.handleDownloadRequestById(componentId, artifactId, userId, ComponentTypeEnum.RESOURCE, componentId
2285 } catch (ComponentException e) {
2286 assertEquals(e.getActionStatus(), ActionStatus.MISSING_INFORMATION);
2293 public void testHandleGetArtifactByType_returnsSuccessful() {
2294 String parentId = "parentId";
2295 String componentId = "componentId";
2296 String artifactGroupType = ArtifactGroupTypeEnum.OTHER.name();
2297 String userId = "userId";
2299 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2300 artifactDefinition.setArtifactName("test.csar");
2302 Map<String, ArtifactDefinition> artifactDefinitionMap = new HashMap<>();
2303 artifactDefinitionMap.put("artifact1", artifactDefinition);
2305 Service service = new Service();
2306 service.setUniqueId(componentId);
2308 when(toscaOperationFacade.getToscaElement(eq(componentId), any(ComponentParametersView.class)))
2309 .thenReturn(Either.left(service));
2310 when(graphLockOperation.lockComponent(eq(componentId), any(NodeTypeEnum.class)))
2311 .thenReturn(StorageOperationStatus.OK);
2312 when(artifactToscaOperation.getArtifacts(any(), any(NodeTypeEnum.class), any(ArtifactGroupTypeEnum.class), any()))
2313 .thenReturn(Either.left(artifactDefinitionMap));
2315 Map<String, ArtifactDefinition> result =
2316 artifactBL.handleGetArtifactsByType(ComponentTypeEnum.SERVICE.name(), parentId, ComponentTypeEnum.SERVICE,
2317 componentId, artifactGroupType, userId);
2318 Assert.assertEquals(artifactDefinition.getArtifactName(), result.get("artifact1").getArtifactName());
2322 public void testGetDeployment_returnsSuccessful() {
2324 Resource resource = new Resource();
2325 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2326 ComponentInstance componentInstance = new ComponentInstance();
2327 NodeTypeEnum parentType = NodeTypeEnum.ResourceInstance;
2328 String ciId = "ciId";
2330 artifactDefinition.setArtifactName("test.csar");
2331 componentInstance.setUniqueId(ciId);
2332 List<ComponentInstance> componentInstanceList = new ArrayList<>();
2333 componentInstanceList.add(componentInstance);
2335 Map<String, ArtifactDefinition> deploymentArtifacts = new HashMap<>();
2336 deploymentArtifacts.put("test.csar", artifactDefinition);
2338 resource.setDeploymentArtifacts(deploymentArtifacts);
2339 resource.setComponentInstances(componentInstanceList);
2340 componentInstance.setDeploymentArtifacts(deploymentArtifacts);
2342 List<ArtifactDefinition> result = artifactBL.getDeploymentArtifacts(resource, ciId);
2343 assertThat(result.size() == 1).isTrue();
2344 Assert.assertEquals(artifactDefinition.getArtifactName(), result.get(0).getArtifactName());
2348 public void testHandleDelete_returnsSuccessful() {
2350 String parentId = "parentId";
2351 String artifactId = "artifactId";
2352 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2353 Resource resource = new Resource();
2354 User user = new User();
2356 artifactDefinition.setArtifactName("test.csar");
2357 artifactDefinition.setUniqueId(artifactId);
2358 artifactDefinition.setEsId("esId");
2360 ArtifactDataDefinition artifactDataDefinition = new ArtifactDataDefinition();
2362 Map<String, ArtifactDefinition> deploymentArtifacts = new HashMap<>();
2363 deploymentArtifacts.put(artifactId, artifactDefinition);
2365 resource.setUniqueId(parentId);
2366 resource.setComponentType(ComponentTypeEnum.RESOURCE);
2367 resource.setDeploymentArtifacts(deploymentArtifacts);
2369 when(graphLockOperation.lockComponent(eq(parentId), any(NodeTypeEnum.class)))
2370 .thenReturn(StorageOperationStatus.OK);
2371 when(toscaOperationFacade.getToscaElement(eq(parentId)))
2372 .thenReturn(Either.left(resource));
2373 when(artifactToscaOperation.isCloneNeeded(any(), any(ArtifactDefinition.class), any(NodeTypeEnum.class)))
2374 .thenReturn(Either.left(Boolean.FALSE));
2375 when(artifactToscaOperation.removeArtifactOnGraph(any(ArtifactDefinition.class), any(), any(), any(NodeTypeEnum.class), anyBoolean()))
2376 .thenReturn(Either.left(artifactDataDefinition));
2377 when(artifactCassandraDao.deleteArtifact(any()))
2378 .thenReturn(CassandraOperationStatus.OK);
2380 Either<ArtifactDefinition, ResponseFormat> result = artifactBL.handleDelete(
2381 parentId, artifactId, user, resource, true, false);
2382 Assert.assertEquals(artifactDefinition.getArtifactName(), result.left().value().getArtifactName());
2386 public void testDownloadRsrcArtifactByNames_givenServiceNameNull_thenReturnsError() {
2387 String serviceName = null;
2388 String serviceVersion = "2.0";
2389 String resourceName = "resource";
2390 String resourceVersion = "1.0";
2391 String artifactName = "artifactName";
2394 artifactBL.downloadRsrcArtifactByNames(serviceName, serviceVersion, resourceName, resourceVersion, artifactName);
2395 } catch(ComponentException e) {
2396 assertEquals(ActionStatus.INVALID_CONTENT, e.getActionStatus());
2404 public void testDownloadRsrcArtifactByNames_returnsSuccessful() {
2406 String serviceName = "service1";
2407 String resourceName = "resource1";
2408 String artifactName = "artifact1";
2409 String version = "1.0";
2411 Resource resource = new Resource();
2412 resource.setName(resourceName);
2413 resource.setVersion(version);
2415 Service service = new Service();
2416 service.setVersion(version);
2417 service.setName(serviceName);
2419 ArtifactDefinition artifactDefinition = new ArtifactDefinition();
2420 artifactDefinition.setEsId("esId");
2422 DAOArtifactData esArtifactData = new DAOArtifactData();
2423 esArtifactData.setDataAsArray("test".getBytes());
2425 artifactDefinition.setArtifactName(artifactName);
2426 List<Service> serviceList = new ArrayList<>();
2427 Map<String, ArtifactDefinition> artifacts = new HashMap<>();
2428 artifacts.put(artifactName, artifactDefinition);
2430 serviceList.add(service);
2431 resource.setDeploymentArtifacts(artifacts);
2433 when(toscaOperationFacade.getComponentByNameAndVersion(eq(ComponentTypeEnum.RESOURCE), eq(resourceName), eq(version), eq(JsonParseFlagEnum.ParseMetadata)))
2434 .thenReturn(Either.left(resource));
2435 doReturn(Either.left(serviceList)).when(toscaOperationFacade).getBySystemName(eq(ComponentTypeEnum.SERVICE), eq(serviceName));
2436 when(artifactCassandraDao.getArtifact(any()))
2437 .thenReturn(Either.left(esArtifactData));
2439 byte[] result = artifactBL.downloadRsrcArtifactByNames(serviceName, version, resourceName, version, artifactName);
2440 Assert.assertEquals(esArtifactData.getDataAsArray(), result);
2443 private ArtifactsBusinessLogic getTestSubject() {
2444 final ArtifactsBusinessLogic artifactsBusinessLogic = new ArtifactsBusinessLogic(artifactCassandraDao,
2445 toscaExportHandler, csarUtils, lifecycleBusinessLogic,
2446 userBusinessLogic, artifactsResolver, elementDao, groupOperation, groupInstanceOperation,
2448 interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation, artifactTypeOperation);
2449 artifactsBusinessLogic.setComponentsUtils(componentsUtils);
2450 return artifactsBusinessLogic;