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=========================================================
21 package org.openecomp.sdc.be.components.impl;
23 import static org.junit.Assert.assertEquals;
24 import static org.junit.Assert.assertFalse;
25 import static org.junit.Assert.assertNotNull;
26 import static org.junit.Assert.assertTrue;
27 import static org.mockito.Mockito.when;
29 import java.lang.reflect.Method;
30 import java.util.ArrayList;
31 import java.util.EnumMap;
32 import java.util.HashMap;
33 import java.util.List;
35 import java.util.stream.Collectors;
37 import javax.servlet.ServletContext;
39 import org.apache.commons.lang3.tuple.ImmutablePair;
40 import org.junit.Before;
41 import org.junit.Ignore;
42 import org.junit.Test;
43 import org.mockito.InjectMocks;
44 import org.mockito.Mockito;
45 import org.mockito.MockitoAnnotations;
46 import org.openecomp.sdc.ElementOperationMock;
47 import org.openecomp.sdc.be.auditing.api.IAuditingManager;
48 import org.openecomp.sdc.be.auditing.impl.AuditingLogFormatUtil;
49 import org.openecomp.sdc.be.auditing.impl.AuditingManager;
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.config.ConfigurationManager;
55 import org.openecomp.sdc.be.dao.api.ActionStatus;
56 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
57 import org.openecomp.sdc.be.datatypes.enums.ComponentTypeEnum;
58 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
59 import org.openecomp.sdc.be.datatypes.enums.ResourceTypeEnum;
60 import org.openecomp.sdc.be.impl.ComponentsUtils;
61 import org.openecomp.sdc.be.impl.WebAppContextWrapper;
62 import org.openecomp.sdc.be.model.ArtifactDefinition;
63 import org.openecomp.sdc.be.model.Component;
64 import org.openecomp.sdc.be.model.DataTypeDefinition;
65 import org.openecomp.sdc.be.model.InputDefinition;
66 import org.openecomp.sdc.be.model.LifeCycleTransitionEnum;
67 import org.openecomp.sdc.be.model.LifecycleStateEnum;
68 import org.openecomp.sdc.be.model.PropertyDefinition;
69 import org.openecomp.sdc.be.model.Resource;
70 import org.openecomp.sdc.be.model.User;
71 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
72 import org.openecomp.sdc.be.model.jsontitan.operations.NodeTemplateOperation;
73 import org.openecomp.sdc.be.model.jsontitan.operations.NodeTypeOperation;
74 import org.openecomp.sdc.be.model.jsontitan.operations.TopologyTemplateOperation;
75 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
76 import org.openecomp.sdc.be.model.operations.api.ICapabilityTypeOperation;
77 import org.openecomp.sdc.be.model.operations.api.IElementOperation;
78 import org.openecomp.sdc.be.model.operations.api.IPropertyOperation;
79 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
80 import org.openecomp.sdc.be.model.operations.impl.CacheMangerOperation;
81 import org.openecomp.sdc.be.model.operations.impl.CsarOperation;
82 import org.openecomp.sdc.be.model.operations.impl.GraphLockOperation;
83 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
84 import org.openecomp.sdc.be.resources.data.auditing.AuditingActionEnum;
85 import org.openecomp.sdc.be.tosca.CsarUtils.NonMetaArtifactInfo;
86 import org.openecomp.sdc.be.user.Role;
87 import org.openecomp.sdc.be.user.UserBusinessLogic;
88 import org.openecomp.sdc.common.api.ArtifactGroupTypeEnum;
89 import org.openecomp.sdc.common.api.ArtifactTypeEnum;
90 import org.openecomp.sdc.common.api.ConfigurationSource;
91 import org.openecomp.sdc.common.api.Constants;
92 import org.openecomp.sdc.common.impl.ExternalConfiguration;
93 import org.openecomp.sdc.common.impl.FSConfigurationSource;
94 import org.openecomp.sdc.common.util.GeneralUtility;
95 import org.openecomp.sdc.common.util.ValidationUtils;
96 import org.openecomp.sdc.exception.ResponseFormat;
97 import org.slf4j.Logger;
98 import org.slf4j.LoggerFactory;
99 import org.springframework.web.context.WebApplicationContext;
101 import fj.data.Either;
103 public class ResourceBusinessLogicTest {
105 private static Logger log = LoggerFactory.getLogger(ResourceBusinessLogicTest.class.getName());
106 public static final String RESOURCE_CATEGORY = "Network Layer 2-3/Router";
107 public static final String RESOURCE_CATEGORY1 = "Network Layer 2-3";
108 public static final String RESOURCE_SUBCATEGORY = "Router";
110 public static final String UPDATED_CATEGORY = "Network Layer 2-3/Gateway";
111 public static final String UPDATED_SUBCATEGORY = "Gateway";
113 public static final String RESOURCE_NAME = "My-Resource_Name with space";
114 private static final String GENERIC_VF_NAME = "org.openecomp.resource.abstract.nodes.VF";
115 private static final String GENERIC_VFC_NAME = "org.openecomp.resource.abstract.nodes.VFC";
116 private static final String GENERIC_PNF_NAME = "org.openecomp.resource.abstract.nodes.PNF";
118 final ServletContext servletContext = Mockito.mock(ServletContext.class);
119 IAuditingManager iAuditingManager = null;
120 IElementOperation mockElementDao;
121 TitanDao mockTitanDao = Mockito.mock(TitanDao.class);
122 UserBusinessLogic mockUserAdmin = Mockito.mock(UserBusinessLogic.class);
123 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
124 NodeTypeOperation nodeTypeOperation = Mockito.mock(NodeTypeOperation.class);
125 NodeTemplateOperation nodeTemplateOperation = Mockito.mock(NodeTemplateOperation.class);
126 TopologyTemplateOperation topologyTemplateOperation = Mockito.mock(TopologyTemplateOperation.class);
127 final LifecycleBusinessLogic lifecycleBl = Mockito.mock(LifecycleBusinessLogic.class);
128 final ICapabilityTypeOperation capabilityTypeOperation = Mockito.mock(ICapabilityTypeOperation.class);
129 final IPropertyOperation propertyOperation = Mockito.mock(IPropertyOperation.class);
130 final ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
131 WebAppContextWrapper webAppContextWrapper = Mockito.mock(WebAppContextWrapper.class);
132 WebApplicationContext webAppContext = Mockito.mock(WebApplicationContext.class);
133 AuditingLogFormatUtil auditingLogFormatter = Mockito.mock(AuditingLogFormatUtil.class);
135 ResourceBusinessLogic bl = new ResourceBusinessLogic();
136 ResponseFormatManager responseManager = null;
137 AuditingManager auditingManager = Mockito.mock(AuditingManager.class);
138 GraphLockOperation graphLockOperation = Mockito.mock(GraphLockOperation.class);
140 Resource resourceResponse = null;
141 Resource genericVF = null;
142 Resource genericVFC = null;
143 Resource genericPNF = null;
144 ComponentsUtils componentsUtils = new ComponentsUtils();
145 ArtifactsBusinessLogic artifactManager = new ArtifactsBusinessLogic();
146 CsarOperation csarOperation = Mockito.mock(CsarOperation.class);
147 Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<String, DataTypeDefinition>();
148 private GenericTypeBusinessLogic genericTypeBusinessLogic = Mockito.mock(GenericTypeBusinessLogic.class);
149 CacheMangerOperation cacheManager = Mockito.mock(CacheMangerOperation.class);
152 public ResourceBusinessLogicTest() {
157 public void setup() {
158 MockitoAnnotations.initMocks(this);
159 Mockito.reset(propertyOperation);
161 ExternalConfiguration.setAppName("catalog-be");
163 // Init Configuration
164 String appConfigDir = "src/test/resources/config/catalog-be";
165 ConfigurationSource configurationSource = new FSConfigurationSource(ExternalConfiguration.getChangeListener(), appConfigDir);
166 ConfigurationManager configurationManager = new ConfigurationManager(configurationSource);
169 mockElementDao = new ElementOperationMock();
171 // User data and management
173 user.setUserId("jh0003");
174 user.setFirstName("Jimmi");
175 user.setLastName("Hendrix");
176 user.setRole(Role.ADMIN.name());
178 Either<User, ActionStatus> eitherGetUser = Either.left(user);
179 when(mockUserAdmin.getUser("jh0003", false)).thenReturn(eitherGetUser);
181 // Servlet Context attributes
182 when(servletContext.getAttribute(Constants.CONFIGURATION_MANAGER_ATTR)).thenReturn(configurationManager);
183 when(servletContext.getAttribute(Constants.WEB_APPLICATION_CONTEXT_WRAPPER_ATTR)).thenReturn(webAppContextWrapper);
184 when(webAppContextWrapper.getWebAppContext(servletContext)).thenReturn(webAppContext);
185 when(webAppContext.getBean(IElementOperation.class)).thenReturn(mockElementDao);
187 Either<Integer, StorageOperationStatus> eitherCountRoot = Either.left(1);
188 Either<Boolean, StorageOperationStatus> eitherFalse = Either.left(true);
189 when(toscaOperationFacade.validateComponentNameExists("Root", ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE)).thenReturn(eitherFalse);
191 Either<Boolean, StorageOperationStatus> eitherCountExist = Either.left(true);
192 when(toscaOperationFacade.validateComponentNameExists("alreadyExists", ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCountExist);
194 Either<Boolean, StorageOperationStatus> eitherCount = Either.left(false);
195 when(toscaOperationFacade.validateComponentNameExists(RESOURCE_NAME, ResourceTypeEnum.VFC, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCount);
196 when(toscaOperationFacade.validateComponentNameExists(RESOURCE_NAME, ResourceTypeEnum.VF, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCount);
197 when(toscaOperationFacade.validateComponentNameExists(RESOURCE_NAME, ResourceTypeEnum.PNF, ComponentTypeEnum.RESOURCE)).thenReturn(eitherCount);
199 Either<Boolean, StorageOperationStatus> validateDerivedExists = Either.left(true);
200 when(toscaOperationFacade.validateToscaResourceNameExists("Root")).thenReturn(validateDerivedExists);
202 Either<Boolean, StorageOperationStatus> validateDerivedNotExists = Either.left(false);
203 when(toscaOperationFacade.validateToscaResourceNameExists("kuku")).thenReturn(validateDerivedNotExists);
204 when(graphLockOperation.lockComponent(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Resource))).thenReturn(StorageOperationStatus.OK);
205 when(graphLockOperation.lockComponentByName(Mockito.anyString(), Mockito.eq(NodeTypeEnum.Resource))).thenReturn(StorageOperationStatus.OK);
208 resourceResponse = createResourceObject(true);
209 Either<Resource, StorageOperationStatus> eitherCreate = Either.left(resourceResponse);
210 Either<Integer, StorageOperationStatus> eitherValidate = Either.left(null);
211 when(toscaOperationFacade.createToscaComponent(Mockito.any(Resource.class))).thenReturn(eitherCreate);
212 when(toscaOperationFacade.validateCsarUuidUniqueness(Mockito.anyString())).thenReturn(eitherValidate);
213 Map<String, DataTypeDefinition> emptyDataTypes = new HashMap<String, DataTypeDefinition>();
214 when(applicationDataTypeCache.getAll()).thenReturn(Either.left(emptyDataTypes));
217 artifactManager.nodeTemplateOperation = nodeTemplateOperation;
218 bl = new ResourceBusinessLogic();
219 bl.setElementDao(mockElementDao);
220 bl.setUserAdmin(mockUserAdmin);
221 bl.setCapabilityTypeOperation(capabilityTypeOperation);
222 componentsUtils.Init();
223 componentsUtils.setAuditingManager(auditingManager);
224 bl.setComponentsUtils(componentsUtils);
225 bl.setLifecycleManager(lifecycleBl);
226 bl.setGraphLockOperation(graphLockOperation);
227 bl.setArtifactsManager(artifactManager);
228 bl.setPropertyOperation(propertyOperation);
229 bl.setTitanGenericDao(mockTitanDao);
230 bl.setApplicationDataTypeCache(applicationDataTypeCache);
231 bl.setCsarOperation(csarOperation);
232 bl.setCacheManagerOperation(cacheManager);
233 bl.setGenericTypeBusinessLogic(genericTypeBusinessLogic);
234 toscaOperationFacade.setNodeTypeOperation(nodeTypeOperation);
235 toscaOperationFacade.setTopologyTemplateOperation(topologyTemplateOperation);
236 bl.setToscaOperationFacade(toscaOperationFacade);
237 Resource resourceCsar = createResourceObjectCsar(true);
238 setCanWorkOnResource(resourceCsar);
239 Either<Component, StorageOperationStatus> oldResourceRes = Either.left(resourceCsar);
240 when(toscaOperationFacade.getToscaElement(resourceCsar.getUniqueId())).thenReturn(oldResourceRes);
241 responseManager = ResponseFormatManager.getInstance();
245 private Resource createResourceObject(boolean afterCreate) {
246 Resource resource = new Resource();
247 resource.setName(RESOURCE_NAME);
248 resource.addCategory(RESOURCE_CATEGORY1, RESOURCE_SUBCATEGORY);
249 resource.setDescription("My short description");
250 List<String> tgs = new ArrayList<String>();
252 tgs.add(resource.getName());
253 resource.setTags(tgs);
254 List<String> template = new ArrayList<String>();
255 template.add("Root");
256 resource.setDerivedFrom(template);
257 resource.setVendorName("Motorola");
258 resource.setVendorRelease("1.0.0");
259 resource.setContactId("ya5467");
260 resource.setIcon("MyIcon");
263 resource.setName(resource.getName());
264 resource.setVersion("0.1");
265 resource.setUniqueId(resource.getName().toLowerCase() + ":" + resource.getVersion());
266 resource.setCreatorUserId(user.getUserId());
267 resource.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
268 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
273 private Resource createResourceObjectCsar(boolean afterCreate) {
274 Resource resource = new Resource();
275 resource.setName(RESOURCE_NAME);
276 resource.addCategory(RESOURCE_CATEGORY1, RESOURCE_SUBCATEGORY);
277 resource.setDescription("My short description");
278 List<String> tgs = new ArrayList<String>();
280 tgs.add(resource.getName());
281 resource.setTags(tgs);
282 List<String> template = new ArrayList<String>();
283 template.add("Root");
284 resource.setDerivedFrom(template);
285 resource.setVendorName("Motorola");
286 resource.setVendorRelease("1.0.0");
287 resource.setResourceVendorModelNumber("");
288 resource.setContactId("ya5467");
289 resource.setIcon("MyIcon");
290 resource.setCsarUUID("valid_vf.csar");
291 resource.setCsarVersion("1");
294 resource.setName(resource.getName());
295 resource.setVersion("0.1");
297 resource.setUniqueId(resource.getName().toLowerCase() + ":" + resource.getVersion());
298 resource.setCreatorUserId(user.getUserId());
299 resource.setCreatorFullName(user.getFirstName() + " " + user.getLastName());
300 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
305 private Resource setCanWorkOnResource(Resource resource) {
306 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
307 resource.setLastUpdaterUserId(user.getUserId());
312 public void testHappyScenario() {
313 Resource resource = createResourceObject(false);
314 Either<Resource, ResponseFormat> createResponse = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
316 if (createResponse.isRight()) {
317 assertEquals(new Integer(200), createResponse.right().value().getStatus());
319 assertEquals(createResourceObject(true), createResponse.left().value());
323 public void testUpdateHappyScenario() {
324 Resource resource = createResourceObjectCsar(true);
325 setCanWorkOnResource(resource);
327 Either<Resource, StorageOperationStatus> resourceLinkedToCsarRes = Either.left(resource);
328 when(toscaOperationFacade.getLatestComponentByCsarOrName(ComponentTypeEnum.RESOURCE, resource.getCsarUUID(), resource.getSystemName())).thenReturn(resourceLinkedToCsarRes);
329 Either<Boolean, StorageOperationStatus> validateDerivedExists = Either.left(true);
330 when(toscaOperationFacade.validateToscaResourceNameExists("Root")).thenReturn(validateDerivedExists);
332 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
333 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
334 Either<Resource, ResponseFormat> updateResponse = bl.validateAndUpdateResourceFromCsar(resource, user, null, null, resource.getUniqueId());
335 if (updateResponse.isRight()) {
336 assertEquals(new Integer(200), updateResponse.right().value().getStatus());
338 assertEquals(resource.getUniqueId(), updateResponse.left().value().getUniqueId());
341 /* CREATE validations - start ***********************/
342 // Resource name - start
345 public void testFailedResourceValidations() {
346 testResourceNameExist();
347 testResourceNameEmpty();
348 // testResourceNameExceedsLimit();
349 testResourceNameWrongFormat();
350 testResourceDescExceedsLimitCreate();
351 testResourceDescNotEnglish();
352 testResourceDescriptionEmpty();
353 testResourceDescriptionMissing();
354 testResourceIconMissing();
355 testResourceIconInvalid();
356 testResourceIconExceedsLimit();
357 testResourceTagNotExist();
358 testResourceTagEmpty();
359 testTagsExceedsLimitCreate();
360 testTagsNoServiceName();
363 testContactIdTooLong();
364 testContactIdWrongFormatCreate();
365 testResourceContactIdEmpty();
366 testResourceContactIdMissing();
367 testVendorNameExceedsLimit();
368 testVendorNameWrongFormatCreate();
369 testVendorReleaseWrongFormat();
370 testVendorReleaseExceedsLimitCreate();
371 testResourceVendorModelNumberExceedsLimit();
372 testResourceVendorNameMissing();
373 testResourceVendorReleaseMissing();
374 testResourceCategoryExist();
375 testResourceBadCategoryCreate();
376 testHappyScenarioCostLicenseType();
377 testCostWrongFormatCreate();
378 testLicenseTypeWrongFormatCreate();
379 testResourceTemplateNotExist();
380 testResourceTemplateEmpty();
381 testResourceTemplateInvalid();
384 private void testResourceNameExist() {
385 String resourceName = "alreadyExists";
386 Resource resourceExist = createResourceObject(false);
387 resourceExist.setName(resourceName);
388 resourceExist.getTags().add(resourceName);
390 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
391 assertResponse(createResponse, ActionStatus.COMPONENT_NAME_ALREADY_EXIST, ComponentTypeEnum.RESOURCE.getValue(), resourceName);
394 private void testResourceNameEmpty() {
395 Resource resourceExist = createResourceObject(false);
396 resourceExist.setName(null);
398 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
399 assertResponse(createResponse, ActionStatus.MISSING_COMPONENT_NAME, ComponentTypeEnum.RESOURCE.getValue());
402 private void testResourceNameExceedsLimit() {
403 Resource resourceExccedsNameLimit = createResourceObject(false);
404 // 51 chars, the limit is 50
405 String tooLongResourceName = "zCRCAWjqte0DtgcAAMmcJcXeNubeX1p1vOZNTShAHOYNAHvV3iK";
406 resourceExccedsNameLimit.setName(tooLongResourceName);
408 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
409 assertTrue(createResponse.isRight());
410 assertResponse(createResponse, ActionStatus.COMPONENT_NAME_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_NAME_MAX_LENGTH);
413 private void testResourceNameWrongFormat() {
414 Resource resource = createResourceObject(false);
416 String nameWrongFormat = "ljg?fd";
417 resource.setName(nameWrongFormat);
419 Either<Resource, ResponseFormat> createResponse = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
420 assertTrue(createResponse.isRight());
421 assertResponse(createResponse, ActionStatus.INVALID_COMPONENT_NAME, ComponentTypeEnum.RESOURCE.getValue());
424 // Resource name - end
425 // Resource description - start
426 private void testResourceDescExceedsLimitCreate() {
427 Resource resourceExccedsDescLimit = createResourceObject(false);
428 // 1025 chars, the limit is 1024
429 String tooLongResourceDesc = "1GUODojQ0sGzKR4NP7e5j82ADQ3KHTVOaezL95qcbuaqDtjZhAQGQ3iFwKAy580K4WiiXs3u3zq7RzXcSASl5fm0RsWtCMOIDP"
430 + "AOf9Tf2xtXxPCuCIMCR5wOGnNTaFxgnJEHAGxilBhZDgeMNHmCN1rMK5B5IRJOnZxcpcL1NeG3APTCIMP1lNAxngYulDm9heFSBc8TfXAADq7703AvkJT0QPpGq2z2P"
431 + "tlikcAnIjmWgfC5Tm7UH462BAlTyHg4ExnPPL4AO8c92VrD7kZSgSqiy73cN3gLT8uigkKrUgXQFGVUFrXVyyQXYtVM6bLBeuCGQf4C2j8lkNg6M0J3PC0PzMRoinOxk"
432 + "Ae2teeCtVcIj4A1KQo3210j8q2v7qQU69Mabsa6DT9FgE4rcrbiFWrg0Zto4SXWD3o1eJA9o29lTg6kxtklH3TuZTmpi5KVp1NFhS1RpnqF83tzv4mZLKsx7Zh1fEgYvRFwx1"
433 + "ar3RolyDfNoZiGBGTMsZzz7RPFBf2hTnLmNqVGQnHKhhGj0Y5s8t2cbqbO2nmHiJb9uaUVrCGypgbAcJL3KPOBfAVW8PcpmNj4yVjI3L4x5zHjmGZbp9vKshEQODcrmcgsYAoKqe"
434 + "uu5u7jk8XVxEfQ0m5qL8UOErXPlJovSmKUmP5B5T0w299zIWDYCzSoNasHpHjOMDLAiDDeHbozUOn9t3Qou00e9POq4RMM0VnIx1H38nJoJZz2XH8CI5YMQe7oTagaxgQTF2aa0qaq2"
435 + "V6nJsfRGRklGjNhFFYP2cS4Xv2IJO9DSX6LTXOmENrGVJJvMOZcvnBaZPfoAHN0LU4i1SoepLzulIxnZBfkUWFJgZ5wQ0Bco2GC1HMqzW21rwy4XHRxXpXbmW8LVyoA1KbnmVmROycU4"
436 + "scTZ62IxIcIWCVeMjBIcTviXULbPUyqlfEPXWr8IMJtpAaELWgyquPClAREMDs2b9ztKmUeXlMccFES1XWbFTrhBHhmmDyVReEgCwfokrUFR13LTUK1k8I6OEHOs";
438 resourceExccedsDescLimit.setDescription(tooLongResourceDesc);
440 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsDescLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
441 assertTrue(createResponse.isRight());
442 assertResponse(createResponse, ActionStatus.COMPONENT_DESCRIPTION_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_DESCRIPTION_MAX_LENGTH);
445 private void testResourceDescNotEnglish() {
446 Resource notEnglish = createResourceObject(false);
448 String notEnglishDesc = "\uC2B5";
449 notEnglish.setDescription(notEnglishDesc);
451 Either<Resource, ResponseFormat> createResponse = bl.createResource(notEnglish, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
452 assertTrue(createResponse.isRight());
453 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_DESCRIPTION, ComponentTypeEnum.RESOURCE.getValue());
456 private void testResourceDescriptionEmpty() {
457 Resource resourceExist = createResourceObject(false);
458 resourceExist.setDescription("");
460 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
461 assertTrue(createResponse.isRight());
463 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_DESCRIPTION, ComponentTypeEnum.RESOURCE.getValue());
466 private void testResourceDescriptionMissing() {
467 Resource resourceExist = createResourceObject(false);
468 resourceExist.setDescription(null);
470 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
471 assertTrue(createResponse.isRight());
473 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_DESCRIPTION, ComponentTypeEnum.RESOURCE.getValue());
475 // Resource description - end
476 // Resource icon start
478 private void testResourceIconMissing() {
479 Resource resourceExist = createResourceObject(false);
480 resourceExist.setIcon(null);
482 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
483 assertTrue(createResponse.isRight());
485 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_ICON, ComponentTypeEnum.RESOURCE.getValue());
488 private void testResourceIconInvalid() {
489 Resource resourceExist = createResourceObject(false);
490 resourceExist.setIcon("kjk3453^&");
492 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
493 assertTrue(createResponse.isRight());
495 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_ICON, ComponentTypeEnum.RESOURCE.getValue());
498 private void testResourceIconExceedsLimit() {
499 Resource resourceExist = createResourceObject(false);
500 resourceExist.setIcon("dsjfhskdfhskjdhfskjdhkjdhfkshdfksjsdkfhsdfsdfsdfsfsdfsf");
502 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
503 assertTrue(createResponse.isRight());
505 assertResponse(createResponse, ActionStatus.COMPONENT_ICON_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.ICON_MAX_LENGTH);
509 // Resource tags - start
510 private void testResourceTagNotExist() {
511 Resource resourceExist = createResourceObject(false);
512 resourceExist.setTags(null);
514 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
515 assertTrue(createResponse.isRight());
517 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_TAGS);
520 private void testResourceTagEmpty() {
521 Resource resourceExist = createResourceObject(false);
522 resourceExist.setTags(new ArrayList<String>());
524 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
525 assertTrue(createResponse.isRight());
527 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_TAGS);
530 private void testTagsExceedsLimitCreate() {
531 Resource resourceExccedsNameLimit = createResourceObject(false);
532 String tag1 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjQ";
533 String tag2 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjW";
534 String tag3 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjE";
535 String tag4 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjb";
536 String tag5 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjr";
537 String tag6 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
538 String tag7 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
539 String tag8 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjd";
540 String tag9 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
541 String tag10 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
542 String tag11 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjh";
543 String tag12 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjj";
544 String tag13 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjk";
545 String tag14 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjs";
546 String tag15 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjz";
547 String tag16 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjx";
548 String tag17 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj2";
549 String tag18 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj3";
550 String tag19 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj4";
551 String tag20 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj5";
552 String tag21 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj0";
554 List<String> tagsList = new ArrayList<String>();
576 tagsList.add(resourceExccedsNameLimit.getName());
578 resourceExccedsNameLimit.setTags(tagsList);
580 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
581 assertTrue(createResponse.isRight());
582 assertResponse(createResponse, ActionStatus.COMPONENT_TAGS_EXCEED_LIMIT, "" + ValidationUtils.TAG_LIST_MAX_LENGTH);
586 private void testTagsSingleExceedsLimit() {
587 Resource resourceExccedsNameLimit = createResourceObject(false);
588 String tag1 = "afzs2qLBb5X6tZhiunkcEwiFX1qRQY8YZl3y3Du5M5xeQY5Nq9afcFHDZ9HaURw43gH27nAUWM36bMbMylwTFSzzNV8NO4v4ripe6Q15Vc2nPOFI";
589 String tag2 = resourceExccedsNameLimit.getName();
590 List<String> tagsList = new ArrayList<String>();
594 resourceExccedsNameLimit.setTags(tagsList);
596 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
597 assertTrue(createResponse.isRight());
598 assertResponse(createResponse, ActionStatus.COMPONENT_SINGLE_TAG_EXCEED_LIMIT, "" + ValidationUtils.TAG_MAX_LENGTH);
602 private void testTagsNoServiceName() {
603 Resource serviceExccedsNameLimit = createResourceObject(false);
604 String tag1 = "afzs2qLBb";
605 List<String> tagsList = new ArrayList<String>();
607 serviceExccedsNameLimit.setTags(tagsList);
609 Either<Resource, ResponseFormat> createResponse = bl.createResource(serviceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
610 assertTrue(createResponse.isRight());
611 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_TAGS_NO_COMP_NAME);
615 private void testInvalidTag() {
616 Resource serviceExccedsNameLimit = createResourceObject(false);
617 String tag1 = "afzs2qLBb%#%";
618 List<String> tagsList = new ArrayList<String>();
620 serviceExccedsNameLimit.setTags(tagsList);
622 Either<Resource, ResponseFormat> createResponse = bl.createResource(serviceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
623 assertTrue(createResponse.isRight());
624 assertResponse(createResponse, ActionStatus.INVALID_FIELD_FORMAT, new String[] { "Resource", "tag" });
628 // Resource tags - stop
629 // Resource contact start
631 private void testContactIdTooLong() {
632 Resource resourceContactId = createResourceObject(false);
633 // 59 chars instead of 50
634 String contactIdTooLong = "thisNameIsVeryLongAndExeccedsTheNormalLengthForContactId";
635 resourceContactId.setContactId(contactIdTooLong);
637 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceContactId, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
638 assertTrue(createResponse.isRight());
639 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
642 private void testContactIdWrongFormatCreate() {
643 Resource resourceContactId = createResourceObject(false);
644 // 3 letters and 3 digits and special characters
645 String contactIdFormatWrong = "yrt134!!!";
646 resourceContactId.setContactId(contactIdFormatWrong);
648 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceContactId, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
649 assertTrue(createResponse.isRight());
650 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
653 private void testResourceContactIdEmpty() {
654 Resource resourceExist = createResourceObject(false);
655 resourceExist.setContactId("");
657 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
658 assertTrue(createResponse.isRight());
660 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
663 private void testResourceContactIdMissing() {
664 Resource resourceExist = createResourceObject(false);
665 resourceExist.setContactId(null);
667 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
668 assertTrue(createResponse.isRight());
670 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
673 private void testVendorNameExceedsLimit() {
674 Resource resourceExccedsVendorNameLimit = createResourceObject(false);
675 String tooLongVendorName = "h1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9E";
676 resourceExccedsVendorNameLimit.setVendorName(tooLongVendorName);
678 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsVendorNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
679 assertTrue(createResponse.isRight());
680 assertResponse(createResponse, ActionStatus.VENDOR_NAME_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_NAME_MAX_LENGTH);
683 private void testResourceVendorModelNumberExceedsLimit() {
684 Resource resourceExccedsVendorModelNumberLimit = createResourceObject(false);
685 String tooLongVendorModelNumber = "h1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9E";
686 resourceExccedsVendorModelNumberLimit.setResourceVendorModelNumber(tooLongVendorModelNumber);
688 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsVendorModelNumberLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
689 assertTrue(createResponse.isRight());
690 assertResponse(createResponse, ActionStatus.RESOURCE_VENDOR_MODEL_NUMBER_EXCEEDS_LIMIT, "" + ValidationUtils.RESOURCE_VENDOR_MODEL_NUMBER_MAX_LENGTH);
693 private void testVendorNameWrongFormatCreate() {
694 Resource resource = createResourceObject(false);
696 String nameWrongFormat = "ljg*fd";
697 resource.setVendorName(nameWrongFormat);
699 Either<Resource, ResponseFormat> createResponse = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
700 assertTrue(createResponse.isRight());
701 assertResponse(createResponse, ActionStatus.INVALID_VENDOR_NAME);
704 private void testVendorReleaseWrongFormat() {
705 Resource resource = createResourceObject(false);
707 String nameWrongFormat = "1>2";
708 resource.setVendorRelease(nameWrongFormat);
710 Either<Resource, ResponseFormat> createResponse = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
711 assertTrue(createResponse.isRight());
712 assertResponse(createResponse, ActionStatus.INVALID_VENDOR_RELEASE);
716 private void testVendorReleaseExceedsLimitCreate() {
717 Resource resourceExccedsNameLimit = createResourceObject(false);
718 String tooLongVendorRelease = "h1KSyJh9Eh1KSyJh9Eh1KSyJh9Eh1KSyJh9E";
719 resourceExccedsNameLimit.setVendorRelease(tooLongVendorRelease);
721 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExccedsNameLimit, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
722 assertTrue(createResponse.isRight());
723 assertResponse(createResponse, ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH);
726 private void testResourceVendorNameMissing() {
727 Resource resourceExist = createResourceObject(false);
728 resourceExist.setVendorName(null);
730 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
731 assertTrue(createResponse.isRight());
733 assertResponse(createResponse, ActionStatus.MISSING_VENDOR_NAME);
736 private void testResourceVendorReleaseMissing() {
737 Resource resourceExist = createResourceObject(false);
738 resourceExist.setVendorRelease(null);
740 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
741 assertTrue(createResponse.isRight());
743 assertResponse(createResponse, ActionStatus.MISSING_VENDOR_RELEASE);
746 // Resource vendor name/release stop
748 private void testResourceCategoryExist() {
749 Resource resourceExist = createResourceObject(false);
750 resourceExist.setCategories(null);
752 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
753 assertTrue(createResponse.isRight());
755 assertResponse(createResponse, ActionStatus.COMPONENT_MISSING_CATEGORY, ComponentTypeEnum.RESOURCE.getValue());
758 private void testResourceBadCategoryCreate() {
760 Resource resourceExist = createResourceObject(false);
761 resourceExist.setCategories(null);
762 resourceExist.addCategory("koko", "koko");
764 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
765 assertTrue(createResponse.isRight());
767 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_CATEGORY, ComponentTypeEnum.RESOURCE.getValue());
772 private void testHappyScenarioCostLicenseType() {
773 Resource createResourceObject = createResourceObject(false);
774 Resource createResourceObjectAfterCreate = createResourceObject(true);
775 // Adding cost and licenseType to basic mock
776 Either<Resource, StorageOperationStatus> eitherCreate = Either.left(createResourceObjectAfterCreate);
777 when(toscaOperationFacade.createToscaComponent(Mockito.any(Resource.class))).thenReturn(eitherCreate);
779 String cost = "123.456";
780 String licenseType = "User";
781 createResourceObject.setCost(cost);
782 createResourceObject.setLicenseType(licenseType);
783 Either<Resource, ResponseFormat> createResponse = bl.createResource(createResourceObject, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
785 if (createResponse.isRight()) {
786 assertEquals(new Integer(200), createResponse.right().value().getStatus());
788 createResourceObjectAfterCreate.setCost(cost);
789 createResourceObjectAfterCreate.setLicenseType(licenseType);
790 assertEquals(createResourceObjectAfterCreate, createResponse.left().value());
793 private void testCostWrongFormatCreate() {
794 Resource resourceCost = createResourceObject(false);
795 // Comma instead of fullstop
796 String cost = "12356,464";
797 resourceCost.setCost(cost);
799 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceCost, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
800 assertTrue(createResponse.isRight());
801 assertResponse(createResponse, ActionStatus.INVALID_CONTENT);
805 // License type start
806 private void testLicenseTypeWrongFormatCreate() {
807 Resource resourceLicenseType = createResourceObject(false);
809 String licenseType = "cpu";
810 resourceLicenseType.setLicenseType(licenseType);
812 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceLicenseType, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
813 assertTrue(createResponse.isRight());
814 assertResponse(createResponse, ActionStatus.INVALID_CONTENT);
818 // Derived from start
819 private void testResourceTemplateNotExist() {
820 Resource resourceExist = createResourceObject(false);
821 List<String> list = null;
822 resourceExist.setDerivedFrom(list);
824 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
825 assertTrue(createResponse.isRight());
827 assertResponse(createResponse, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
830 private void testResourceTemplateEmpty() {
831 Resource resourceExist = createResourceObject(false);
832 resourceExist.setDerivedFrom(new ArrayList<String>());
834 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
835 assertTrue(createResponse.isRight());
837 assertResponse(createResponse, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
840 private void testResourceTemplateInvalid() {
841 Resource resourceExist = createResourceObject(false);
842 ArrayList<String> derivedFrom = new ArrayList<String>();
843 derivedFrom.add("kuku");
844 resourceExist.setDerivedFrom(derivedFrom);
846 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
847 assertTrue(createResponse.isRight());
849 assertResponse(createResponse, ActionStatus.PARENT_RESOURCE_NOT_FOUND);
853 private void assertResponse(Either<Resource, ResponseFormat> createResponse, ActionStatus expectedStatus, String... variables) {
854 ResponseFormat expectedResponse = responseManager.getResponseFormat(expectedStatus, variables);
855 ResponseFormat actualResponse = createResponse.right().value();
856 assertEquals(expectedResponse.getStatus(), actualResponse.getStatus());
857 assertEquals("assert error description", expectedResponse.getFormattedMessage(), actualResponse.getFormattedMessage());
860 // UPDATE tests - start
863 public void testResourceNameWrongFormat_UPDATE() {
864 Resource resource = createResourceObject(true);
865 Resource updatedResource = createResourceObject(true);
867 // this is in order to prevent failing with 403 earlier
868 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
869 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
871 String nameWrongFormat = "ljg*fd";
872 updatedResource.setName(nameWrongFormat);
874 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
875 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
877 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
878 assertTrue(createResponse.isRight());
879 assertResponse(createResponse, ActionStatus.INVALID_COMPONENT_NAME, ComponentTypeEnum.RESOURCE.getValue());
884 public void testResourceNameAfterCertify_UPDATE() {
885 Resource resource = createResourceObject(true);
886 Resource updatedResource = createResourceObject(true);
888 // this is in order to prevent failing with 403 earlier
889 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
890 // when(resourceOperation.getResource_tx(resource.getUniqueId(),false)).thenReturn(eitherUpdate);
891 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
894 updatedResource.setName(name);
895 resource.setVersion("1.0");
897 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
898 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
900 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
901 assertTrue(createResponse.isRight());
902 assertResponse(createResponse, ActionStatus.RESOURCE_NAME_CANNOT_BE_CHANGED);
907 public void testResourceNameExceedsLimit_UPDATE() {
908 Resource resource = createResourceObject(true);
909 Resource updatedResource = createResourceObject(true);
911 // this is in order to prevent failing with 403 earlier
912 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
913 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
915 // 51 chars, the limit is 50
916 String tooLongResourceName = "zCRCAWjqte0DtgcAAMmcJcXeNubeX1p1vOZNTShAHOYNAHvV3iK";
917 updatedResource.setName(tooLongResourceName);
918 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
919 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
921 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
922 assertTrue(createResponse.isRight());
923 assertResponse(createResponse, ActionStatus.COMPONENT_NAME_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_NAME_MAX_LENGTH);
927 public void testResourceNameAlreadyExist_UPDATE() {
928 Resource resource = createResourceObject(true);
929 Resource updatedResource = createResourceObject(true);
931 // this is in order to prevent failing with 403 earlier
932 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
933 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
935 String resourceName = "alreadyExists";
936 updatedResource.setName(resourceName);
937 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(updatedResource);
938 when(toscaOperationFacade.updateToscaElement(updatedResource)).thenReturn(dataModelResponse);
939 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
940 assertTrue(createResponse.isRight());
941 assertResponse(createResponse, ActionStatus.COMPONENT_NAME_ALREADY_EXIST, ComponentTypeEnum.RESOURCE.getValue(), resourceName);
947 public void testResourceDescExceedsLimit_UPDATE() {
948 Resource resource = createResourceObject(true);
949 Resource updatedResource = createResourceObject(true);
951 // this is in order to prevent failing with 403 earlier
952 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
953 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
955 // 1025 chars, the limit is 1024
956 String tooLongResourceDesc = "1GUODojQ0sGzKR4NP7e5j82ADQ3KHTVOaezL95qcbuaqDtjZhAQGQ3iFwKAy580K4WiiXs3u3zq7RzXcSASl5fm0RsWtCMOIDP"
957 + "AOf9Tf2xtXxPCuCIMCR5wOGnNTaFxgnJEHAGxilBhZDgeMNHmCN1rMK5B5IRJOnZxcpcL1NeG3APTCIMP1lNAxngYulDm9heFSBc8TfXAADq7703AvkJT0QPpGq2z2P"
958 + "tlikcAnIjmWgfC5Tm7UH462BAlTyHg4ExnPPL4AO8c92VrD7kZSgSqiy73cN3gLT8uigkKrUgXQFGVUFrXVyyQXYtVM6bLBeuCGQf4C2j8lkNg6M0J3PC0PzMRoinOxk"
959 + "Ae2teeCtVcIj4A1KQo3210j8q2v7qQU69Mabsa6DT9FgE4rcrbiFWrg0Zto4SXWD3o1eJA9o29lTg6kxtklH3TuZTmpi5KVp1NFhS1RpnqF83tzv4mZLKsx7Zh1fEgYvRFwx1"
960 + "ar3RolyDfNoZiGBGTMsZzz7RPFBf2hTnLmNqVGQnHKhhGj0Y5s8t2cbqbO2nmHiJb9uaUVrCGypgbAcJL3KPOBfAVW8PcpmNj4yVjI3L4x5zHjmGZbp9vKshEQODcrmcgsYAoKqe"
961 + "uu5u7jk8XVxEfQ0m5qL8UOErXPlJovSmKUmP5B5T0w299zIWDYCzSoNasHpHjOMDLAiDDeHbozUOn9t3Qou00e9POq4RMM0VnIx1H38nJoJZz2XH8CI5YMQe7oTagaxgQTF2aa0qaq2"
962 + "V6nJsfRGRklGjNhFFYP2cS4Xv2IJO9DSX6LTXOmENrGVJJvMOZcvnBaZPfoAHN0LU4i1SoepLzulIxnZBfkUWFJgZ5wQ0Bco2GC1HMqzW21rwy4XHRxXpXbmW8LVyoA1KbnmVmROycU4"
963 + "scTZ62IxIcIWCVeMjBIcTviXULbPUyqlfEPXWr8IMJtpAaELWgyquPClAREMDs2b9ztKmUeXlMccFES1XWbFTrhBHhmmDyVReEgCwfokrUFR13LTUK1k8I6OEHOs";
964 updatedResource.setDescription(tooLongResourceDesc);
965 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
966 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
967 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
968 assertTrue(createResponse.isRight());
969 assertResponse(createResponse, ActionStatus.COMPONENT_DESCRIPTION_EXCEEDS_LIMIT, ComponentTypeEnum.RESOURCE.getValue(), "" + ValidationUtils.COMPONENT_DESCRIPTION_MAX_LENGTH);
974 public void testIconWrongFormat_UPDATE() {
975 Resource resource = createResourceObject(true);
976 Resource updatedResource = createResourceObject(true);
978 // this is in order to prevent failing with 403 earlier
979 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
980 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
983 String icon = "icon.jpg";
984 updatedResource.setIcon(icon);
985 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
986 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
988 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
989 assertTrue(createResponse.isRight());
990 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_ICON, ComponentTypeEnum.RESOURCE.getValue());
995 public void testIconAfterCertify_UPDATE() {
996 Resource resource = createResourceObject(true);
997 Resource updatedResource = createResourceObject(true);
999 // this is in order to prevent failing with 403 earlier
1000 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1001 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1004 String icon = "icon";
1005 updatedResource.setIcon(icon);
1007 resource.setVersion("1.0");
1009 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1010 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1011 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1012 assertTrue(createResponse.isRight());
1013 assertResponse(createResponse, ActionStatus.RESOURCE_ICON_CANNOT_BE_CHANGED);
1018 public void testTagsExceedsLimit_UPDATE() {
1019 Resource resource = createResourceObject(true);
1020 Resource updatedResource = createResourceObject(true);
1022 // this is in order to prevent failing with 403 earlier
1023 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1024 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1026 String tag1 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjQ";
1027 String tag2 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjW";
1028 String tag3 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjE";
1029 String tag4 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjb";
1030 String tag5 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjr";
1031 String tag6 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
1032 String tag7 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
1033 String tag8 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjd";
1034 String tag9 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjf";
1035 String tag10 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjg";
1036 String tag11 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjh";
1037 String tag12 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjj";
1038 String tag13 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjk";
1039 String tag14 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjs";
1040 String tag15 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjz";
1041 String tag16 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBjx";
1042 String tag17 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj2";
1043 String tag18 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj3";
1044 String tag19 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj4";
1045 String tag20 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj5";
1046 String tag21 = "I63llMSEF12FntTwpMt64JhopkjQZzv5KS7mBoRku42PYLrBj0";
1048 List<String> tagsList = new ArrayList<String>();
1058 tagsList.add(tag10);
1059 tagsList.add(tag11);
1060 tagsList.add(tag12);
1061 tagsList.add(tag13);
1062 tagsList.add(tag14);
1063 tagsList.add(tag15);
1064 tagsList.add(tag16);
1065 tagsList.add(tag17);
1066 tagsList.add(tag18);
1067 tagsList.add(tag19);
1068 tagsList.add(tag20);
1069 tagsList.add(tag21);
1070 tagsList.add(resource.getName());
1072 updatedResource.setTags(tagsList);
1073 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1074 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1075 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1076 assertTrue(createResponse.isRight());
1078 assertResponse(createResponse, ActionStatus.COMPONENT_TAGS_EXCEED_LIMIT, "" + ValidationUtils.TAG_LIST_MAX_LENGTH);
1082 public void testVendorNameWrongFormat_UPDATE() {
1083 Resource resource = createResourceObject(true);
1084 Resource updatedResource = createResourceObject(true);
1086 // this is in order to prevent failing with 403 earlier
1087 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1088 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1091 String nameWrongFormat = "ljg*fd";
1092 updatedResource.setVendorName(nameWrongFormat);
1093 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1094 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1095 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1096 assertTrue(createResponse.isRight());
1097 assertResponse(createResponse, ActionStatus.INVALID_VENDOR_NAME);
1102 public void testVendorNameAfterCertify_UPDATE() {
1103 Resource resource = createResourceObject(true);
1104 Resource updatedResource = createResourceObject(true);
1106 // this is in order to prevent failing with 403 earlier
1107 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1108 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1111 String nameWrongFormat = "ljg*fd";
1112 updatedResource.setVendorName(nameWrongFormat);
1113 resource.setVersion("1.0");
1115 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1116 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1117 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1118 assertTrue(createResponse.isRight());
1119 assertResponse(createResponse, ActionStatus.RESOURCE_VENDOR_NAME_CANNOT_BE_CHANGED);
1124 public void testVendorReleaseExceedsLimit_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);
1131 // 129 chars, the limit is 128
1132 String tooLongVendorRelease = "h1KSyJh9EspI8SPwAGu4VETfqWejeanuB1PCJBxJmJncYnrW0lnsEFFVRIukRJkwlOVnZCy8p38tjhANeZq3BGMHIawWR6ICl8Wi9mikRYALWgvJug00JrlQ0iPVKPLxy";
1133 updatedResource.setVendorRelease(tooLongVendorRelease);
1134 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1135 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1136 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resource.getUniqueId(), updatedResource, null, user, false);
1137 assertTrue(createResponse.isRight());
1138 assertResponse(createResponse, ActionStatus.VENDOR_RELEASE_EXCEEDS_LIMIT, "" + ValidationUtils.VENDOR_RELEASE_MAX_LENGTH);
1142 public void testContactIdWrongFormat_UPDATE() {
1143 Resource resource = createResourceObject(true);
1144 Resource updatedResource = createResourceObject(true);
1146 // this is in order to prevent failing with 403 earlier
1147 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1148 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1150 String resourceId = resource.getUniqueId();
1151 // 3 letters and 3 digits
1152 String contactIdTooLong = "yrt134";
1153 updatedResource.setContactId(contactIdTooLong);
1154 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1155 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1156 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1157 assertTrue(createResponse.isRight());
1159 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_CONTACT, ComponentTypeEnum.RESOURCE.getValue());
1163 public void testResourceBadCategory_UPDATE() {
1164 Resource resource = createResourceObject(true);
1165 Resource updatedResource = createResourceObject(true);
1167 // this is in order to prevent failing with 403 earlier
1168 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1169 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1171 String resourceId = resource.getUniqueId();
1172 String badCategory = "ddfds";
1173 updatedResource.setCategories(null);
1174 updatedResource.addCategory(badCategory, "fikt");
1175 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1176 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1177 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1178 assertTrue(createResponse.isRight());
1180 assertResponse(createResponse, ActionStatus.COMPONENT_INVALID_CATEGORY, ComponentTypeEnum.RESOURCE.getValue());
1184 public void testResourceCategoryAfterCertify_UPDATE() {
1185 Resource resource = createResourceObject(true);
1186 Resource updatedResource = createResourceObject(true);
1188 // this is in order to prevent failing with 403 earlier
1189 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1190 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1192 String resourceId = resource.getUniqueId();
1193 updatedResource.setCategories(null);
1194 updatedResource.addCategory(RESOURCE_CATEGORY1, UPDATED_SUBCATEGORY);
1195 resource.setVersion("1.0");
1197 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1198 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1199 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1200 assertTrue(createResponse.isRight());
1202 assertResponse(createResponse, ActionStatus.RESOURCE_CATEGORY_CANNOT_BE_CHANGED);
1205 // Derived from start
1207 public void testResourceTemplateNotExist_UPDATE() {
1208 Resource resource = createResourceObject(true);
1209 Resource updatedResource = createResourceObject(true);
1211 // this is in order to prevent failing with 403 earlier
1212 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1213 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1214 String resourceId = resource.getUniqueId();
1216 List<String> list = null;
1217 updatedResource.setDerivedFrom(list);
1218 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1219 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1220 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1221 assertTrue(createResponse.isRight());
1223 assertResponse(createResponse, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
1227 public void testResourceTemplateEmpty_UPDATE() {
1228 Resource resource = createResourceObject(true);
1229 Resource updatedResource = createResourceObject(true);
1230 String resourceId = resource.getUniqueId();
1232 // this is in order to prevent failing with 403 earlier
1233 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1234 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1236 updatedResource.setDerivedFrom(new ArrayList<String>());
1237 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1238 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1239 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1240 assertTrue(createResponse.isRight());
1242 assertResponse(createResponse, ActionStatus.MISSING_DERIVED_FROM_TEMPLATE);
1246 public void testResourceTemplateInvalid_UPDATE() {
1247 Resource resource = createResourceObject(true);
1248 Resource updatedResource = createResourceObject(true);
1249 String resourceId = resource.getUniqueId();
1251 // this is in order to prevent failing with 403 earlier
1252 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1253 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1255 ArrayList<String> derivedFrom = new ArrayList<String>();
1256 derivedFrom.add("kuku");
1257 updatedResource.setDerivedFrom(derivedFrom);
1258 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1259 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1260 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1261 assertTrue(createResponse.isRight());
1263 assertResponse(createResponse, ActionStatus.PARENT_RESOURCE_NOT_FOUND);
1267 public void testResourceTemplateCertify_UPDATE_HAPPY() {
1268 Resource resource = createResourceObject(true);
1269 Resource updatedResource = createResourceObject(true);
1270 String resourceId = resource.getUniqueId();
1272 // this is in order to prevent failing with 403 earlier
1273 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1274 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1276 Either<Boolean, StorageOperationStatus> isToscaNameExtending = Either.left(true);
1277 when(toscaOperationFacade.validateToscaResourceNameExtends(Mockito.anyString(), Mockito.anyString())).thenReturn(isToscaNameExtending);
1279 Either<Map<String, PropertyDefinition>, StorageOperationStatus> findPropertiesOfNode = Either.left(new HashMap<>());
1280 when(propertyOperation.deleteAllPropertiesAssociatedToNode(Mockito.any(NodeTypeEnum.class), Mockito.anyString())).thenReturn(findPropertiesOfNode);
1282 resource.setVersion("1.0");
1284 ArrayList<String> derivedFrom = new ArrayList<String>();
1285 derivedFrom.add("tosca.nodes.Root");
1286 updatedResource.setDerivedFrom(derivedFrom);
1287 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(updatedResource);
1288 when(toscaOperationFacade.updateToscaElement(updatedResource)).thenReturn(dataModelResponse);
1289 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user, false);
1290 assertTrue(createResponse.isLeft());
1294 public void testResourceTemplateCertify_UPDATE_SAD() {
1295 Resource resource = createResourceObject(true);
1296 Resource updatedResource = createResourceObject(true);
1297 String resourceId = resource.getUniqueId();
1299 // this is in order to prevent failing with 403 earlier
1300 Either<Component, StorageOperationStatus> eitherUpdate = Either.left(setCanWorkOnResource(resource));
1301 when(toscaOperationFacade.getToscaElement(resource.getUniqueId())).thenReturn(eitherUpdate);
1303 Either<Boolean, StorageOperationStatus> isToscaNameExtending = Either.left(false);
1304 when(toscaOperationFacade.validateToscaResourceNameExtends(Mockito.anyString(), Mockito.anyString()))
1305 .thenReturn(isToscaNameExtending);
1307 resource.setVersion("1.0");
1309 ArrayList<String> derivedFrom = new ArrayList<String>();
1310 derivedFrom.add("tosca.nodes.Root");
1311 updatedResource.setDerivedFrom(derivedFrom);
1312 Either<Resource, StorageOperationStatus> dataModelResponse = Either.left(resource);
1313 when(toscaOperationFacade.updateToscaElement(resource)).thenReturn(dataModelResponse);
1314 Either<Resource, ResponseFormat> createResponse = bl.updateResourceMetadata(resourceId, updatedResource, null, user,
1316 assertTrue(createResponse.isRight());
1318 assertResponse(createResponse, ActionStatus.PARENT_RESOURCE_DOES_NOT_EXTEND);
1320 // Derived from stop
1323 public void createOrUpdateResourceAlreadyCheckout() {
1324 Resource resourceExist = createResourceObject(false);
1326 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1328 createResponse.left().value().setLastUpdaterUserId(user.getUserId());
1329 assertTrue(createResponse.isLeft());
1331 Either<Resource, StorageOperationStatus> getLatestResult = Either.left(createResponse.left().value());
1332 Either<Component, StorageOperationStatus> getCompLatestResult = Either.left(createResponse.left().value());
1333 when(toscaOperationFacade.getLatestByName(resourceExist.getName())).thenReturn(getCompLatestResult);
1334 when(toscaOperationFacade.overrideComponent(Mockito.any(Resource.class), Mockito.any(Resource.class))).thenReturn(getLatestResult);
1336 Resource resourceToUpdtae = createResourceObject(false);
1338 Either<ImmutablePair<Resource, ActionStatus>, ResponseFormat> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdtae, user, false, false, false, null, null, false);
1339 assertTrue(createOrUpdateResource.isLeft());
1341 Mockito.verify(toscaOperationFacade, Mockito.times(1)).overrideComponent(Mockito.any(Resource.class), Mockito.any(Resource.class));
1342 Mockito.verify(lifecycleBl, Mockito.times(0)).changeState(Mockito.anyString(), Mockito.eq(user), Mockito.eq(LifeCycleTransitionEnum.CHECKOUT), Mockito.any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1347 public void createOrUpdateResourceCertified() {
1348 Resource resourceExist = createResourceObject(false);
1350 Either<Resource, ResponseFormat> createResponse = bl.createResource(resourceExist, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1352 assertTrue(createResponse.isLeft());
1353 Resource certifiedResource = createResponse.left().value();
1354 certifiedResource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
1355 certifiedResource.setVersion("1.0");
1358 Either<Resource, StorageOperationStatus> getLatestResult = Either.left(certifiedResource);
1359 Either<Component, StorageOperationStatus> getCompLatestResult = Either.left(createResponse.left().value());
1360 when(toscaOperationFacade.getLatestByName(resourceExist.getName())).thenReturn(getCompLatestResult);
1361 when(toscaOperationFacade.overrideComponent(Mockito.any(Resource.class), Mockito.any(Resource.class))).thenReturn(getLatestResult);
1363 when(lifecycleBl.changeState(Mockito.anyString(), Mockito.eq(user), Mockito.eq(LifeCycleTransitionEnum.CHECKOUT), Mockito.any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean())).thenReturn(createResponse);
1365 Resource resourceToUpdtae = createResourceObject(false);
1367 Either<ImmutablePair<Resource, ActionStatus>, ResponseFormat> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdtae, user, false, false, false, null, null, false);
1368 assertTrue(createOrUpdateResource.isLeft());
1370 Mockito.verify(toscaOperationFacade, Mockito.times(1)).overrideComponent(Mockito.any(Resource.class), Mockito.any(Resource.class));
1371 Mockito.verify(lifecycleBl, Mockito.times(1)).changeState(Mockito.anyString(), Mockito.eq(user), Mockito.eq(LifeCycleTransitionEnum.CHECKOUT), Mockito.any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1376 public void createOrUpdateResourceNotExist() {
1377 Resource resourceToUpdtae = createResourceObject(false);
1379 Either<Component, StorageOperationStatus> getLatestResult = Either.right(StorageOperationStatus.NOT_FOUND);
1380 when(toscaOperationFacade.getLatestByName(resourceToUpdtae.getName())).thenReturn(getLatestResult);
1382 Either<Component, StorageOperationStatus> getLatestToscaNameResult = Either.right(StorageOperationStatus.NOT_FOUND);
1383 when(toscaOperationFacade.getLatestByToscaResourceName(resourceToUpdtae.getToscaResourceName())).thenReturn(getLatestToscaNameResult);
1385 Either<ImmutablePair<Resource, ActionStatus>, ResponseFormat> createOrUpdateResource = bl.createOrUpdateResourceByImport(resourceToUpdtae, user, false, false, false, null, null, false);
1386 assertTrue(createOrUpdateResource.isLeft());
1388 Mockito.verify(toscaOperationFacade, Mockito.times(0)).overrideComponent(Mockito.any(Resource.class), Mockito.any(Resource.class));
1389 Mockito.verify(lifecycleBl, Mockito.times(0)).changeState(Mockito.anyString(), Mockito.eq(user), Mockito.eq(LifeCycleTransitionEnum.CHECKOUT), Mockito.any(LifecycleChangeInfoWithAction.class), Mockito.anyBoolean(), Mockito.anyBoolean());
1394 public void testValidatePropertiesDefaultValues_SuccessfullWithoutProperties() {
1395 Resource basic = createResourceObject(true);
1397 Either<Boolean, ResponseFormat> validatePropertiesDefaultValues = bl.validatePropertiesDefaultValues(basic);
1398 assertTrue(validatePropertiesDefaultValues.isLeft());
1402 public void testValidatePropertiesDefaultValues_SuccessfullWithProperties() {
1403 Resource basic = createResourceObject(true);
1404 PropertyDefinition property = new PropertyDefinition();
1405 property.setName("myProperty");
1406 property.setType(ToscaPropertyType.INTEGER.getType());
1407 property.setDefaultValue("1");
1408 List<PropertyDefinition> properties = new ArrayList<>();
1409 properties.add(property);
1410 basic.setProperties(properties);
1411 when(propertyOperation.isPropertyTypeValid(property)).thenReturn(true);
1412 when(propertyOperation.isPropertyDefaultValueValid(property, emptyDataTypes)).thenReturn(true);
1413 Either<Boolean, ResponseFormat> validatePropertiesDefaultValues = bl.validatePropertiesDefaultValues(basic);
1414 assertTrue(validatePropertiesDefaultValues.isLeft());
1418 public void testValidatePropertiesDefaultValues_FailedWithProperties() {
1419 Resource basic = createResourceObject(true);
1420 PropertyDefinition property = new PropertyDefinition();
1421 property.setName("myProperty");
1422 property.setType(ToscaPropertyType.INTEGER.getType());
1423 property.setDefaultValue("1.5");
1424 List<PropertyDefinition> properties = new ArrayList<>();
1425 properties.add(property);
1426 basic.setProperties(properties);
1428 when(propertyOperation.isPropertyDefaultValueValid(property, emptyDataTypes)).thenReturn(false);
1429 Either<Boolean, ResponseFormat> validatePropertiesDefaultValues = bl.validatePropertiesDefaultValues(basic);
1430 assertTrue(validatePropertiesDefaultValues.isRight());
1434 // public void testDeleteMarkedResourcesNoResources() {
1435 // List<GraphVertex> ids = new ArrayList<>();
1436 // Either<List<GraphVertex>, StorageOperationStatus> eitherNoResources = Either.left(ids);
1437 // when(topologyTemplateOperation.getAllComponentsMarkedForDeletion(ComponentTypeEnum.RESOURCE)).thenReturn(eitherNoResources);
1439 // Either<List<String>, ResponseFormat> deleteMarkedResources = bl.deleteMarkedComponents();
1440 // assertTrue(deleteMarkedResources.isLeft());
1441 // assertTrue(deleteMarkedResources.left().value().isEmpty());
1443 // Mockito.verify(artifactManager, Mockito.times(0)).deleteAllComponentArtifactsIfNotOnGraph(Mockito.anyList());
1448 // public void testDeleteMarkedResources() {
1449 // List<String> ids = new ArrayList<String>();
1450 // String resourceInUse = "123";
1451 // ids.add(resourceInUse);
1452 // String resourceFree = "456";
1453 // ids.add(resourceFree);
1454 // Either<List<String>, StorageOperationStatus> eitherNoResources = Either.left(ids);
1455 // when(toscaOperationFacade.getAllComponentsMarkedForDeletion()).thenReturn(eitherNoResources);
1457 // Either<Boolean, StorageOperationStatus> resourceInUseResponse = Either.left(true);
1458 // Either<Boolean, StorageOperationStatus> resourceFreeResponse = Either.left(false);
1460 // List<ArtifactDefinition> artifacts = new ArrayList<ArtifactDefinition>();
1461 // Either<List<ArtifactDefinition>, StorageOperationStatus> getArtifactsResponse = Either.left(artifacts);
1462 // when(toscaOperationFacade.getComponentArtifactsForDelete(resourceFree, NodeTypeEnum.Resource, true)).thenReturn(getArtifactsResponse);
1464 // when(toscaOperationFacade.isComponentInUse(resourceFree)).thenReturn(resourceFreeResponse);
1465 // when(toscaOperationFacade.isComponentInUse(resourceInUse)).thenReturn(resourceInUseResponse);
1467 // Either<Component, StorageOperationStatus> eitherDelete = Either.left(new Resource());
1468 // when(toscaOperationFacade.deleteToscaComponent(resourceFree)).thenReturn(eitherDelete);
1470 // when(artifactManager.deleteAllComponentArtifactsIfNotOnGraph(artifacts)).thenReturn(StorageOperationStatus.OK);
1471 // List<String> deletedComponents = new ArrayList<>();
1472 // deletedComponents.add(resourceFree);
1473 // when(toscaOperationFacade.deleteMarkedElements(ComponentTypeEnum.RESOURCE)).thenReturn(Either.left(deletedComponents));
1475 // Either<List<String>, ResponseFormat> deleteMarkedResources = bl.deleteMarkedComponents();
1476 // assertTrue(deleteMarkedResources.isLeft());
1477 // List<String> resourceIdList = deleteMarkedResources.left().value();
1478 // assertFalse(resourceIdList.isEmpty());
1479 // assertTrue(resourceIdList.contains(resourceFree));
1480 // assertFalse(resourceIdList.contains(resourceInUse));
1482 // Mockito.verify(artifactManager, Mockito.times(1)).deleteAllComponentArtifactsIfNotOnGraph(artifacts);
1485 @SuppressWarnings("unchecked")
1487 public void testFindVfCsarArtifactsToHandle() {
1489 Class<ResourceBusinessLogic> targetClass = ResourceBusinessLogic.class;
1490 String methodName = "findVfCsarArtifactsToHandle";
1491 Resource resource = new Resource();
1492 String deploymentArtifactToUpdateFileName = "deploymentArtifactToUpdate.yaml";
1493 String deploymentArtifactToDeleteFileName = "deploymentArtifactToDelete.yaml";
1494 String deploymentArtifactToCreateFileName = "deploymentArtifactToCreate.yaml";
1496 String artifactInfoToUpdateFileName = "infoArtifactToUpdate.yaml";
1497 String artifactInfoToDeleteFileName = "infoArtifactToDelete.yaml";
1498 String artifactInfoToCreateFileName = "infoArtifactToCreate.yaml";
1500 byte[] oldPayloadData = "oldPayloadData".getBytes();
1501 byte[] newPayloadData = "newPayloadData".getBytes();
1502 Map<String, ArtifactDefinition> deploymentArtifacts =new HashMap<>();
1504 ArtifactDefinition deploymentArtifactToUpdate = new ArtifactDefinition();
1505 deploymentArtifactToUpdate.setMandatory(false);
1506 deploymentArtifactToUpdate.setArtifactName(deploymentArtifactToUpdateFileName);
1507 deploymentArtifactToUpdate.setArtifactType("SNMP_POLL");
1508 deploymentArtifactToUpdate.setPayload(oldPayloadData);
1509 deploymentArtifactToUpdate.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1511 ArtifactDefinition deploymentArtifactToDelete = new ArtifactDefinition();
1512 deploymentArtifactToDelete.setMandatory(false);
1513 deploymentArtifactToDelete.setArtifactName(deploymentArtifactToDeleteFileName);
1514 deploymentArtifactToDelete.setArtifactType("SNMP_TRAP");
1515 deploymentArtifactToDelete.setPayload(oldPayloadData);
1516 deploymentArtifactToDelete.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1518 ArtifactDefinition deploymentArtifactToIgnore = new ArtifactDefinition();
1520 deploymentArtifacts.put(ValidationUtils.normalizeArtifactLabel(deploymentArtifactToUpdate.getArtifactName()), deploymentArtifactToUpdate);
1521 deploymentArtifacts.put(ValidationUtils.normalizeArtifactLabel(deploymentArtifactToDelete.getArtifactName()), deploymentArtifactToDelete);
1522 deploymentArtifacts.put("ignore", deploymentArtifactToIgnore);
1524 Map<String, ArtifactDefinition> artifacts = new HashMap<>();
1526 ArtifactDefinition artifactToUpdate = new ArtifactDefinition();
1527 artifactToUpdate.setMandatory(false);
1528 artifactToUpdate.setArtifactName(artifactInfoToUpdateFileName);
1529 artifactToUpdate.setArtifactType("SNMP_POLL");
1530 artifactToUpdate.setPayload(oldPayloadData);
1531 artifactToUpdate.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1533 ArtifactDefinition artifactToDelete = new ArtifactDefinition();
1534 artifactToDelete.setMandatory(false);
1535 artifactToDelete.setArtifactName(artifactInfoToDeleteFileName);
1536 artifactToDelete.setArtifactType("SNMP_TRAP");
1537 artifactToDelete.setPayload(oldPayloadData);
1538 artifactToDelete.setArtifactChecksum(GeneralUtility.calculateMD5Base64EncodedByByteArray(oldPayloadData));
1540 ArtifactDefinition artifactToIgnore = new ArtifactDefinition();
1542 artifacts.put(ValidationUtils.normalizeArtifactLabel(artifactToUpdate.getArtifactName()),artifactToUpdate);
1543 artifacts.put(ValidationUtils.normalizeArtifactLabel(artifactToDelete.getArtifactName()),artifactToDelete);
1544 artifacts.put("ignore",artifactToIgnore);
1546 resource.setDeploymentArtifacts(deploymentArtifacts);
1547 resource.setArtifacts(artifacts);
1549 List<NonMetaArtifactInfo> artifactPathAndNameList = new ArrayList<>();
1550 NonMetaArtifactInfo deploymentArtifactInfoToUpdate = new NonMetaArtifactInfo(deploymentArtifactToUpdate.getArtifactName(), null,
1551 ArtifactTypeEnum.findType(deploymentArtifactToUpdate.getArtifactType()), ArtifactGroupTypeEnum.DEPLOYMENT,
1552 newPayloadData, deploymentArtifactToUpdate.getArtifactName());
1554 NonMetaArtifactInfo informationalArtifactInfoToUpdate = new NonMetaArtifactInfo(artifactToUpdate.getArtifactName(), null,
1555 ArtifactTypeEnum.findType(artifactToUpdate.getArtifactType()), ArtifactGroupTypeEnum.DEPLOYMENT,
1556 newPayloadData, artifactToUpdate.getArtifactName());
1558 NonMetaArtifactInfo deploymentArtifactInfoToCreate = new NonMetaArtifactInfo(deploymentArtifactToCreateFileName, null,
1559 ArtifactTypeEnum.OTHER, ArtifactGroupTypeEnum.DEPLOYMENT, newPayloadData, deploymentArtifactToCreateFileName);
1561 NonMetaArtifactInfo informationalArtifactInfoToCreate = new NonMetaArtifactInfo(artifactInfoToCreateFileName, null,
1562 ArtifactTypeEnum.OTHER, ArtifactGroupTypeEnum.DEPLOYMENT,
1563 newPayloadData, artifactInfoToCreateFileName);
1565 artifactPathAndNameList.add(deploymentArtifactInfoToUpdate);
1566 artifactPathAndNameList.add(informationalArtifactInfoToUpdate);
1567 artifactPathAndNameList.add(deploymentArtifactInfoToCreate);
1568 artifactPathAndNameList.add(informationalArtifactInfoToCreate);
1570 Object[] argObjects = {resource, artifactPathAndNameList, user};
1571 Class[] argClasses = {Resource.class, List.class, User.class};
1573 Method method = targetClass.getDeclaredMethod(methodName, argClasses);
1574 method.setAccessible(true);
1575 Either<EnumMap<ArtifactOperationEnum, List<NonMetaArtifactInfo>>, ResponseFormat> findVfCsarArtifactsToHandleRes =
1576 (Either<EnumMap<ArtifactOperationEnum, List<NonMetaArtifactInfo>>, ResponseFormat>) method.invoke(bl, argObjects);
1577 assertTrue(findVfCsarArtifactsToHandleRes.isLeft());
1578 EnumMap<ArtifactOperationEnum, List<NonMetaArtifactInfo>> foundVfArtifacts = findVfCsarArtifactsToHandleRes.left().value();
1579 assertTrue(foundVfArtifacts.get(ArtifactOperationEnum.Create).size()==2);
1580 assertTrue(foundVfArtifacts.get(ArtifactOperationEnum.Update).size()==2);
1581 assertTrue(foundVfArtifacts.get(ArtifactOperationEnum.Create).size()==2);
1584 catch (Exception e) {
1585 e.printStackTrace();
1590 public void testVFGeneratedInputs() {
1592 Resource resource = createVF();
1593 List<InputDefinition> inputs = resource.getInputs();
1594 assertTrue(8 == inputs.size());
1595 for(InputDefinition input : inputs){
1596 assertNotNull(input.getOwnerId());
1598 assertTrue(resource.getDerivedFromGenericType().equals(genericVF.getToscaResourceName()));
1599 assertTrue(resource.getDerivedFromGenericVersion().equals(genericVF.getVersion()));
1603 public void testVFUpdateGenericInputsToLatestOnCheckout() {
1605 //create a VF that is derived from generic version 1.0
1606 Resource resource = createVF();
1607 // create a new generic version without properties
1608 genericVF.setVersion("2.0");
1609 genericVF.setProperties(null);
1610 String currentDerivedFromVersion = resource.getDerivedFromGenericVersion();
1611 List<InputDefinition> currentInputs = resource.getInputs();
1612 //verify previous inputs ownerId fields exist - user may not delete generated inputs
1613 assertTrue(8 == currentInputs.stream().filter(p -> null != p.getOwnerId()).collect(Collectors.toList()).size());
1614 Either<Boolean, ResponseFormat> upgradeToLatestGeneric = bl.shouldUpgradeToLatestGeneric(resource);
1616 assertTrue(upgradeToLatestGeneric.isLeft());
1617 //verify update required and valid
1618 assertTrue(upgradeToLatestGeneric.left().value());
1619 //verify version was upgraded
1620 assertFalse(resource.getDerivedFromGenericVersion().equals(currentDerivedFromVersion));
1621 //verify inputs were not deleted
1622 assertTrue(8 == resource.getInputs().size());
1623 //verify inputs ownerId fields were removed - user may delete/edit inputs
1624 assertTrue(8 == resource.getInputs().stream().filter(p -> null == p.getOwnerId()).collect(Collectors.toList()).size());
1629 public void testVFUpdateGenericInputsToLatestOnCheckoutNotPerformed() {
1631 //create a VF that is derived from generic version 1.0
1632 Resource resource = createVF();
1634 //add an input to the VF
1635 PropertyDefinition newProp = new PropertyDefinition();
1636 newProp.setType("integer");
1637 newProp.setName("newProp");
1638 resource.getInputs().add(new InputDefinition(newProp));
1640 //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
1641 genericVF.setVersion("2.0");
1642 newProp.setType("string");
1643 genericVF.setProperties(new ArrayList<PropertyDefinition>());
1644 genericVF.getProperties().add(newProp);
1645 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericVF));
1646 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericVF.getProperties(), genericVF.getUniqueId())).thenCallRealMethod();
1647 String currentDerivedFromVersion = resource.getDerivedFromGenericVersion();
1648 assertTrue(8 == resource.getInputs().stream().filter(p -> null != p.getOwnerId()).collect(Collectors.toList()).size());
1649 Either<Boolean, ResponseFormat> upgradeToLatestGeneric = bl.shouldUpgradeToLatestGeneric(resource);
1651 assertTrue(upgradeToLatestGeneric.isLeft());
1652 //verify update is invalid an void
1653 assertFalse(upgradeToLatestGeneric.left().value());
1654 //verify version was not upgraded
1655 assertTrue(resource.getDerivedFromGenericVersion().equals(currentDerivedFromVersion));
1656 //verify inputs were not removed
1657 assertTrue(9 == resource.getInputs().size());
1658 //verify user defined input exists
1659 assertTrue(1 == resource.getInputs().stream().filter(p -> null == p.getOwnerId()).collect(Collectors.toList()).size());
1660 assertTrue(resource.getInputs().stream().filter(p -> null == p.getOwnerId()).findAny().get().getType().equals("integer"));
1664 public void testPNFGeneratedInputsNoGeneratedInformationalArtifacts() {
1666 Resource resource = createPNF();
1667 List<InputDefinition> inputs = resource.getInputs();
1668 assertTrue(8 == inputs.size());
1669 for(InputDefinition input : inputs){
1670 assertNotNull(input.getOwnerId());
1672 assertTrue(resource.getDerivedFromGenericType().equals(genericPNF.getToscaResourceName()));
1673 assertTrue(resource.getDerivedFromGenericVersion().equals(genericPNF.getVersion()));
1674 assertTrue(0 == resource.getArtifacts().size());
1678 private Resource createVF() {
1680 genericVF = setupGenericTypeMock(GENERIC_VF_NAME);
1681 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_VF_NAME)).thenReturn(Either.left(genericVF));
1682 Resource resource = createResourceObject(true);
1683 resource.setDerivedFrom(null);
1684 resource.setResourceType(ResourceTypeEnum.VF);
1685 when(toscaOperationFacade.createToscaComponent(resource)).thenReturn(Either.left(resource));
1686 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericVF));
1687 when(genericTypeBusinessLogic.generateInputsFromGenericTypeProperties(genericVF)).thenCallRealMethod();
1688 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericVF.getProperties(), resource.getUniqueId())).thenCallRealMethod();
1689 Either<Resource, ResponseFormat> createResponse = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1690 assertTrue(createResponse.isLeft());
1691 return createResponse.left().value();
1694 private Resource createPNF() {
1696 genericPNF = setupGenericTypeMock(GENERIC_PNF_NAME);
1697 when(toscaOperationFacade.getLatestCertifiedNodeTypeByToscaResourceName(GENERIC_PNF_NAME)).thenReturn(Either.left(genericPNF));
1698 Resource resource = createResourceObject(true);
1699 resource.setDerivedFrom(null);
1700 resource.setResourceType(ResourceTypeEnum.PNF);
1701 when(toscaOperationFacade.createToscaComponent(resource)).thenReturn(Either.left(resource));
1702 when(genericTypeBusinessLogic.fetchDerivedFromGenericType(resource)).thenReturn(Either.left(genericPNF));
1703 when(genericTypeBusinessLogic.generateInputsFromGenericTypeProperties(genericPNF)).thenCallRealMethod();
1704 when(genericTypeBusinessLogic.convertGenericTypePropertiesToInputsDefintion(genericPNF.getProperties(), resource.getUniqueId())).thenCallRealMethod();
1705 Either<Resource, ResponseFormat> createResponse = bl.createResource(resource, AuditingActionEnum.CREATE_RESOURCE, user, null, null);
1706 assertTrue(createResponse.isLeft());
1707 return createResponse.left().value();
1712 private Resource setupGenericTypeMock(String toscaName) {
1714 Resource genericType = createResourceObject(true);
1715 genericType.setVersion("1.0");
1716 genericType.setToscaResourceName(toscaName);
1717 String[] propNames = {"nf_function", "nf_role", "nf_naming_code", "nf_type", "nf_naming", "availability_zone_max_count", "min_instances", "max_instances"};
1718 String[] propTypes = {"string", "string", "string", "string", "org.openecomp.datatypes.Naming", "integer", "integer", "integer"};
1719 List<PropertyDefinition> genericProps = new ArrayList<>();
1720 for(int i = 0; i < 8; ++i){
1721 PropertyDefinition prop = new PropertyDefinition();
1722 prop.setName(propNames[i]);
1723 prop.setType(propTypes[i]);
1724 genericProps.add(prop);
1726 genericType.setProperties(genericProps);