2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2019 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 * ================================================================================
22 package org.openecomp.sdc.be.components.impl;
24 import fj.data.Either;
25 import junit.framework.Assert;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.mockito.Mockito;
29 import org.openecomp.sdc.be.components.validation.UserValidations;
30 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
31 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
32 import org.openecomp.sdc.be.impl.ComponentsUtils;
33 import org.openecomp.sdc.be.model.Component;
34 import org.openecomp.sdc.be.model.DataTypeDefinition;
35 import org.openecomp.sdc.be.model.LifecycleStateEnum;
36 import org.openecomp.sdc.be.model.PropertyDefinition;
37 import org.openecomp.sdc.be.model.Resource;
38 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
39 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
40 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
43 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
44 import org.openecomp.sdc.exception.ResponseFormat;
46 import java.lang.reflect.Field;
47 import java.util.ArrayList;
48 import java.util.HashMap;
49 import java.util.List;
52 import static org.mockito.ArgumentMatchers.any;
53 import static org.mockito.ArgumentMatchers.anyObject;
54 import static org.mockito.Mockito.when;
57 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock{
59 private AttributeBusinessLogic createTestSubject() {
60 return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
61 interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation );
64 UserValidations userValidations = Mockito.mock(UserValidations.class);
65 ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
66 JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
67 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
68 ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
69 PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
70 Field baseBusinessLogic;
71 Field baseBusinessLogic1;
72 Field baseBusinessLogic2;
73 Field baseBusinessLogic3;
74 AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
75 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
79 public void setup() throws Exception{
81 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
82 baseBusinessLogic.setAccessible(true);
83 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
85 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
86 baseBusinessLogic1.setAccessible(true);
87 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
89 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
90 baseBusinessLogic2.setAccessible(true);
91 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
93 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
94 baseBusinessLogic3.setAccessible(true);
95 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
97 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
98 baseBusinessLogic.setAccessible(true);
99 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
101 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
102 baseBusinessLogic.setAccessible(true);
103 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
105 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
106 baseBusinessLogic.setAccessible(true);
107 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
112 public void testCreateAttribute() throws Exception {
113 AttributeBusinessLogic testSubject;
114 String resourceId = "";
115 PropertyDefinition newAttributeDef = null;
117 Either<PropertyDefinition, ResponseFormat> result;
120 testSubject = createTestSubject();
125 public void testIsAttributeExist() throws Exception {
126 AttributeBusinessLogic testSubject;List<PropertyDefinition> attributes = null;
127 String resourceUid = "";
128 String propertyName = "";
132 testSubject=createTestSubject();attributes = null;
137 public void testGetAttribute() throws Exception {
138 AttributeBusinessLogic testSubject;
139 String resourceId = "";
140 String attributeId = "";
142 Either<PropertyDefinition, ResponseFormat> result;
145 testSubject = createTestSubject();
150 public void testUpdateAttribute() throws Exception {
151 AttributeBusinessLogic testSubject;
152 String resourceId = "";
153 String attributeId = "";
154 PropertyDefinition newAttDef = null;
156 Either<PropertyDefinition, ResponseFormat> result;
159 testSubject = createTestSubject();
164 public void testDeleteAttribute() throws Exception {
165 AttributeBusinessLogic testSubject;
166 String resourceId = "";
167 String attributeId = "";
169 Either<PropertyDefinition, ResponseFormat> result;
172 testSubject = createTestSubject();
177 public void createAttribute_lockfail() throws Exception {
178 Either<PropertyDefinition, ResponseFormat> response;
179 PropertyDefinition prop= new PropertyDefinition();
181 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
183 Assert.assertEquals(true,response.isRight());
188 public void createAttribute_Success() throws Exception {
190 Component resource= new Resource();
191 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
192 resource.setIsDeleted(false);
193 resource.setLastUpdaterUserId("USR01");
195 PropertyDefinition prop= new PropertyDefinition();
196 prop.setType(ToscaPropertyType.STRING.getType());
198 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
200 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
201 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
202 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
203 PropertyDefinition propertyDefinition = new PropertyDefinition();
204 Either<PropertyDefinition, StorageOperationStatus> either = Either.left(propertyDefinition);
205 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
207 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
209 Map<String,DataTypeDefinition> data=new HashMap<>();
210 data.put("ONE",new DataTypeDefinition());
211 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
212 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
214 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
215 Either<PropertyDefinition, ResponseFormat> response;
217 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
219 Assert.assertEquals(true,response.isLeft());
224 public void createAttribute_failtogettoscaelement() throws Exception {
226 Component resource= new Resource();
227 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
228 resource.setIsDeleted(false);
229 resource.setLastUpdaterUserId("USR01");
231 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
233 Either<PropertyDefinition, ResponseFormat> response;
234 PropertyDefinition prop= new PropertyDefinition();
236 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
237 baseBusinessLogic.setAccessible(true);
238 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
239 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
240 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
241 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
243 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
245 Assert.assertEquals(true,response.isRight());
250 public void createAttribute_componentvalidationfails() throws Exception {
252 Component resource= new Resource();
253 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
254 resource.setIsDeleted(false);
255 resource.setLastUpdaterUserId("USR02");
257 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
259 Either<PropertyDefinition, ResponseFormat> response;
260 PropertyDefinition prop= new PropertyDefinition();
262 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
263 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
264 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
266 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
268 Assert.assertEquals(true,response.isRight());
273 public void createAttribute_componentalreadyexist_fails() throws Exception {
275 Either<PropertyDefinition, ResponseFormat> response;
276 PropertyDefinition prop= new PropertyDefinition();
277 prop.setName("RES01");
278 prop.setParentUniqueId("RES01");
280 List<PropertyDefinition> attributes = new ArrayList<>();
281 attributes.add(prop);
283 Component resource= new Resource();
284 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
285 resource.setIsDeleted(false);
286 resource.setLastUpdaterUserId("USR01");
287 ((Resource) resource).setAttributes(attributes);
289 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
291 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
292 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
293 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
295 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
297 Assert.assertEquals(true,response.isRight());
303 public void createAttribute_addresourcetostoragefails() throws Exception {
305 Component resource= new Resource();
306 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
307 resource.setIsDeleted(false);
308 resource.setLastUpdaterUserId("USR01");
310 PropertyDefinition prop= new PropertyDefinition();
311 prop.setType(ToscaPropertyType.STRING.getType());
313 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
314 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
316 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
317 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
318 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
319 PropertyDefinition propertyDefinition = new PropertyDefinition();
320 Either<PropertyDefinition, StorageOperationStatus> either = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
321 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
323 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
325 Map<String,DataTypeDefinition> data=new HashMap<>();
326 data.put("ONE",new DataTypeDefinition());
327 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
328 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
330 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
331 Either<PropertyDefinition, ResponseFormat> response;
333 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
335 Assert.assertEquals(true,response.isRight());
340 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
341 Either<PropertyDefinition, ResponseFormat> result;
343 Component resource= new Resource();
344 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
345 resource.setIsDeleted(false);
346 resource.setLastUpdaterUserId("USR01");
347 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
348 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
350 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
351 Assert.assertEquals(true,result.isRight());
355 public void testgetAttribute_success() throws Exception {
356 Either<PropertyDefinition, ResponseFormat> result;
358 Component resource= new Resource();
359 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
360 resource.setIsDeleted(false);
361 resource.setLastUpdaterUserId("USR01");
363 PropertyDefinition prop= new PropertyDefinition();
364 prop.setUniqueId("ATTR01");
365 prop.setParentUniqueId("RES01");
367 List<PropertyDefinition> attr = new ArrayList<>();
370 ((Resource) resource).setAttributes(attr);
371 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
372 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
374 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
375 Assert.assertEquals(true,result.isLeft());
379 public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
380 Either<PropertyDefinition, ResponseFormat> result;
382 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
383 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
385 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
386 Assert.assertEquals(true,result.isRight());
390 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
391 Either<PropertyDefinition, ResponseFormat> result;
393 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
394 Assert.assertEquals(true,result.isRight());
398 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
399 Either<PropertyDefinition, ResponseFormat> result;
401 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
402 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
404 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
405 Assert.assertEquals(true,result.isRight());
409 public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
410 Either<PropertyDefinition, ResponseFormat> result;
413 Component resource= new Resource();
414 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
415 resource.setIsDeleted(true);
416 resource.setLastUpdaterUserId("USR01");
419 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
424 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
425 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
427 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
428 Assert.assertEquals(true,result.isRight());
432 public void testdeleteAttribute_nonexistingresource() throws Exception {
433 Either<PropertyDefinition, ResponseFormat> result;
436 Component resource= new Resource();
437 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
438 resource.setIsDeleted(false);
439 resource.setLastUpdaterUserId("USR01");
441 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
443 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
444 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
446 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
447 Assert.assertEquals(true,result.isRight());
451 public void testdeleteAttribute_success() throws Exception {
452 Either<PropertyDefinition, ResponseFormat> result;
455 Component resource= new Resource();
456 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
457 resource.setIsDeleted(false);
458 resource.setLastUpdaterUserId("USR01");
461 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
463 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
464 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
465 when(toscaOperationFacade.deleteAttributeOfResource(any(),any())).thenReturn(StorageOperationStatus.OK);
467 PropertyDefinition prop= new PropertyDefinition();
468 prop.setUniqueId("ATTR01");
469 prop.setParentUniqueId("RES01");
470 List<PropertyDefinition> attributes = new ArrayList<>();
471 attributes.add(prop);
472 ((Resource) resource).setAttributes(attributes);
474 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
475 Assert.assertEquals(true,result.isLeft());