2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 AT&T Intellectual Property. All rights reserved.
6 * ================================================================================
7 * Licensed under the Apache License, Version 2.0 (the "License");
8 * you may not use this file except in compliance with the License.
9 * You may obtain a copy of the License at
11 * http://www.apache.org/licenses/LICENSE-2.0
13 * Unless required by applicable law or agreed to in writing, software
14 * distributed under the License is distributed on an "AS IS" BASIS,
15 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16 * See the License for the specific language governing permissions and
17 * limitations under the License.
18 * ============LICENSE_END=========================================================
19 * Modifications copyright (c) 2019 Nokia
20 * ================================================================================
23 package org.openecomp.sdc.be.components.impl;
25 import fj.data.Either;
26 import org.apache.commons.lang3.tuple.ImmutablePair;
27 import org.junit.Assert;
28 import org.junit.Before;
29 import org.junit.Test;
30 import org.mockito.InjectMocks;
31 import org.mockito.Mockito;
32 import org.mockito.MockitoAnnotations;
33 import org.openecomp.sdc.ElementOperationMock;
34 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
35 import org.openecomp.sdc.be.components.ArtifactsResolver;
36 import org.openecomp.sdc.be.components.csar.CsarArtifactsAndGroupsBusinessLogic;
37 import org.openecomp.sdc.be.components.impl.exceptions.ByActionStatusComponentException;
38 import org.openecomp.sdc.be.components.impl.exceptions.ByResponseFormatComponentException;
39 import org.openecomp.sdc.be.components.merge.resource.ResourceDataMergeBusinessLogic;
40 import org.openecomp.sdc.be.components.merge.utils.MergeInstanceUtils;
41 import org.openecomp.sdc.be.components.utils.ComponentBusinessLogicMock;
42 import org.openecomp.sdc.be.dao.cassandra.ArtifactCassandraDao;
43 import org.openecomp.sdc.be.datamodel.api.HighestFilterEnum;
44 import org.openecomp.sdc.be.datamodel.utils.UiComponentDataConverter;
45 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ArtifactsOperations;
46 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.InterfaceOperation;
47 import org.openecomp.sdc.be.model.operations.StorageException;
48 import org.openecomp.sdc.be.components.csar.CsarBusinessLogic;
49 import org.openecomp.sdc.be.components.csar.CsarInfo;
50 import org.openecomp.sdc.be.components.impl.ArtifactsBusinessLogic.ArtifactOperationEnum;
51 import org.openecomp.sdc.be.components.impl.generic.GenericTypeBusinessLogic;
52 import org.openecomp.sdc.be.components.lifecycle.LifecycleBusinessLogic;
53 import org.openecomp.sdc.be.components.lifecycle.LifecycleChangeInfoWithAction;
54 import org.openecomp.sdc.be.components.validation.UserValidations;
55 import org.openecomp.sdc.be.config.ConfigurationManager;
56 import org.openecomp.sdc.be.dao.api.ActionStatus;
57 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
58 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
59 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
60 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
61 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
62 import org.openecomp.sdc.be.impl.ComponentsUtils;
63 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
64 import org.openecomp.sdc.be.model.ArtifactDefinition;
65 import org.openecomp.sdc.be.model.Component;
66 import org.openecomp.sdc.be.model.DataTypeDefinition;
67 import org.openecomp.sdc.be.model.InputDefinition;
68 import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
69 import org.openecomp.sdc.be.model.LifecycleStateEnum;
70 import org.openecomp.sdc.be.model.PropertyDefinition;
71 import org.openecomp.sdc.be.model.Resource;
72 import org.openecomp.sdc.be.model.User;
73 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
74 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeTemplateOperation;
75 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.NodeTypeOperation;
76 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.TopologyTemplateOperation;
77 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
78 import org.openecomp.sdc.be.model.operations.api.ICapabilityTypeOperation;
79 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
80 import org.openecomp.sdc.be.model.operations.api.IGroupInstanceOperation;
81 import org.openecomp.sdc.be.model.operations.api.IGroupOperation;
82 import org.openecomp.sdc.be.model.operations.api.IGroupTypeOperation;
83 import org.openecomp.sdc.be.model.operations.api.IInterfaceLifecycleOperation;
84 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
85 import org.openecomp.sdc.be.model.operations.impl.CsarOperation;
86 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
87 import org.openecomp.sdc.be.model.operations.impl.InterfaceLifecycleOperation;
88 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
89 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
90 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
91 import org.openecomp.sdc.be.tosca.CsarUtils;
92 import org.openecomp.sdc.be.tosca.CsarUtils.NonMetaArtifactInfo;
93 import org.openecomp.sdc.be.tosca.ToscaExportHandler;
94 import org.openecomp.sdc.be.user.IUserBusinessLogic;
95 import org.openecomp.sdc.be.user.Role;
96 import org.openecomp.sdc.be.user.UserBusinessLogic;
97 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
98 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
99 import org.openecomp.sdc.common.api.ConfigurationSource;
100 import org.openecomp.sdc.common.api.Constants;
101 import org.openecomp.sdc.common.impl.ExternalConfiguration;
102 import org.openecomp.sdc.common.impl.FSConfigurationSource;
103 import org.openecomp.sdc.common.util.GeneralUtility;
104 import org.openecomp.sdc.common.util.ValidationUtils;
105 import org.openecomp.sdc.exception.ResponseFormat;
106 import org.slf4j.Logger;
107 import org.slf4j.LoggerFactory;
108 import org.springframework.web.context.WebApplicationContext;
110 import javax.servlet.ServletContext;
111 import java.io.IOException;
112 import java.lang.reflect.Method;
113 import java.util.ArrayList;
114 import java.util.EnumMap;
115 import java.util.HashMap;
116 import java.util.List;
117 import java.util.Map;
118 import java.util.stream.Collectors;
119 import java.util.stream.Stream;
121 import static org.junit.Assert.assertEquals;
122 import static org.junit.Assert.assertFalse;
123 import static org.junit.Assert.assertNotNull;
124 import static org.junit.Assert.assertTrue;
125 import static org.mockito.ArgumentMatchers.any;
126 import static org.mockito.ArgumentMatchers.anyString;
127 import static org.mockito.ArgumentMatchers.eq;
128 import static org.mockito.Mockito.when;
130 import static org.assertj.core.api.Java6Assertions.assertThat;
131 import static org.junit.Assert.assertNotEquals;
132 import static org.mockito.Mockito.times;
134 public class ResourceBusinessLogicTest extends ComponentBusinessLogicMock {
136 private static final Logger log = LoggerFactory.getLogger(ResourceBusinessLogicTest.class);
137 private static final String RESOURCE_CATEGORY1 = "Network Layer 2-3";
138 private static final String RESOURCE_SUBCATEGORY = "Router";
140 private static final String UPDATED_SUBCATEGORY = "Gateway";
142 private String resourceId = "resourceId1";
143 private String operationId = "uniqueId1";
144 Resource resourceUpdate;
146 private static final String RESOURCE_NAME = "My-Resource_Name with space";
147 private static final String RESOURCE_TOSCA_NAME = "My-Resource_Tosca_Name";
148 private static final String GENERIC_VF_NAME = "org.openecomp.resource.abstract.nodes.VF";
149 private static final String GENERIC_CR_NAME = "org.openecomp.resource.abstract.nodes.CR";
150 private static final String GENERIC_PNF_NAME = "org.openecomp.resource.abstract.nodes.PNF";
152 final ServletContext servletContext = Mockito.mock(ServletContext.class);
153 IElementOperation mockElementDao = new ElementOperationMock();
154 JanusGraphDao mockJanusGraphDao = Mockito.mock(JanusGraphDao.class);
155 UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
156 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
157 NodeTypeOperation nodeTypeOperation = Mockito.mock(NodeTypeOperation.class);
158 NodeTemplateOperation nodeTemplateOperation = Mockito.mock(NodeTemplateOperation.class);
159 TopologyTemplateOperation topologyTemplateOperation = Mockito.mock(TopologyTemplateOperation.class);
160 final LifecycleBusinessLogic lifecycleBl = Mockito.mock(LifecycleBusinessLogic.class);
161 final ICapabilityTypeOperation capabilityTypeOperation = Mockito.mock(ICapabilityTypeOperation.class);
162 final PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
163 final ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
164 WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
165 UserValidations userValidations = Mockito.mock(UserValidations.class);
166 WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
167 IInterfaceLifecycleOperation interfaceTypeOperation = Mockito.mock(IInterfaceLifecycleOperation.class);
168 ArtifactCassandraDao artifactCassandraDao = Mockito.mock(ArtifactCassandraDao.class);
170 CsarUtils csarUtils = Mockito.mock(CsarUtils.class);
171 IUserBusinessLogic userBusinessLogic = Mockito.mock(IUserBusinessLogic.class);
172 IGroupOperation groupOperation = Mockito.mock(IGroupOperation.class);
173 IGroupInstanceOperation groupInstanceOperation = Mockito.mock(IGroupInstanceOperation.class);
174 IGroupTypeOperation groupTypeOperation = Mockito.mock(IGroupTypeOperation.class);
175 GroupBusinessLogic groupBusinessLogic = Mockito.mock(GroupBusinessLogic.class);
176 InterfaceOperation interfaceOperation = Mockito.mock(InterfaceOperation.class);
177 ArtifactsOperations artifactToscaOperation = Mockito.mock(ArtifactsOperations.class);
178 private PropertyBusinessLogic propertyBusinessLogic = Mockito.mock(PropertyBusinessLogic.class);
179 ArtifactsResolver artifactsResolver = Mockito.mock(ArtifactsResolver.class);
180 InterfaceLifecycleOperation interfaceLifecycleTypeOperation = Mockito.mock(InterfaceLifecycleOperation.class);
181 ComponentInstanceBusinessLogic componentInstanceBusinessLogic = Mockito.mock(ComponentInstanceBusinessLogic.class);
182 ResourceImportManager resourceImportManager = Mockito.mock(ResourceImportManager.class);
183 InputsBusinessLogic inputsBusinessLogic = Mockito.mock(InputsBusinessLogic.class);
184 CompositionBusinessLogic compositionBusinessLogic = Mockito.mock(CompositionBusinessLogic.class);
185 ResourceDataMergeBusinessLogic resourceDataMergeBusinessLogic = Mockito.mock(ResourceDataMergeBusinessLogic.class);
186 CsarArtifactsAndGroupsBusinessLogic csarArtifactsAndGroupsBusinessLogic = Mockito.mock(CsarArtifactsAndGroupsBusinessLogic.class);
187 MergeInstanceUtils mergeInstanceUtils = Mockito.mock(MergeInstanceUtils.class);
188 UiComponentDataConverter uiComponentDataConverter = Mockito.mock(UiComponentDataConverter.class);
189 private SoftwareInformationBusinessLogic softwareInformationBusinessLogic = Mockito.mock(SoftwareInformationBusinessLogic.class);
191 ResponseFormatManager responseManager = null;
192 GraphLockOperation graphLockOperation = Mockito.mock(GraphLockOperation.class);
194 Resource resourceResponse = null;
195 Resource genericVF = null;
196 Resource genericCR = null;
197 Resource genericVFC = null;
198 Resource genericPNF = null;
199 ComponentsUtils componentsUtils;
200 ArtifactsBusinessLogic artifactManager;
201 CsarOperation csarOperation = Mockito.mock(CsarOperation.class);
203 CsarBusinessLogic csarBusinessLogic;
204 Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<>();
205 private GenericTypeBusinessLogic genericTypeBusinessLogic = Mockito.mock(GenericTypeBusinessLogic.class);
206 List<Resource> reslist;
207 ResourceBusinessLogic bl;
209 public ResourceBusinessLogicTest() {
213 public void setup() {
214 MockitoAnnotations.initMocks(this);
215 Mockito.reset(propertyOperation);
217 ExternalConfiguration.setAppName("catalog-be");
219 // init Configuration
220 String appConfigDir = "src/test/resources/config/catalog-be";
221 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
222 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
223 componentsUtils = new ComponentsUtils(Mockito.mock(AuditingManager.class));
225 ToscaExportHandler toscaExportHandler = Mockito.mock(ToscaExportHandler.class);
227 // User data and management
229 user.setUserId("jh0003");
230 user.setFirstName("Jimmi");
231 user.setLastName("Hendrix");
232 user.setRole(Role.ADMIN.name());
234 Either<User, ActionStatus> eitherGetUser = Either.left(user);
235 when(mockUserAdmin.getUser("jh0003", false)).thenReturn(eitherGetUser);
236 when(userValidations.validateUserExists(eq(user.getUserId()), anyString(), eq(false))).thenReturn(user);
237 when(userValidations.validateUserNotEmpty(eq(user), anyString())).thenReturn(user);
238 // Servlet Context attributes
239 when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
240 when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
241 when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
242 when(webAppContext.getBean(IElementOperation.class)).thenReturn(mockElementDao);
244 Either<Integer, StorageOperationStatus> eitherCountRoot = Either.left(1);
245 Either<Boolean, StorageOperationStatus> eitherFalse = Either.left(true);
246 when(toscaOperationFacade.validateComponentNameExists("Root", ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE)).thenReturn(eitherFalse);
249 Either<Boolean, StorageOperationStatus> eitherCountExist = Either.left(true);
250 when(toscaOperationFacade.validateComponentNameExists("alreadyExists", ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCountExist);
252 Either<Boolean, StorageOperationStatus> eitherCount = Either.left(false);
253 when(toscaOperationFacade.validateComponentNameExists(eq(RESOURCE_NAME), any(ResourceTypeEnum.class), eq(ComponentTypeEnum.RESOURCE))).thenReturn(eitherCount);
254 /*when(toscaOperationFacade.validateComponentNameExists(RESOURCE_NAME, ResourceTypeEnum.VF, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCount);
255 when(toscaOperationFacade.validateComponentNameExists(RESOURCE_NAME, ResourceTypeEnum.PNF, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCount);
256 when(toscaOperationFacade.validateComponentNameExists(RESOURCE_NAME, ResourceTypeEnum.CR, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCount);*/
257 Either<Boolean, StorageOperationStatus> validateDerivedExists = Either.left(true);
258 when(toscaOperationFacade.validateToscaResourceNameExists("Root")).thenReturn(validateDerivedExists);
260 Either<Boolean, StorageOperationStatus> validateDerivedNotExists = Either.left(false);
261 when(toscaOperationFacade.validateToscaResourceNameExists("kuku")).thenReturn(validateDerivedNotExists);
262 when(graphLockOperation.lockComponent(Mockito.anyString(), eq(NodeTypeEnum.Resource))).thenReturn(StorageOperationStatus.OK);
263 when(graphLockOperation.lockComponentByName(Mockito.anyString(), eq(NodeTypeEnum.Resource))).thenReturn(StorageOperationStatus.OK);
266 resourceResponse = createResourceObject(true);
267 Either<Resource, StorageOperationStatus> eitherCreate = Either.left(resourceResponse);
268 Either<Integer, StorageOperationStatus> eitherValidate = Either.left(null);
269 when(toscaOperationFacade.createToscaComponent(any(Resource.class))).thenReturn(eitherCreate);
270 Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<>();
271 when(applicationDataTypeCache.getAll()).thenReturn(Either.left(emptyDataTypes));
272 when(mockJanusGraphDao.commit()).thenReturn(JanusGraphOperationStatus.OK);
275 artifactManager = new ArtifactsBusinessLogic(artifactCassandraDao, toscaExportHandler, csarUtils, lifecycleBl, userBusinessLogic,
276 artifactsResolver, mockElementDao, groupOperation, groupInstanceOperation, groupTypeOperation, interfaceOperation,
277 interfaceLifecycleTypeOperation, artifactToscaOperation);
279 bl = new ResourceBusinessLogic(mockElementDao, groupOperation, groupInstanceOperation, groupTypeOperation, groupBusinessLogic,
280 interfaceOperation, interfaceLifecycleTypeOperation, artifactManager, componentInstanceBusinessLogic,
281 resourceImportManager, inputsBusinessLogic, compositionBusinessLogic, resourceDataMergeBusinessLogic,
282 csarArtifactsAndGroupsBusinessLogic, mergeInstanceUtils, uiComponentDataConverter, csarBusinessLogic,
283 artifactToscaOperation, propertyBusinessLogic, softwareInformationBusinessLogic);
285 artifactManager.setNodeTemplateOperation(nodeTemplateOperation);
286 bl.setUserAdmin(mockUserAdmin);
287 bl.setCapabilityTypeOperation(capabilityTypeOperation);
288 bl.setComponentsUtils(componentsUtils);
289 bl.setLifecycleManager(lifecycleBl);
290 bl.setGraphLockOperation(graphLockOperation);
291 bl.setPropertyOperation(propertyOperation);
292 bl.setJanusGraphDao(mockJanusGraphDao);
293 bl.setApplicationDataTypeCache(applicationDataTypeCache);
294 bl.setGenericTypeBusinessLogic(genericTypeBusinessLogic);
295 toscaOperationFacade.setNodeTypeOperation(nodeTypeOperation);
296 toscaOperationFacade.setTopologyTemplateOperation(topologyTemplateOperation);
297 bl.setToscaOperationFacade(toscaOperationFacade);
298 bl.setUserValidations(userValidations);
299 bl.setInterfaceTypeOperation(interfaceTypeOperation);
301 csarBusinessLogic.setCsarOperation(csarOperation);
302 Resource resourceCsar = createResourceObjectCsar(true);
303 setCanWorkOnResource(resourceCsar);
304 Either<Component, StorageOperationStatus> oldResourceRes = Either.left(resourceCsar);
305 when(toscaOperationFacade.getToscaFullElement(resourceCsar.getUniqueId())).thenReturn(oldResourceRes);
306 responseManager = ResponseFormatManager.getInstance();
308 reslist = new ArrayList<Resource>();
309 reslist.add(resourceResponse);
310 reslist.add(genericVF);
311 reslist.add(genericCR);
312 reslist.add(genericVFC);
313 reslist.add(genericPNF);
314 Either<List<Resource>, StorageOperationStatus> returneval= Either.left(reslist);
315 when(toscaOperationFacade.getAllCertifiedResources(true, true)).thenReturn(returneval);
316 when(toscaOperationFacade.validateComponentNameUniqueness("Resource", ResourceTypeEnum.CR, ComponentTypeEnum.RESOURCE)).thenReturn(Either.left(true));
317 Either<List<Resource>, StorageOperationStatus> returnevalexception= Either.right(StorageOperationStatus.BAD_REQUEST);
318 when(toscaOperationFacade.getAllCertifiedResources(false, false)).thenReturn(returnevalexception);
322 private Resource createResourceObject(boolean afterCreate) {
323 Resource resource = new Resource();
324 resource.setName(RESOURCE_NAME);
325 resource.setToscaResourceName(RESOURCE_TOSCA_NAME);
326 resource.addCategory(RESOURCE_CATEGORY1, RESOURCE_SUBCATEGORY);
327 resource.setDescription("My short description");
328 List<String> tgs = new ArrayList<>();
330 tgs.add(resource.getName());
331 resource.setTags(tgs);
332 List<String> template = new ArrayList<>();
333 template.add("Root");
334 resource.setDerivedFrom(template);
335 resource.setVendorName("Motorola");
336 resource.setVendorRelease("1.0.0");
337 resource.setContactId("ya5467");
338 resource.setIcon("MyIcon");
341 resource.setName(resource.getName());
342 resource.setVersion("0.1");
343 resource.setUniqueId(resource.getName().toLowerCase() + ":" + resource.getVersion());
344 resource.setCreatorUserId(user.getUserId());
345 resource.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
346 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
351 private Resource createResourceObjectCsar(boolean afterCreate) {
352 Resource resource = new Resource();
353 resource.setName(RESOURCE_NAME);
354 resource.addCategory(RESOURCE_CATEGORY1, RESOURCE_SUBCATEGORY);
355 resource.setDescription("My short description");
356 List<String> tgs = new ArrayList<>();
358 tgs.add(resource.getName());
359 resource.setTags(tgs);
360 List<String> template = new ArrayList<>();
361 template.add("Root");
362 resource.setDerivedFrom(template);
363 resource.setVendorName("Motorola");
364 resource.setVendorRelease("1.0.0");
365 resource.setResourceVendorModelNumber("");
366 resource.setContactId("ya5467");
367 resource.setIcon("MyIcon");
368 resource.setCsarUUID("valid_vf.csar");
369 resource.setCsarVersion("1");
372 resource.setName(resource.getName());
373 resource.setVersion("0.1");
375 resource.setUniqueId(resource.getName().toLowerCase() + ":" + resource.getVersion());
376 resource.setCreatorUserId(user.getUserId());
377 resource.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
378 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
383 private Resource setCanWorkOnResource(Resource resource) {
384 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
385 resource.setLastUpdaterUserId(user.getUserId());
390 public void testHappyScenario() {
391 validateUserRoles(Role.ADMIN, Role.DESIGNER);
392 Resource resource = createResourceObject(false);
393 Resource createdResource = null;
395 createdResource= bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
396 assertThat(createResourceObject(true)).isEqualTo(createdResource);
397 } catch(ByResponseFormatComponentException e){
398 assertThat(new Integer(200)).isEqualTo(e.getResponseFormat().getStatus());
403 public void testUpdateHappyScenario() {
404 Resource resource = createResourceObjectCsar(true);
405 setCanWorkOnResource(resource);
406 validateUserRoles(Role.ADMIN, Role.DESIGNER);
407 Either<Resource, StorageOperationStatus> resourceLinkedToCsarRes = Either.left(resource);
408 when(toscaOperationFacade.getLatestComponentByCsarOrName(ComponentTypeEnum.RESOURCE, resource.getCsarUUID(), resource.getSystemName())).thenReturn(resourceLinkedToCsarRes);
409 Either<Boolean, StorageOperationStatus> validateDerivedExists = Either.left(true);
410 when(toscaOperationFacade.validateToscaResourceNameExists("Root")).thenReturn(validateDerivedExists);
411 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
412 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
413 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
414 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
415 Resource createdResource = null;
417 createdResource= bl.validateAndUpdateResourceFromCsar(resource, user, null, null, resource.getUniqueId());
418 assertThat(resource.getUniqueId()).isEqualTo(createdResource.getUniqueId());
419 } catch(ByResponseFormatComponentException e){
420 assertThat(new Integer(200)).isEqualTo(e.getResponseFormat().getStatus());
426 public void testFailedResourceValidations() {
427 testResourceNameExist();
428 testResourceNameEmpty();
429 // testResourceNameExceedsLimit();
430 testResourceNameWrongFormat();
431 testResourceDescExceedsLimitCreate();
432 testResourceDescNotEnglish();
433 testResourceDescriptionEmpty();
434 testResourceDescriptionMissing();
435 testResourceIconMissing();
436 testResourceIconInvalid();
437 testResourceIconExceedsLimit();
438 testResourceTagNotExist();
439 testResourceTagEmpty();
440 testTagsExceedsLimitCreate();
441 testTagsNoServiceName();
444 testContactIdTooLong();
445 testContactIdWrongFormatCreate();
446 testResourceContactIdEmpty();
447 testResourceContactIdMissing();
448 testVendorNameExceedsLimit();
449 testVendorNameWrongFormatCreate();
450 testVendorReleaseWrongFormat();
451 testVendorReleaseExceedsLimitCreate();
452 testResourceVendorModelNumberExceedsLimit();
453 testResourceVendorNameMissing();
454 testResourceVendorReleaseMissing();
455 testResourceCategoryExist();
456 testResourceBadCategoryCreate();
457 testHappyScenarioCostLicenseType();
458 testCostWrongFormatCreate();
459 testLicenseTypeWrongFormatCreate();
460 testResourceTemplateNotExist();
461 testResourceTemplateEmpty();
462 testResourceTemplateInvalid();
465 private void testResourceNameExist() {
466 String resourceName = "alreadyExists";
467 Resource resourceExist = createResourceObject(false);
468 resourceExist.setName(resourceName);
469 resourceExist.getTags().add(resourceName);
470 validateUserRoles(Role.ADMIN, Role.DESIGNER);
472 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
473 } catch (ByResponseFormatComponentException e) {
474 assertComponentException(e, ActionStatus.COMPONENT_NAME_ALREADY_EXIST, ComponentTypeEnum.RESOURCE.getValue(), resourceName);
478 private void testResourceNameEmpty() {
479 Resource resourceExist = createResourceObject(false);
480 resourceExist.setName(null);
483 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
484 } catch (ByActionStatusComponentException e) {
485 assertComponentException(e, ActionStatus.MISSING_COMPONENT_NAME, ComponentTypeEnum.RESOURCE.getValue());
489 private void testResourceNameExceedsLimit() {
490 Resource resourceExccedsNameLimit = createResourceObject(false);
491 // 51 chars, the limit is 50
492 String tooLongResourceName = "zCRCAWjqte0DtgcAAMmcJcXeNubeX1p1vOZNTShAHOYNAHvV3iK";
493 resourceExccedsNameLimit.setName(tooLongResourceName);
496 bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
497 } catch (ByActionStatusComponentException e) {
498 assertComponentException(e, ActionStatus.COMPONENT_NAME_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_NAME_MAX_LENGTH);
502 private void testResourceNameWrongFormat() {
503 Resource resource = createResourceObject(false);
505 String nameWrongFormat = "ljg?fd";
506 resource.setName(nameWrongFormat);
509 bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
510 } catch (ByActionStatusComponentException e) {
511 assertComponentException(e, ActionStatus.INVALID_COMPONENT_NAME, ComponentTypeEnum.RESOURCE.getValue());
515 // Resource name - end
516 // Resource description - start
517 private void testResourceDescExceedsLimitCreate() {
518 Resource resourceExccedsDescLimit = createResourceObject(false);
519 // 1025 chars, the limit is 1024
520 String tooLongResourceDesc = "1GUODojQ0sGzKR4NP7e5j82ADQ3KHTVOaezL95qcbuaqDtjZhAQGQ3iFwKAy580K4WiiXs3u3zq7RzXcSASl5fm0RsWtCMOIDP"
521 + "AOf9Tf2xtXxPCuCIMCR5wOGnNTaFxgnJEHAGxilBhZDgeMNHmCN1rMK5B5IRJOnZxcpcL1NeG3APTCIMP1lNAxngYulDm9heFSBc8TfXAADq7703AvkJT0QPpGq2z2P"
522 + "tlikcAnIjmWgfC5Tm7UH462BAlTyHg4ExnPPL4AO8c92VrD7kZSgSqiy73cN3gLT8uigkKrUgXQFGVUFrXVyyQXYtVM6bLBeuCGQf4C2j8lkNg6M0J3PC0PzMRoinOxk"
523 + "Ae2teeCtVcIj4A1KQo3210j8q2v7qQU69Mabsa6DT9FgE4rcrbiFWrg0Zto4SXWD3o1eJA9o29lTg6kxtklH3TuZTmpi5KVp1NFhS1RpnqF83tzv4mZLKsx7Zh1fEgYvRFwx1"
524 + "ar3RolyDfNoZiGBGTMsZzz7RPFBf2hTnLmNqVGQnHKhhGj0Y5s8t2cbqbO2nmHiJb9uaUVrCGypgbAcJL3KPOBfAVW8PcpmNj4yVjI3L4x5zHjmGZbp9vKshEQODcrmcgsYAoKqe"
525 + "uu5u7jk8XVxEfQ0m5qL8UOErXPlJovSmKUmP5B5T0w299zIWDYCzSoNasHpHjOMDLAiDDeHbozUOn9t3Qou00e9POq4RMM0VnIx1H38nJoJZz2XH8CI5YMQe7oTagaxgQTF2aa0qaq2"
526 + "V6nJsfRGRklGjNhFFYP2cS4Xv2IJO9DSX6LTXOmENrGVJJvMOZcvnBaZPfoAHN0LU4i1SoepLzulIxnZBfkUWFJgZ5wQ0Bco2GC1HMqzW21rwy4XHRxXpXbmW8LVyoA1KbnmVmROycU4"
527 + "scTZ62IxIcIWCVeMjBIcTviXULbPUyqlfEPXWr8IMJtpAaELWgyquPClAREMDs2b9ztKmUeXlMccFES1XWbFTrhBHhmmDyVReEgCwfokrUFR13LTUK1k8I6OEHOs";
529 resourceExccedsDescLimit.setDescription(tooLongResourceDesc);
531 bl.createResource(resourceExccedsDescLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
532 } catch (ByActionStatusComponentException e) {
533 assertComponentException(e, ActionStatus.COMPONENT_DESCRIPTION_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_DESCRIPTION_MAX_LENGTH);
537 private void testResourceDescNotEnglish() {
538 Resource notEnglish = createResourceObject(false);
540 String notEnglishDesc = "\uC2B5";
541 notEnglish.setDescription(notEnglishDesc);
544 bl.createResource(notEnglish, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
545 } catch (ByActionStatusComponentException e) {
546 assertComponentException(e, ActionStatus.COMPONENT_INVALID_DESCRIPTION, ComponentTypeEnum.RESOURCE.getValue());
550 private void testResourceDescriptionEmpty() {
551 Resource resourceExist = createResourceObject(false);
552 resourceExist.setDescription("");
555 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
556 } catch (ByActionStatusComponentException e) {
557 assertComponentException(e, ActionStatus.COMPONENT_MISSING_DESCRIPTION, ComponentTypeEnum.RESOURCE.getValue());
561 private void testResourceDescriptionMissing() {
562 Resource resourceExist = createResourceObject(false);
563 resourceExist.setDescription(null);
566 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
567 } catch (ByActionStatusComponentException e) {
568 assertComponentException(e, ActionStatus.COMPONENT_MISSING_DESCRIPTION, ComponentTypeEnum.RESOURCE.getValue());
571 // Resource description - end
572 // Resource icon start
574 private void testResourceIconMissing() {
575 Resource resourceExist = createResourceObject(false);
576 resourceExist.setIcon(null);
579 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
580 } catch (ByActionStatusComponentException e) {
581 assertComponentException(e, ActionStatus.COMPONENT_MISSING_ICON, ComponentTypeEnum.RESOURCE.getValue());
585 private void testResourceIconInvalid() {
586 Resource resourceExist = createResourceObject(false);
587 resourceExist.setIcon("kjk3453^&");
590 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
591 } catch (ByActionStatusComponentException e) {
592 assertComponentException(e, ActionStatus.COMPONENT_INVALID_ICON, ComponentTypeEnum.RESOURCE.getValue());
596 private void testResourceIconExceedsLimit() {
597 Resource resourceExist = createResourceObject(false);
598 resourceExist.setIcon("dsjfhskdfhskjdhfskjdhkjdhfkshdfksjsdkfhsdfsdfsdfsfsdfsf");
600 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
601 } catch (ByActionStatusComponentException e) {
602 assertComponentException(e, ActionStatus.COMPONENT_ICON_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.ICON_MAX_LENGTH);
607 // Resource tags - start
608 private void testResourceTagNotExist() {
609 Resource resourceExist = createResourceObject(false);
610 resourceExist.setTags(null);
612 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
613 } catch (ByActionStatusComponentException e) {
614 assertComponentException(e, ActionStatus.COMPONENT_MISSING_TAGS);
618 private void testResourceTagEmpty() {
619 Resource resourceExist = createResourceObject(false);
620 resourceExist.setTags(new ArrayList<>());
622 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
623 } catch (ByActionStatusComponentException e) {
624 assertComponentException(e, ActionStatus.COMPONENT_MISSING_TAGS);
628 private void testTagsExceedsLimitCreate() {
629 Resource resourceExccedsNameLimit = createResourceObject(false);
630 String tag1 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjQ";
631 String tag2 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjW";
632 String tag3 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjE";
633 String tag4 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjb";
634 String tag5 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjr";
635 String tag6 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
636 String tag7 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
637 String tag8 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjd";
638 String tag9 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
639 String tag10 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
640 String tag11 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjh";
641 String tag12 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjj";
642 String tag13 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjk";
643 String tag14 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjs";
644 String tag15 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjz";
645 String tag16 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjx";
646 String tag17 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj2";
647 String tag18 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj3";
648 String tag19 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj4";
649 String tag20 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj5";
650 String tag21 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj0";
652 List<String> tagsList = new ArrayList<>();
674 tagsList.add(resourceExccedsNameLimit.getName());
676 resourceExccedsNameLimit.setTags(tagsList);
678 bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
679 } catch (ByActionStatusComponentException e) {
680 assertComponentException(e, ActionStatus.COMPONENT_TAGS_EXCEED_LIMIT, "" + ValidationUtils.TAG_LIST_MAX_LENGTH);
684 private void testTagsSingleExceedsLimit() {
685 Resource resourceExccedsNameLimit = createResourceObject(false);
686 String tag1 = "afzs2qLBb5X6tZhiunkcEwiFX1qRQY8YZl3y3Du5M5xeQY5Nq9afcFHDZ9HaURw43gH27nAUWM36bMbMylwTFSzzNV8NO4v4ripe6Q15Vc2nPOFI";
687 String tag2 = resourceExccedsNameLimit.getName();
688 List<String> tagsList = new ArrayList<>();
692 resourceExccedsNameLimit.setTags(tagsList);
694 bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
695 } catch (ByActionStatusComponentException e) {
696 assertComponentException(e, ActionStatus.COMPONENT_SINGLE_TAG_EXCEED_LIMIT, "" + ValidationUtils.TAG_MAX_LENGTH);
700 private void testTagsNoServiceName() {
701 Resource serviceExccedsNameLimit = createResourceObject(false);
702 String tag1 = "afzs2qLBb";
703 List<String> tagsList = new ArrayList<>();
705 serviceExccedsNameLimit.setTags(tagsList);
707 bl.createResource(serviceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
708 } catch (ByActionStatusComponentException e) {
709 assertComponentException(e, ActionStatus.COMPONENT_INVALID_TAGS_NO_COMP_NAME);
713 private void testInvalidTag() {
714 Resource serviceExccedsNameLimit = createResourceObject(false);
715 String tag1 = "afzs2qLBb%#%";
716 List<String> tagsList = new ArrayList<>();
718 serviceExccedsNameLimit.setTags(tagsList);
720 bl.createResource(serviceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
721 } catch (ByActionStatusComponentException e) {
722 assertComponentException(e, ActionStatus.INVALID_FIELD_FORMAT, new String[]{"Resource", "tag"});
726 // Resource tags - stop
727 // Resource contact start
729 private void testContactIdTooLong() {
730 Resource resourceContactId = createResourceObject(false);
731 // 59 chars instead of 50
732 String contactIdTooLong = "thisNameIsVeryLongAndExeccedsTheNormalLengthForContactId";
733 resourceContactId.setContactId(contactIdTooLong);
736 bl.createResource(resourceContactId, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
737 } catch (ByActionStatusComponentException e) {
738 assertComponentException(e, ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
742 private void testContactIdWrongFormatCreate() {
743 Resource resourceContactId = createResourceObject(false);
744 // 3 letters and 3 digits and special characters
745 String contactIdFormatWrong = "yrt134!!!";
746 resourceContactId.setContactId(contactIdFormatWrong);
748 bl.createResource(resourceContactId, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
749 } catch (ByActionStatusComponentException e) {
750 assertComponentException(e, ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
754 private void testResourceContactIdEmpty() {
755 Resource resourceExist = createResourceObject(false);
756 resourceExist.setContactId("");
758 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
759 } catch (ByActionStatusComponentException e) {
760 assertComponentException(e, ActionStatus.COMPONENT_MISSING_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
764 private void testResourceContactIdMissing() {
765 Resource resourceExist = createResourceObject(false);
766 resourceExist.setContactId(null);
768 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
769 } catch (ByActionStatusComponentException e) {
770 assertComponentException(e, ActionStatus.COMPONENT_MISSING_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
774 private void testVendorNameExceedsLimit() {
775 Resource resourceExccedsVendorNameLimit = createResourceObject(false);
776 String tooLongVendorName = "h1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9E";
777 resourceExccedsVendorNameLimit.setVendorName(tooLongVendorName);
779 bl.createResource(resourceExccedsVendorNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
780 } catch (ByActionStatusComponentException e) {
781 assertComponentException(e, ActionStatus.VENDOR_NAME_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_NAME_MAX_LENGTH);
785 private void testResourceVendorModelNumberExceedsLimit() {
786 Resource resourceExccedsVendorModelNumberLimit = createResourceObject(false);
787 String tooLongVendorModelNumber = "h1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9E";
788 resourceExccedsVendorModelNumberLimit.setResourceVendorModelNumber(tooLongVendorModelNumber);
790 bl.createResource(resourceExccedsVendorModelNumberLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
791 } catch (ByActionStatusComponentException e) {
792 assertComponentException(e, ActionStatus.RESOURCE_VENDOR_MODEL_NUMBER_EXCEEDS_LIMIT, "" + ValidationUtils.RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH);
796 private void testVendorNameWrongFormatCreate() {
797 Resource resource = createResourceObject(false);
799 String nameWrongFormat = "ljg*fd";
800 resource.setVendorName(nameWrongFormat);
802 bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
803 } catch (ByActionStatusComponentException e) {
804 assertComponentException(e, ActionStatus.INVALID_VENDOR_NAME, nameWrongFormat);
808 private void testVendorReleaseWrongFormat() {
809 Resource resource = createResourceObject(false);
811 String vendorReleaseWrongFormat = "1>2";
812 resource.setVendorRelease(vendorReleaseWrongFormat);
814 bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
815 } catch (ByActionStatusComponentException e) {
816 assertComponentException(e, ActionStatus.INVALID_VENDOR_RELEASE, vendorReleaseWrongFormat);
820 private void testVendorReleaseExceedsLimitCreate() {
821 Resource resourceExccedsNameLimit = createResourceObject(false);
822 String tooLongVendorRelease = "h1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9E";
823 resourceExccedsNameLimit.setVendorRelease(tooLongVendorRelease);
825 bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
826 } catch (ByActionStatusComponentException e) {
827 assertComponentException(e, ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH);
831 private void testResourceVendorNameMissing() {
832 Resource resourceExist = createResourceObject(false);
833 resourceExist.setVendorName(null);
835 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
836 } catch (ByActionStatusComponentException e) {
837 assertComponentException(e, ActionStatus.MISSING_VENDOR_NAME);
841 private void testResourceVendorReleaseMissing() {
842 Resource resourceExist = createResourceObject(false);
843 resourceExist.setVendorRelease(null);
845 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
846 } catch (ByActionStatusComponentException e) {
847 assertComponentException(e, ActionStatus.MISSING_VENDOR_RELEASE);
851 // Resource vendor name/release stop
853 private void testResourceCategoryExist() {
854 Resource resourceExist = createResourceObject(false);
855 resourceExist.setCategories(null);
857 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
858 } catch (ByActionStatusComponentException e) {
859 assertComponentException(e, ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue());
863 private void testResourceBadCategoryCreate() {
865 Resource resourceExist = createResourceObject(false);
866 resourceExist.setCategories(null);
867 resourceExist.addCategory("koko", "koko");
869 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
870 } catch (ByActionStatusComponentException e) {
871 assertComponentException(e, ActionStatus.COMPONENT_INVALID_CATEGORY, ComponentTypeEnum.RESOURCE.getValue());
877 private void testHappyScenarioCostLicenseType() {
878 Resource createResourceObject = createResourceObject(false);
879 Resource createResourceObjectAfterCreate = createResourceObject(true);
880 // Adding cost and licenseType to basic mock
881 Either<Resource, StorageOperationStatus> eitherCreate = Either.left(createResourceObjectAfterCreate);
882 when(toscaOperationFacade.createToscaComponent(any(Resource.class))).thenReturn(eitherCreate);
884 String cost = "123.456";
885 String licenseType = "User";
886 createResourceObject.setCost(cost);
887 createResourceObject.setLicenseType(licenseType);
888 Resource createdResource;
890 createdResource = bl.createResource(createResourceObject, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
891 createResourceObjectAfterCreate.setCost(cost);
892 createResourceObjectAfterCreate.setLicenseType(licenseType);
893 assertThat(createResourceObjectAfterCreate).isEqualTo(createdResource);
894 }catch(ByResponseFormatComponentException e){
895 assertThat(new Integer(200)).isEqualTo(e.getResponseFormat().getStatus());
899 private void testCostWrongFormatCreate() {
900 Resource resourceCost = createResourceObject(false);
901 // Comma instead of fullstop
902 String cost = "12356,464";
903 resourceCost.setCost(cost);
905 bl.createResource(resourceCost, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
906 } catch (ByActionStatusComponentException e) {
907 assertComponentException(e, ActionStatus.INVALID_CONTENT);
912 // License type start
913 private void testLicenseTypeWrongFormatCreate() {
914 Resource resourceLicenseType = createResourceObject(false);
916 String licenseType = "cpu";
917 resourceLicenseType.setLicenseType(licenseType);
919 bl.createResource(resourceLicenseType, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
920 } catch (ByActionStatusComponentException e) {
921 assertComponentException(e, ActionStatus.INVALID_CONTENT);
926 // Derived from start
927 private void testResourceTemplateNotExist() {
928 Resource resourceExist = createResourceObject(false);
929 List<String> list = null;
930 resourceExist.setDerivedFrom(list);
932 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
933 } catch (ByActionStatusComponentException e) {
934 assertComponentException(e, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
938 private void testResourceTemplateEmpty() {
939 Resource resourceExist = createResourceObject(false);
940 resourceExist.setDerivedFrom(new ArrayList<>());
942 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
943 } catch (ByActionStatusComponentException e) {
944 assertComponentException(e, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
948 private void testResourceTemplateInvalid() {
949 Resource resourceExist = createResourceObject(false);
950 ArrayList<String> derivedFrom = new ArrayList<>();
951 derivedFrom.add("kuku");
952 resourceExist.setDerivedFrom(derivedFrom);
954 bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
955 } catch (ByResponseFormatComponentException e) {
956 assertComponentException(e, ActionStatus.PARENT_RESOURCE_NOT_FOUND);
957 } catch (ByActionStatusComponentException e) {
958 assertComponentException(e, ActionStatus.PARENT_RESOURCE_NOT_FOUND);
962 private void assertComponentException(ByResponseFormatComponentException e, ActionStatus expectedStatus, String... variables) {
963 ResponseFormat actualResponse = e.getResponseFormat();
964 assertResponse(actualResponse, expectedStatus, variables);
967 private void assertComponentException(ByActionStatusComponentException e, ActionStatus expectedStatus, String... variables) {
968 ResponseFormat actualResponse = componentsUtils.getResponseFormat(e.getActionStatus(), e.getParams());
969 assertResponse(actualResponse, expectedStatus, variables);
972 private void assertResponse(ResponseFormat actualResponse, ActionStatus expectedStatus, String... variables) {
973 ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
974 assertThat(expectedResponse.getStatus()).isEqualTo(actualResponse.getStatus());
975 assertThat(expectedResponse.getFormattedMessage()).isEqualTo(actualResponse.getFormattedMessage());
978 private void assertResponse(Either<Resource, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
979 assertResponse(createResponse.right().value(), expectedStatus, variables);
982 // UPDATE tests - start
985 public void testResourceNameWrongFormat_UPDATE() {
986 Resource resource = createResourceObject(true);
987 Resource updatedResource = createResourceObject(true);
989 // this is in order to prevent failing with 403 earlier
990 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
991 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
993 String nameWrongFormat = "ljg*fd";
994 updatedResource.setName(nameWrongFormat);
996 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
997 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
999 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1000 } catch (ByActionStatusComponentException e) {
1001 assertComponentException(e, ActionStatus.INVALID_COMPONENT_NAME, ComponentTypeEnum.RESOURCE.getValue());
1006 public void testResourceNameAfterCertify_UPDATE() {
1007 Resource resource = createResourceObject(true);
1008 Resource updatedResource = createResourceObject(true);
1010 // this is in order to prevent failing with 403 earlier
1011 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1012 // when(resourceOperation.getResource_tx(resource.getUniqueId(),false)).thenReturn(eitherUpdate);
1013 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1015 String name = "ljg";
1016 updatedResource.setName(name);
1017 resource.setVersion("1.0");
1019 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1020 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1022 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1023 } catch (ByActionStatusComponentException e) {
1024 assertComponentException(e, ActionStatus.RESOURCE_NAME_CANNOT_BE_CHANGED);
1029 public void testResourceNameAlreadyExist_UPDATE() {
1030 Resource resource = createResourceObject(true);
1031 Resource updatedResource = createResourceObject(true);
1033 // this is in order to prevent failing with 403 earlier
1034 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1035 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1037 String resourceName = "alreadyExists";
1038 updatedResource.setName(resourceName);
1039 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(updatedResource);
1040 when(toscaOperationFacade.updateToscaElement(updatedResource)).thenReturn(dataModelResponse);
1042 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1043 } catch (ByActionStatusComponentException e) {
1044 assertComponentException(e, ActionStatus.COMPONENT_NAME_ALREADY_EXIST, ComponentTypeEnum.RESOURCE.getValue(), resourceName);
1051 public void testResourceDescExceedsLimit_UPDATE() {
1052 Resource resource = createResourceObject(true);
1053 Resource updatedResource = createResourceObject(true);
1055 // this is in order to prevent failing with 403 earlier
1056 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1057 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1059 // 1025 chars, the limit is 1024
1060 String tooLongResourceDesc = "1GUODojQ0sGzKR4NP7e5j82ADQ3KHTVOaezL95qcbuaqDtjZhAQGQ3iFwKAy580K4WiiXs3u3zq7RzXcSASl5fm0RsWtCMOIDP"
1061 + "AOf9Tf2xtXxPCuCIMCR5wOGnNTaFxgnJEHAGxilBhZDgeMNHmCN1rMK5B5IRJOnZxcpcL1NeG3APTCIMP1lNAxngYulDm9heFSBc8TfXAADq7703AvkJT0QPpGq2z2P"
1062 + "tlikcAnIjmWgfC5Tm7UH462BAlTyHg4ExnPPL4AO8c92VrD7kZSgSqiy73cN3gLT8uigkKrUgXQFGVUFrXVyyQXYtVM6bLBeuCGQf4C2j8lkNg6M0J3PC0PzMRoinOxk"
1063 + "Ae2teeCtVcIj4A1KQo3210j8q2v7qQU69Mabsa6DT9FgE4rcrbiFWrg0Zto4SXWD3o1eJA9o29lTg6kxtklH3TuZTmpi5KVp1NFhS1RpnqF83tzv4mZLKsx7Zh1fEgYvRFwx1"
1064 + "ar3RolyDfNoZiGBGTMsZzz7RPFBf2hTnLmNqVGQnHKhhGj0Y5s8t2cbqbO2nmHiJb9uaUVrCGypgbAcJL3KPOBfAVW8PcpmNj4yVjI3L4x5zHjmGZbp9vKshEQODcrmcgsYAoKqe"
1065 + "uu5u7jk8XVxEfQ0m5qL8UOErXPlJovSmKUmP5B5T0w299zIWDYCzSoNasHpHjOMDLAiDDeHbozUOn9t3Qou00e9POq4RMM0VnIx1H38nJoJZz2XH8CI5YMQe7oTagaxgQTF2aa0qaq2"
1066 + "V6nJsfRGRklGjNhFFYP2cS4Xv2IJO9DSX6LTXOmENrGVJJvMOZcvnBaZPfoAHN0LU4i1SoepLzulIxnZBfkUWFJgZ5wQ0Bco2GC1HMqzW21rwy4XHRxXpXbmW8LVyoA1KbnmVmROycU4"
1067 + "scTZ62IxIcIWCVeMjBIcTviXULbPUyqlfEPXWr8IMJtpAaELWgyquPClAREMDs2b9ztKmUeXlMccFES1XWbFTrhBHhmmDyVReEgCwfokrUFR13LTUK1k8I6OEHOs";
1068 updatedResource.setDescription(tooLongResourceDesc);
1069 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1070 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1072 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1073 } catch (ByActionStatusComponentException e) {
1074 assertComponentException(e, ActionStatus.COMPONENT_DESCRIPTION_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_DESCRIPTION_MAX_LENGTH);
1079 public void testIconWrongFormat_UPDATE() {
1080 Resource resource = createResourceObject(true);
1081 Resource updatedResource = createResourceObject(true);
1083 // this is in order to prevent failing with 403 earlier
1084 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1085 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1088 String icon = "icon.jpg";
1089 updatedResource.setIcon(icon);
1090 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1091 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1093 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1094 } catch (ByActionStatusComponentException e) {
1095 assertComponentException(e, ActionStatus.COMPONENT_INVALID_ICON, ComponentTypeEnum.RESOURCE.getValue());
1100 public void testIconAfterCertify_UPDATE() {
1101 Resource resource = createResourceObject(true);
1102 Resource updatedResource = createResourceObject(true);
1104 // this is in order to prevent failing with 403 earlier
1105 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1106 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1109 String icon = "icon";
1110 updatedResource.setIcon(icon);
1112 resource.setVersion("1.0");
1114 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1115 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1117 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1118 } catch (ByActionStatusComponentException e) {
1119 assertComponentException(e, ActionStatus.RESOURCE_ICON_CANNOT_BE_CHANGED);
1124 public void testTagsExceedsLimit_UPDATE() {
1125 Resource resource = createResourceObject(true);
1126 Resource updatedResource = createResourceObject(true);
1128 // this is in order to prevent failing with 403 earlier
1129 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1130 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1132 String tag1 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjQ";
1133 String tag2 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjW";
1134 String tag3 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjE";
1135 String tag4 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjb";
1136 String tag5 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjr";
1137 String tag6 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
1138 String tag7 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
1139 String tag8 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjd";
1140 String tag9 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
1141 String tag10 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
1142 String tag11 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjh";
1143 String tag12 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjj";
1144 String tag13 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjk";
1145 String tag14 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjs";
1146 String tag15 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjz";
1147 String tag16 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjx";
1148 String tag17 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj2";
1149 String tag18 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj3";
1150 String tag19 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj4";
1151 String tag20 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj5";
1152 String tag21 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj0";
1154 List<String> tagsList = new ArrayList<>();
1164 tagsList.add(tag10);
1165 tagsList.add(tag11);
1166 tagsList.add(tag12);
1167 tagsList.add(tag13);
1168 tagsList.add(tag14);
1169 tagsList.add(tag15);
1170 tagsList.add(tag16);
1171 tagsList.add(tag17);
1172 tagsList.add(tag18);
1173 tagsList.add(tag19);
1174 tagsList.add(tag20);
1175 tagsList.add(tag21);
1176 tagsList.add(resource.getName());
1178 updatedResource.setTags(tagsList);
1179 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1180 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1182 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1183 } catch (ByActionStatusComponentException e) {
1184 assertComponentException(e, ActionStatus.COMPONENT_TAGS_EXCEED_LIMIT, "" + ValidationUtils.TAG_LIST_MAX_LENGTH);
1189 public void testVendorNameWrongFormat_UPDATE() {
1190 Resource resource = createResourceObject(true);
1191 Resource updatedResource = createResourceObject(true);
1193 // this is in order to prevent failing with 403 earlier
1194 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1195 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1198 String nameWrongFormat = "ljg*fd";
1199 updatedResource.setVendorName(nameWrongFormat);
1200 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1201 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1203 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1204 } catch (ByActionStatusComponentException e) {
1205 assertComponentException(e, ActionStatus.INVALID_VENDOR_NAME, nameWrongFormat);
1210 public void testVendorNameWrongFormat() {
1211 Resource resource = createResourceObject(true);
1212 Resource updatedResource = createResourceObject(true);
1214 // this is in order to prevent failing with 403 earlier
1215 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1216 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1219 String nameWrongFormat = "ljg*fd";
1220 updatedResource.setVendorName(nameWrongFormat);
1221 resource.setVersion("1.0");
1223 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1224 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1226 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1227 } catch (ByActionStatusComponentException e) {
1228 assertComponentException(e, ActionStatus.INVALID_VENDOR_NAME, nameWrongFormat);
1233 public void testVendorReleaseExceedsLimit_UPDATE() {
1234 Resource resource = createResourceObject(true);
1235 Resource updatedResource = createResourceObject(true);
1237 // this is in order to prevent failing with 403 earlier
1238 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1239 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1240 // 129 chars, the limit is 128
1241 String tooLongVendorRelease = "h1KSyJh9EspI8SPwAGu4VETfqWejeanuB1PCJBxJmJncYnrW0lnsEFFVRIukRJkwlOVnZCy8p38tjhANeZq3BGMHIawWR6ICl8Wi9mikRYALWgvJug00JrlQ0iPVKPLxy";
1242 updatedResource.setVendorRelease(tooLongVendorRelease);
1243 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1244 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1246 bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1247 } catch (ByActionStatusComponentException e) {
1248 assertComponentException(e, ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH);
1253 public void testResourceBadCategory_UPDATE() {
1254 Resource resource = createResourceObject(true);
1255 Resource updatedResource = createResourceObject(true);
1257 // this is in order to prevent failing with 403 earlier
1258 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1259 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1261 String resourceId = resource.getUniqueId();
1262 String badCategory = "ddfds";
1263 updatedResource.setCategories(null);
1264 updatedResource.addCategory(badCategory, "fikt");
1265 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1266 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1268 bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1269 } catch (ByActionStatusComponentException e) {
1270 assertComponentException(e, ActionStatus.COMPONENT_INVALID_CATEGORY, ComponentTypeEnum.RESOURCE.getValue());
1275 public void testResourceCategoryAfterCertify_UPDATE() {
1276 Resource resource = createResourceObject(true);
1277 Resource updatedResource = createResourceObject(true);
1279 // this is in order to prevent failing with 403 earlier
1280 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1281 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1283 String resourceId = resource.getUniqueId();
1284 updatedResource.setCategories(null);
1285 updatedResource.addCategory(RESOURCE_CATEGORY1, UPDATED_SUBCATEGORY);
1286 resource.setVersion("1.0");
1288 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1289 when(toscaOperationFacade.updateToscaElement(updatedResource)).thenReturn(dataModelResponse);
1291 bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1292 } catch (ByActionStatusComponentException e) {
1293 assertComponentException(e, ActionStatus.RESOURCE_CATEGORY_CANNOT_BE_CHANGED);
1297 // Derived from start
1299 public void testResourceTemplateNotExist_UPDATE() {
1300 Resource resource = createResourceObject(true);
1301 Resource updatedResource = createResourceObject(true);
1303 // this is in order to prevent failing with 403 earlier
1304 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1305 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1306 String resourceId = resource.getUniqueId();
1308 List<String> list = null;
1309 updatedResource.setDerivedFrom(list);
1310 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1311 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1313 bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1314 } catch (ByActionStatusComponentException e) {
1315 assertComponentException(e, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
1320 public void testResourceTemplateEmpty_UPDATE() {
1321 Resource resource = createResourceObject(true);
1322 Resource updatedResource = createResourceObject(true);
1323 String resourceId = resource.getUniqueId();
1325 // this is in order to prevent failing with 403 earlier
1326 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1327 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1329 updatedResource.setDerivedFrom(new ArrayList<>());
1330 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1331 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1333 bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1334 } catch (ByActionStatusComponentException e) {
1335 assertComponentException(e, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
1340 public void testResourceTemplateInvalid_UPDATE() {
1341 Resource resource = createResourceObject(true);
1342 Resource updatedResource = createResourceObject(true);
1343 String resourceId = resource.getUniqueId();
1345 // this is in order to prevent failing with 403 earlier
1346 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1347 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1349 ArrayList<String> derivedFrom = new ArrayList<>();
1350 derivedFrom.add("kuku");
1351 updatedResource.setDerivedFrom(derivedFrom);
1352 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1353 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1355 bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1356 } catch (ByActionStatusComponentException e) {
1357 assertComponentException(e, ActionStatus.PARENT_RESOURCE_NOT_FOUND);
1362 public void testResourceTemplateCertify_UPDATE_HAPPY() {
1363 Resource resource = createResourceObject(true);
1364 Resource updatedResource = createResourceObject(true);
1365 String resourceId = resource.getUniqueId();
1367 // this is in order to prevent failing with 403 earlier
1368 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1369 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1371 Either<Boolean, StorageOperationStatus> isToscaNameExtending = Either.left(true);
1372 when(toscaOperationFacade.validateToscaResourceNameExtends(Mockito.anyString(), Mockito.anyString())).thenReturn(isToscaNameExtending);
1374 Either<Map<String, PropertyDefinition>, StorageOperationStatus> findPropertiesOfNode = Either.left(new HashMap<>());
1375 when(propertyOperation.deleteAllPropertiesAssociatedToNode(any(NodeTypeEnum.class), Mockito.anyString())).thenReturn(findPropertiesOfNode);
1377 resource.setVersion("1.0");
1379 ArrayList<String> derivedFrom = new ArrayList<>();
1380 derivedFrom.add("tosca.nodes.Root");
1381 updatedResource.setDerivedFrom(derivedFrom);
1382 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(updatedResource);
1383 when(toscaOperationFacade.updateToscaElement(updatedResource)).thenReturn(dataModelResponse);
1384 Resource createdResource = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1385 assertThat(createdResource).isNotNull();
1389 public void testResourceTemplateCertify_UPDATE_SAD() {
1390 Resource resource = createResourceObject(true);
1391 Resource updatedResource = createResourceObject(true);
1392 String resourceId = resource.getUniqueId();
1394 // this is in order to prevent failing with 403 earlier
1395 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1396 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1398 Either<Boolean, StorageOperationStatus> isToscaNameExtending = Either.left(false);
1399 when(toscaOperationFacade.validateToscaResourceNameExtends(Mockito.anyString(), Mockito.anyString()))
1400 .thenReturn(isToscaNameExtending);
1402 resource.setVersion("1.0");
1404 ArrayList<String> derivedFrom = new ArrayList<>();
1405 derivedFrom.add("tosca.nodes.Root");
1406 updatedResource.setDerivedFrom(derivedFrom);
1407 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1408 when(toscaOperationFacade.updateToscaElement(updatedResource)).thenReturn(dataModelResponse);
1409 Either<Map<String, PropertyDefinition>, StorageOperationStatus> findPropertiesOfNode = Either.left(new HashMap<>());
1410 when(propertyOperation.deleteAllPropertiesAssociatedToNode(any(NodeTypeEnum.class), Mockito.anyString())).thenReturn(findPropertiesOfNode);
1413 bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1414 } catch (ByActionStatusComponentException e) {
1415 assertComponentException(e, ActionStatus.PARENT_RESOURCE_DOES_NOT_EXTEND);
1418 // Derived from stop
1421 public void createOrUpdateResourceAlreadyCheckout() {
1422 Resource resourceExist = createResourceObject(false);
1423 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1424 Resource createdResource = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1425 createdResource.setLastUpdaterUserId(user.getUserId());
1426 assertThat(createdResource).isNotNull();
1427 Either<Resource, StorageOperationStatus> getLatestResult = Either.left(createdResource);
1428 Either<Component, StorageOperationStatus> getCompLatestResult = Either.left(createdResource);
1429 when(toscaOperationFacade.getLatestByToscaResourceName(resourceExist.getToscaResourceName())).thenReturn(getCompLatestResult);
1430 when(toscaOperationFacade.overrideComponent(any(Resource.class), any(Resource.class))).thenReturn(getLatestResult);
1432 Resource resourceToUpdtae = createResourceObject(false);
1434 ImmutablePair<Resource, ActionStatus> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdtae, user, false, false, false, null, null, false);
1435 assertNotNull(createOrUpdateResource);
1437 Mockito.verify(toscaOperationFacade, Mockito.times(1)).overrideComponent(any(Resource.class), any(Resource.class));
1438 Mockito.verify(lifecycleBl, Mockito.times(0)).changeState(Mockito.anyString(), eq(user), eq(LifeCycleTransitionEnum.CHECKOUT), any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1443 public void createOrUpdateResourceCertified() {
1444 Resource resourceExist = createResourceObject(false);
1445 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1446 Resource createdResource = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1448 assertThat(createdResource).isNotNull();
1449 createdResource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
1450 createdResource.setVersion("1.0");
1452 Either<Resource, StorageOperationStatus> getLatestResult = Either.left(createdResource);
1453 Either<Component, StorageOperationStatus> getCompLatestResult = Either.left(createdResource);
1454 when(toscaOperationFacade.getLatestByToscaResourceName(resourceExist.getToscaResourceName())).thenReturn(getCompLatestResult); when(toscaOperationFacade.overrideComponent(any(Resource.class), any(Resource.class))).thenReturn(getLatestResult);
1456 when(lifecycleBl.changeState(Mockito.anyString(), eq(user), eq(LifeCycleTransitionEnum.CHECKOUT), any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean())).thenReturn(Either.left(createdResource));
1458 Resource resourceToUpdtae = createResourceObject(false);
1460 ImmutablePair<Resource, ActionStatus> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdtae, user, false, false, false, null, null, false);
1461 assertNotNull(createOrUpdateResource);
1463 Mockito.verify(toscaOperationFacade, Mockito.times(1)).overrideComponent(any(Resource.class), any(Resource.class));
1464 Mockito.verify(lifecycleBl, Mockito.times(1)).changeState(Mockito.anyString(), eq(user), eq(LifeCycleTransitionEnum.CHECKOUT), any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1469 public void createOrUpdateResourceNotExist() {
1470 Resource resourceToUpdtae = createResourceObject(false);
1472 Either<Component, StorageOperationStatus> getLatestResult = Either.right(StorageOperationStatus.NOT_FOUND);
1473 when(toscaOperationFacade.getLatestByName(resourceToUpdtae.getName())).thenReturn(getLatestResult);
1475 Either<Component, StorageOperationStatus> getLatestToscaNameResult = Either.right(StorageOperationStatus.NOT_FOUND);
1476 when(toscaOperationFacade.getLatestByToscaResourceName(resourceToUpdtae.getToscaResourceName())).thenReturn(getLatestToscaNameResult);
1478 ImmutablePair<Resource, ActionStatus> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdtae, user, false, false, false, null, null, false);
1479 assertThat(createOrUpdateResource).isNotNull();
1481 Mockito.verify(toscaOperationFacade, times(1)).createToscaComponent(eq(resourceToUpdtae));
1482 Mockito.verify(toscaOperationFacade, Mockito.times(0)).overrideComponent(any(Resource.class), any(Resource.class));
1483 Mockito.verify(lifecycleBl, Mockito.times(0)).changeState(Mockito.anyString(), eq(user), eq(LifeCycleTransitionEnum.CHECKOUT), any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1488 public void updateNestedResource_typeIsNew() throws IOException {
1489 Resource resourceToUpdate = createResourceObject(false);
1490 String nodeName = Constants.USER_DEFINED_RESOURCE_NAMESPACE_PREFIX + "." + "abc";
1491 String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml");
1492 CsarInfo csarInfo = new CsarInfo(user, "abcd1234", new HashMap<>(),
1493 RESOURCE_NAME, "template name", jsonContent, true);
1494 String nestedResourceName = bl.buildNestedToscaResourceName(resourceToUpdate.getResourceType().name(), csarInfo.getVfResourceName(), nodeName).getRight();
1495 when(toscaOperationFacade.getLatestByName(resourceToUpdate.getName())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1496 when(toscaOperationFacade.getLatestByToscaResourceName(resourceToUpdate.getToscaResourceName())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1497 when(toscaOperationFacade.getLatestByToscaResourceName(nestedResourceName)).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1499 ImmutablePair<Resource, ActionStatus> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdate, user, false, false, false, csarInfo,
1501 assertThat(createOrUpdateResource).isNotNull();
1503 Mockito.verify(toscaOperationFacade, times(1)).createToscaComponent(eq(resourceToUpdate));
1504 Mockito.verify(toscaOperationFacade, times(0)).overrideComponent(any(Resource.class), any(Resource.class));
1505 Mockito.verify(lifecycleBl, times(0)).changeState(Mockito.anyString(), eq(user), eq(LifeCycleTransitionEnum.CHECKOUT), any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1509 public void updateNestedResource_typeExists() throws IOException {
1510 Resource resourceToUpdate = createResourceObject(false);
1511 setCanWorkOnResource(resourceResponse);
1512 String nodeName = Constants.USER_DEFINED_RESOURCE_NAMESPACE_PREFIX + "." + "abc";
1513 String jsonContent = ImportUtilsTest.loadFileNameToJsonString("normative-types-new-webServer.yml");
1514 CsarInfo csarInfo = new CsarInfo(user, "abcd1234", new HashMap<>(),
1515 RESOURCE_NAME, "template name", jsonContent, true);
1516 String nestedResourceName = bl.buildNestedToscaResourceName(resourceToUpdate.getResourceType().name(), csarInfo.getVfResourceName(), nodeName).getRight();
1517 when(toscaOperationFacade.getLatestByName(resourceToUpdate.getName())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1518 when(toscaOperationFacade.getLatestByToscaResourceName(resourceToUpdate.getToscaResourceName())).thenReturn(Either.right(StorageOperationStatus.NOT_FOUND));
1519 when(toscaOperationFacade.getLatestByToscaResourceName(nestedResourceName)).thenReturn(Either.left(resourceResponse));
1520 when(toscaOperationFacade.overrideComponent(any(Resource.class), any(Resource.class))).thenReturn(Either.left(resourceResponse));
1522 ImmutablePair<Resource, ActionStatus> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdate, user, false, false, false, csarInfo,
1524 assertThat(createOrUpdateResource).isNotNull();
1525 Mockito.verify(toscaOperationFacade, times(1)).overrideComponent(any(Resource.class), any(Resource.class));
1526 Mockito.verify(lifecycleBl, times(0)).changeState(Mockito.anyString(), eq(user), eq(LifeCycleTransitionEnum.CHECKOUT), any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1530 public void testValidatePropertiesDefaultValues_SuccessfullWithoutProperties() {
1531 Resource basic = createResourceObject(true);
1533 Either<Boolean, ResponseFormat> validatePropertiesDefaultValues = bl.validatePropertiesDefaultValues(basic);
1534 assertTrue(validatePropertiesDefaultValues.isLeft());
1538 public void testValidatePropertiesDefaultValues_SuccessfullWithProperties() {
1539 Resource basic = createResourceObject(true);
1540 PropertyDefinition property = new PropertyDefinition();
1541 property.setName("myProperty");
1542 property.setType(ToscaPropertyType.INTEGER.getType());
1543 property.setDefaultValue("1");
1544 List<PropertyDefinition> properties = new ArrayList<>();
1545 properties.add(property);
1546 basic.setProperties(properties);
1547 when(propertyOperation.isPropertyTypeValid(property)).thenReturn(true);
1548 when(propertyOperation.isPropertyDefaultValueValid(property, emptyDataTypes)).thenReturn(true);
1549 Either<Boolean, ResponseFormat> validatePropertiesDefaultValues = bl.validatePropertiesDefaultValues(basic);
1550 assertTrue(validatePropertiesDefaultValues.isLeft());
1554 public void testValidatePropertiesDefaultValues_FailedWithProperties() {
1555 Resource basic = createResourceObject(true);
1556 PropertyDefinition property = new PropertyDefinition();
1557 property.setName("myProperty");
1558 property.setType(ToscaPropertyType.INTEGER.getType());
1559 property.setDefaultValue("1.5");
1560 List<PropertyDefinition> properties = new ArrayList<>();
1561 properties.add(property);
1562 basic.setProperties(properties);
1564 when(propertyOperation.isPropertyDefaultValueValid(property, emptyDataTypes)).thenReturn(false);
1565 Either<Boolean, ResponseFormat> validatePropertiesDefaultValues = bl.validatePropertiesDefaultValues(basic);
1566 assertTrue(validatePropertiesDefaultValues.isRight());
1570 @SuppressWarnings("unchecked")
1572 public void testFindVfCsarArtifactsToHandle() {
1574 Class<ResourceBusinessLogic> targetClass = ResourceBusinessLogic.class;
1575 String methodName = "findVfCsarArtifactsToHandle";
1576 Resource resource = new Resource();
1577 String deploymentArtifactToUpdateFileName = "deploymentArtifactToUpdate.yaml";
1578 String deploymentArtifactToDeleteFileName = "deploymentArtifactToDelete.yaml";
1579 String deploymentArtifactToCreateFileName = "deploymentArtifactToCreate.yaml";
1581 String artifactInfoToUpdateFileName = "infoArtifactToUpdate.yaml";
1582 String artifactInfoToDeleteFileName = "infoArtifactToDelete.yaml";
1583 String artifactInfoToNotDeleteFileName = "infoArtifactNotToDelete.yaml";
1584 String artifactInfoToCreateFileName = "infoArtifactToCreate.yaml";
1586 byte[] oldPayloadData = "oldPayloadData".getBytes();
1587 byte[] newPayloadData = "newPayloadData".getBytes();
1588 Map<String, ArtifactDefinition> deploymentArtifacts = new HashMap<>();
1590 ArtifactDefinition deploymentArtifactToUpdate = new ArtifactDefinition();
1591 deploymentArtifactToUpdate.setMandatory(false);
1592 deploymentArtifactToUpdate.setArtifactName(deploymentArtifactToUpdateFileName);
1593 deploymentArtifactToUpdate.setArtifactType("SNMP_POLL");
1594 deploymentArtifactToUpdate.setPayload(oldPayloadData);
1595 deploymentArtifactToUpdate.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1597 ArtifactDefinition deploymentArtifactToDelete = new ArtifactDefinition();
1598 deploymentArtifactToDelete.setMandatory(false);
1599 deploymentArtifactToDelete.setArtifactName(deploymentArtifactToDeleteFileName);
1600 deploymentArtifactToDelete.setArtifactType("SNMP_TRAP");
1601 deploymentArtifactToDelete.setPayload(oldPayloadData);
1602 deploymentArtifactToDelete.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1604 ArtifactDefinition deploymentArtifactToIgnore = new ArtifactDefinition();
1606 deploymentArtifacts.put(ValidationUtils.normalizeArtifactLabel(deploymentArtifactToUpdate.getArtifactName()), deploymentArtifactToUpdate);
1607 deploymentArtifacts.put(ValidationUtils.normalizeArtifactLabel(deploymentArtifactToDelete.getArtifactName()), deploymentArtifactToDelete);
1608 deploymentArtifacts.put("ignore", deploymentArtifactToIgnore);
1610 Map<String, ArtifactDefinition> artifacts = new HashMap<>();
1612 ArtifactDefinition artifactToUpdate = new ArtifactDefinition();
1613 artifactToUpdate.setMandatory(false);
1614 artifactToUpdate.setArtifactName(artifactInfoToUpdateFileName);
1615 artifactToUpdate.setArtifactType("SNMP_POLL");
1616 artifactToUpdate.setPayload(oldPayloadData);
1617 artifactToUpdate.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1619 ArtifactDefinition artifactToDelete = new ArtifactDefinition();
1620 artifactToDelete.setMandatory(false);
1621 artifactToDelete.setArtifactName(artifactInfoToDeleteFileName);
1622 artifactToDelete.setArtifactType("SNMP_TRAP");
1623 artifactToDelete.setPayload(oldPayloadData);
1624 artifactToDelete.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1625 artifactToDelete.setIsFromCsar(true);
1627 ArtifactDefinition artifactToNotDelete = new ArtifactDefinition();
1628 artifactToNotDelete.setMandatory(false);
1629 artifactToNotDelete.setArtifactName(artifactInfoToNotDeleteFileName);
1630 artifactToNotDelete.setArtifactType("SNMP_TRAP");
1631 artifactToNotDelete.setPayload(oldPayloadData);
1632 artifactToNotDelete.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1633 artifactToNotDelete.setIsFromCsar(false);
1635 ArtifactDefinition artifactToIgnore = new ArtifactDefinition();
1637 artifacts.put(ValidationUtils.normalizeArtifactLabel(artifactToUpdate.getArtifactName()), artifactToUpdate);
1638 artifacts.put(ValidationUtils.normalizeArtifactLabel(artifactToDelete.getArtifactName()), artifactToDelete);
1639 artifacts.put(ValidationUtils.normalizeArtifactLabel(artifactToNotDelete.getArtifactName()), artifactToNotDelete);
1640 artifacts.put("ignore", artifactToIgnore);
1642 resource.setDeploymentArtifacts(deploymentArtifacts);
1643 resource.setArtifacts(artifacts);
1645 List<NonMetaArtifactInfo> artifactPathAndNameList = new ArrayList<>();
1646 NonMetaArtifactInfo deploymentArtifactInfoToUpdate = new NonMetaArtifactInfo(deploymentArtifactToUpdate.getArtifactName(), null,
1647 ArtifactTypeEnum.findType(deploymentArtifactToUpdate.getArtifactType()), ArtifactGroupTypeEnum.DEPLOYMENT,
1648 newPayloadData, deploymentArtifactToUpdate.getArtifactName(), false);
1650 NonMetaArtifactInfo informationalArtifactInfoToUpdate = new NonMetaArtifactInfo(artifactToUpdate.getArtifactName(), null,
1651 ArtifactTypeEnum.findType(artifactToUpdate.getArtifactType()), ArtifactGroupTypeEnum.DEPLOYMENT,
1652 newPayloadData, artifactToUpdate.getArtifactName(), false);
1654 NonMetaArtifactInfo informationalArtifactInfoToUpdateFromCsar = new NonMetaArtifactInfo(artifactToUpdate.getArtifactName(), null,
1655 ArtifactTypeEnum.findType(artifactToUpdate.getArtifactType()), ArtifactGroupTypeEnum.INFORMATIONAL,
1656 newPayloadData, artifactToUpdate.getArtifactName(), true);
1658 NonMetaArtifactInfo deploymentArtifactInfoToUpdateFromCsar = new NonMetaArtifactInfo(artifactToUpdate.getArtifactName(), null,
1659 ArtifactTypeEnum.findType(artifactToUpdate.getArtifactType()), ArtifactGroupTypeEnum.DEPLOYMENT,
1660 newPayloadData, artifactToUpdate.getArtifactName(), true);
1662 NonMetaArtifactInfo deploymentArtifactInfoToCreate = new NonMetaArtifactInfo(deploymentArtifactToCreateFileName, null,
1663 ArtifactTypeEnum.OTHER, ArtifactGroupTypeEnum.DEPLOYMENT, newPayloadData, deploymentArtifactToCreateFileName, false);
1665 NonMetaArtifactInfo informationalArtifactInfoToCreate = new NonMetaArtifactInfo(artifactInfoToCreateFileName, null,
1666 ArtifactTypeEnum.OTHER, ArtifactGroupTypeEnum.INFORMATIONAL,
1667 newPayloadData, artifactInfoToCreateFileName, false);
1669 artifactPathAndNameList.add(deploymentArtifactInfoToUpdate);
1670 artifactPathAndNameList.add(informationalArtifactInfoToUpdate);
1671 artifactPathAndNameList.add(deploymentArtifactInfoToCreate);
1672 artifactPathAndNameList.add(informationalArtifactInfoToCreate);
1673 artifactPathAndNameList.add(informationalArtifactInfoToUpdateFromCsar);
1674 artifactPathAndNameList.add(deploymentArtifactInfoToUpdateFromCsar);
1676 Object[] argObjects = {resource, artifactPathAndNameList, user};
1677 Class[] argClasses = {Resource.class, List.class, User.class};
1679 Method method = targetClass.getDeclaredMethod(methodName, argClasses);
1680 method.setAccessible(true);
1681 Either<EnumMap<ArtifactOperationEnum, List<NonMetaArtifactInfo>>, ResponseFormat> findVfCsarArtifactsToHandleRes =
1682 (Either<EnumMap<ArtifactOperationEnum, List<NonMetaArtifactInfo>>, ResponseFormat>) method.invoke(bl, argObjects);
1683 assertTrue(findVfCsarArtifactsToHandleRes.isLeft());
1684 EnumMap<ArtifactOperationEnum, List<NonMetaArtifactInfo>> foundVfArtifacts = findVfCsarArtifactsToHandleRes.left().value();
1685 assertEquals(4, foundVfArtifacts.get(ArtifactOperationEnum.CREATE).size());
1686 assertEquals(4, foundVfArtifacts.get(ArtifactOperationEnum.UPDATE).size());
1687 assertEquals(1, foundVfArtifacts.get(ArtifactOperationEnum.DELETE).size());
1689 } catch (Exception e) {
1690 e.printStackTrace();
1695 public void testVFGeneratedInputs() {
1696 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1697 Resource resource = createVF();
1698 List<InputDefinition> inputs = resource.getInputs();
1699 assertEquals(6, inputs.size());
1700 for (InputDefinition input : inputs) {
1701 assertThat(input.getOwnerId()).isNotNull();
1703 assertEquals(resource.getDerivedFromGenericType(), genericVF.getToscaResourceName());
1704 assertEquals(resource.getDerivedFromGenericVersion(), genericVF.getVersion());
1708 public void testCRGeneratedInputs() {
1709 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1710 Resource resource = createCR();
1711 List<InputDefinition> inputs = resource.getInputs();
1712 assertEquals(3, inputs.size());
1713 for (InputDefinition input : inputs) {
1714 assertThat(input.getOwnerId()).isNotNull();
1716 assertEquals(resource.getDerivedFromGenericType(), genericCR.getToscaResourceName());
1717 assertEquals(resource.getDerivedFromGenericVersion(), genericCR.getVersion());
1721 public void testVFUpdateGenericInputsToLatestOnCheckout() {
1722 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1723 //create a VF that is derived from generic version 1.0
1724 Resource resource = createVF();
1725 // create a new generic version without properties
1726 genericVF.setVersion("2.0");
1727 genericVF.setProperties(null);
1728 String currentDerivedFromVersion = resource.getDerivedFromGenericVersion();
1729 List<InputDefinition> currentInputs = resource.getInputs();
1730 //verify previous inputs ownerId fields exist - user may not delete generated inputs
1731 assertEquals(6, currentInputs.stream().filter(p -> null != p.getOwnerId()).collect(Collectors.toList()).size());
1732 Either<Boolean, ResponseFormat> upgradeToLatestGeneric = bl.shouldUpgradeToLatestGeneric(resource);
1734 assertTrue(upgradeToLatestGeneric.isLeft());
1735 //verify update required and valid
1736 assertTrue(upgradeToLatestGeneric.left().value());
1737 //verify version was upgraded
1738 assertNotEquals(resource.getDerivedFromGenericVersion(), currentDerivedFromVersion);
1739 //verify inputs were not deleted
1740 assertEquals(6, resource.getInputs().size());
1741 //verify inputs ownerId fields were removed - user may delete/edit inputs
1742 assertEquals(6, resource.getInputs()
1744 .filter(p -> null == p.getOwnerId())
1745 .collect(Collectors.toList())
1751 public void testVFUpdateGenericInputsToLatestOnCheckoutNotPerformed() {
1753 //create a VF that is derived from generic version 1.0
1754 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1755 Resource resource = createVF();
1757 //add an input to the VF
1758 PropertyDefinition newProp = new PropertyDefinition();
1759 newProp.setType("integer");
1760 newProp.setName("newProp");
1761 resource.getInputs().add(new InputDefinition(newProp));
1763 //create a new generic version with a new property which has the same name as a user defined input on the VF with a different type
1764 genericVF.setVersion("2.0");
1765 newProp.setType("string");
1766 genericVF.setProperties(new ArrayList<>());
1767 genericVF.getProperties().add(newProp);
1768 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericVF));
1769 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericVF.getProperties(), genericVF.getUniqueId())).thenCallRealMethod();
1770 String currentDerivedFromVersion = resource.getDerivedFromGenericVersion();
1771 assertEquals(6, resource.getInputs()
1773 .filter(p -> null != p.getOwnerId())
1774 .collect(Collectors.toList())
1776 Either<Boolean, ResponseFormat> upgradeToLatestGeneric = bl.shouldUpgradeToLatestGeneric(resource);
1778 assertTrue(upgradeToLatestGeneric.isLeft());
1779 //verify update is invalid an void
1780 assertFalse(upgradeToLatestGeneric.left().value());
1781 //verify version was not upgraded
1782 assertEquals(resource.getDerivedFromGenericVersion(), currentDerivedFromVersion);
1783 //verify inputs were not removed
1784 assertEquals(7, resource.getInputs().size());
1785 //verify user defined input exists
1786 assertEquals(1, resource.getInputs()
1788 .filter(p -> null == p.getOwnerId())
1789 .collect(Collectors.toList())
1791 assertEquals("integer", resource.getInputs()
1793 .filter(p -> null == p.getOwnerId())
1800 public void testPNFGeneratedInputsNoGeneratedInformationalArtifacts() {
1801 validateUserRoles(Role.ADMIN, Role.DESIGNER);
1802 Resource resource = createPNF();
1803 List<InputDefinition> inputs = resource.getInputs();
1804 assertEquals(3, inputs.size());
1805 for (InputDefinition input : inputs) {
1806 assertThat(input.getOwnerId()).isNotNull();
1808 assertEquals(resource.getDerivedFromGenericType(), genericPNF.getToscaResourceName());
1809 assertEquals(resource.getDerivedFromGenericVersion(), genericPNF.getVersion());
1810 assertEquals(0, resource.getArtifacts().size());
1814 private Resource createVF() {
1816 genericVF = setupGenericTypeMock(GENERIC_VF_NAME);
1817 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_VF_NAME)).thenReturn(Either.left(genericVF));
1818 Resource resource = createResourceObject(true);
1819 resource.setDerivedFrom(null);
1820 resource.setResourceType(ResourceTypeEnum.VF);
1821 when(toscaOperationFacade.createToscaComponent(resource)).thenReturn(Either.left(resource));
1822 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericVF));
1823 when(genericTypeBusinessLogic.generateInputsFromGenericTypeProperties(genericVF)).thenCallRealMethod();
1824 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericVF.getProperties(), resource.getUniqueId())).thenCallRealMethod();
1825 Resource createdResource = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1826 assertThat(createdResource).isNotNull();
1827 return createdResource;
1831 private Resource createCR() {
1833 genericCR = setupGenericTypeMock(GENERIC_CR_NAME);
1834 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_CR_NAME)).thenReturn(Either.left(genericCR));
1835 Resource resource = createResourceObject(true);
1836 resource.setDerivedFrom(null);
1837 resource.setResourceType(ResourceTypeEnum.CR);
1838 when(toscaOperationFacade.createToscaComponent(resource)).thenReturn(Either.left(resource));
1839 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericCR));
1840 when(genericTypeBusinessLogic.generateInputsFromGenericTypeProperties(genericCR)).thenCallRealMethod();
1841 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericCR.getProperties(), resource.getUniqueId())).thenCallRealMethod();
1842 Resource createdResource = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1843 assertThat(createdResource).isNotNull();
1844 return createdResource;
1847 private Resource createPNF() {
1849 genericPNF = setupGenericTypeMock(GENERIC_PNF_NAME);
1850 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_PNF_NAME)).thenReturn(Either.left(genericPNF));
1851 Resource resource = createResourceObject(true);
1852 resource.setDerivedFrom(null);
1853 resource.setResourceType(ResourceTypeEnum.PNF);
1854 when(toscaOperationFacade.createToscaComponent(resource)).thenReturn(Either.left(resource));
1855 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericPNF));
1856 when(genericTypeBusinessLogic.generateInputsFromGenericTypeProperties(genericPNF)).thenCallRealMethod();
1857 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericPNF.getProperties(), resource.getUniqueId())).thenCallRealMethod();
1858 Resource createdResource = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1859 assertThat(createdResource).isNotNull();
1860 return createdResource;
1864 private Map<String, String> getGenericPropertiesByToscaName(String toscaName) {
1865 HashMap<String, String> PNFProps = new HashMap<String, String>() {{
1866 put("nf_function", "string");
1867 put("nf_role", "string");
1868 put("nf_type", "string");
1871 HashMap<String, String> CRProps = new HashMap<String, String>() {{
1872 put("cr_function", "string");
1873 put("cr_role", "string");
1874 put("cr_type", "string");
1877 HashMap<String, String> VFProps = new HashMap<String, String>() {{
1879 put("availability_zone_max_count", "integer");
1880 put("min_instances", "integer");
1881 put("max_instances", "integer");
1884 if (toscaName.contains("PNF")) return PNFProps;
1885 if (toscaName.contains("CR")) return CRProps;
1886 if (toscaName.contains("VF")) return VFProps;
1888 return new HashMap<>();
1892 private Resource setupGenericTypeMock(String toscaName) {
1894 Resource genericType = createResourceObject(true);
1895 genericType.setVersion("1.0");
1896 genericType.setToscaResourceName(toscaName);
1897 List<PropertyDefinition> genericProps = new ArrayList<>();
1898 Map<String, String> genericPropsMap = getGenericPropertiesByToscaName(toscaName);
1899 genericPropsMap.forEach((name, type) -> {
1900 PropertyDefinition prop = new PropertyDefinition();
1903 genericProps.add(prop);
1906 genericType.setProperties(genericProps);
1910 private void validateUserRoles(Role... roles) {
1911 List<Role> listOfRoles = Stream.of(roles).collect(Collectors.toList());
1916 public void testgetAllCertifiedResources() throws Exception {
1917 List<Resource> list = bl.getAllCertifiedResources(true, HighestFilterEnum.HIGHEST_ONLY, "USER");
1918 Assert.assertEquals(reslist,list);
1921 @Test(expected = StorageException.class)
1922 public void testgetAllCertifiedResources_exception() throws Exception {
1923 List<Resource> list = bl.getAllCertifiedResources(false, HighestFilterEnum.NON_HIGHEST_ONLY, "USER");
1924 Assert.assertEquals(reslist,list);
1928 public void testvalidateResourceNameExists() throws Exception {
1929 Either<Map<String, Boolean>, ResponseFormat> res = bl.validateResourceNameExists("Resource", ResourceTypeEnum.CR, "jh0003");
1930 Assert.assertEquals(true,res.isLeft());