1 package org.openecomp.sdc.be.components.impl;
3 import java.lang.reflect.Field;
4 import java.util.ArrayList;
5 import java.util.HashMap;
9 import junit.framework.Assert;
10 import org.junit.Before;
11 import org.junit.Test;
12 import org.mockito.Mockito;
13 import org.openecomp.sdc.be.components.validation.UserValidations;
14 import org.openecomp.sdc.be.dao.jsongraph.TitanDao;
15 import org.openecomp.sdc.be.dao.titan.TitanOperationStatus;
16 import org.openecomp.sdc.be.impl.ComponentsUtils;
17 import org.openecomp.sdc.be.model.*;
18 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
19 import org.openecomp.sdc.be.model.jsontitan.operations.ToscaOperationFacade;
20 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
21 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
22 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
23 import org.openecomp.sdc.be.model.operations.utils.ComponentValidationUtils;
24 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
25 import org.openecomp.sdc.exception.ResponseFormat;
26 import static org.mockito.ArgumentMatchers.any;
27 import static org.mockito.ArgumentMatchers.anyObject;
28 import static org.mockito.ArgumentMatchers.anyString;
29 import static org.mockito.Mockito.doNothing;
30 import static org.mockito.Mockito.when;
32 import fj.data.Either;
35 public class AttributeBusinessLogicTest {
37 private AttributeBusinessLogic createTestSubject() {
38 return new AttributeBusinessLogic();
41 UserValidations userValidations = Mockito.mock(UserValidations.class);
42 ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
43 TitanDao titanDao = Mockito.mock(TitanDao.class);
44 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
45 ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
46 PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
47 Field baseBusinessLogic;
48 Field baseBusinessLogic1;
49 Field baseBusinessLogic2;
50 Field baseBusinessLogic3;
51 AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
52 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
56 public void setup() throws Exception{
58 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
59 baseBusinessLogic.setAccessible(true);
60 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
62 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
63 baseBusinessLogic1.setAccessible(true);
64 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
66 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
67 baseBusinessLogic2.setAccessible(true);
68 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
70 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("titanDao");
71 baseBusinessLogic3.setAccessible(true);
72 baseBusinessLogic3.set(attributeBusinessLogic, titanDao);
74 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
75 baseBusinessLogic.setAccessible(true);
76 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
78 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
79 baseBusinessLogic.setAccessible(true);
80 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
82 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
83 baseBusinessLogic.setAccessible(true);
84 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
89 public void testCreateAttribute() throws Exception {
90 AttributeBusinessLogic testSubject;
91 String resourceId = "";
92 PropertyDefinition newAttributeDef = null;
94 Either<PropertyDefinition, ResponseFormat> result;
97 testSubject = createTestSubject();
102 public void testIsAttributeExist() throws Exception {
103 AttributeBusinessLogic testSubject;List<PropertyDefinition> attributes = null;
104 String resourceUid = "";
105 String propertyName = "";
109 testSubject=createTestSubject();attributes = null;
114 public void testGetAttribute() throws Exception {
115 AttributeBusinessLogic testSubject;
116 String resourceId = "";
117 String attributeId = "";
119 Either<PropertyDefinition, ResponseFormat> result;
122 testSubject = createTestSubject();
127 public void testUpdateAttribute() throws Exception {
128 AttributeBusinessLogic testSubject;
129 String resourceId = "";
130 String attributeId = "";
131 PropertyDefinition newAttDef = null;
133 Either<PropertyDefinition, ResponseFormat> result;
136 testSubject = createTestSubject();
141 public void testDeleteAttribute() throws Exception {
142 AttributeBusinessLogic testSubject;
143 String resourceId = "";
144 String attributeId = "";
146 Either<PropertyDefinition, ResponseFormat> result;
149 testSubject = createTestSubject();
154 public void createAttribute_lockfail() throws Exception {
155 Either<PropertyDefinition, ResponseFormat> response;
156 PropertyDefinition prop= new PropertyDefinition();
158 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
160 Assert.assertEquals(true,response.isRight());
165 public void createAttribute_Success() throws Exception {
167 Component resource= new Resource();
168 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
169 resource.setIsDeleted(false);
170 resource.setLastUpdaterUserId("USR01");
172 PropertyDefinition prop= new PropertyDefinition();
173 prop.setType(ToscaPropertyType.STRING.getType());
175 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
177 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
178 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
179 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
180 PropertyDefinition propertyDefinition = new PropertyDefinition();
181 Either<PropertyDefinition, StorageOperationStatus> either = Either.left(propertyDefinition);
182 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
184 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
186 Map<String,DataTypeDefinition> data=new HashMap<>();
187 data.put("ONE",new DataTypeDefinition());
188 Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = Either.left(data);
189 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
191 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
192 Either<PropertyDefinition, ResponseFormat> response;
194 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
196 Assert.assertEquals(true,response.isLeft());
201 public void createAttribute_failtogettoscaelement() throws Exception {
203 Component resource= new Resource();
204 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
205 resource.setIsDeleted(false);
206 resource.setLastUpdaterUserId("USR01");
208 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
210 Either<PropertyDefinition, ResponseFormat> response;
211 PropertyDefinition prop= new PropertyDefinition();
213 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
214 baseBusinessLogic.setAccessible(true);
215 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
216 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
217 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
218 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
220 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
222 Assert.assertEquals(true,response.isRight());
227 public void createAttribute_componentvalidationfails() throws Exception {
229 Component resource= new Resource();
230 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
231 resource.setIsDeleted(false);
232 resource.setLastUpdaterUserId("USR02");
234 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
236 Either<PropertyDefinition, ResponseFormat> response;
237 PropertyDefinition prop= new PropertyDefinition();
239 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
240 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
241 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
243 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
245 Assert.assertEquals(true,response.isRight());
250 public void createAttribute_componentalreadyexist_fails() throws Exception {
252 Either<PropertyDefinition, ResponseFormat> response;
253 PropertyDefinition prop= new PropertyDefinition();
254 prop.setName("RES01");
255 prop.setParentUniqueId("RES01");
257 List<PropertyDefinition> attributes = new ArrayList<>();
258 attributes.add(prop);
260 Component resource= new Resource();
261 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
262 resource.setIsDeleted(false);
263 resource.setLastUpdaterUserId("USR01");
264 ((Resource) resource).setAttributes(attributes);
266 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
268 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
269 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
270 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
272 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
274 Assert.assertEquals(true,response.isRight());
280 public void createAttribute_addresourcetostoragefails() throws Exception {
282 Component resource= new Resource();
283 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
284 resource.setIsDeleted(false);
285 resource.setLastUpdaterUserId("USR01");
287 PropertyDefinition prop= new PropertyDefinition();
288 prop.setType(ToscaPropertyType.STRING.getType());
290 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
291 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
293 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
294 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
295 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
296 PropertyDefinition propertyDefinition = new PropertyDefinition();
297 Either<PropertyDefinition, StorageOperationStatus> either = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
298 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
300 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
302 Map<String,DataTypeDefinition> data=new HashMap<>();
303 data.put("ONE",new DataTypeDefinition());
304 Either<Map<String, DataTypeDefinition>, TitanOperationStatus> allDataTypes = Either.left(data);
305 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
307 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
308 Either<PropertyDefinition, ResponseFormat> response;
310 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
312 Assert.assertEquals(true,response.isRight());
317 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
318 Either<PropertyDefinition, ResponseFormat> result;
320 Component resource= new Resource();
321 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
322 resource.setIsDeleted(false);
323 resource.setLastUpdaterUserId("USR01");
324 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
325 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
327 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
328 Assert.assertEquals(true,result.isRight());
332 public void testgetAttribute_success() throws Exception {
333 Either<PropertyDefinition, ResponseFormat> result;
335 Component resource= new Resource();
336 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
337 resource.setIsDeleted(false);
338 resource.setLastUpdaterUserId("USR01");
340 PropertyDefinition prop= new PropertyDefinition();
341 prop.setUniqueId("ATTR01");
342 prop.setParentUniqueId("RES01");
344 List<PropertyDefinition> attr = new ArrayList<>();
347 ((Resource) resource).setAttributes(attr);
348 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
349 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
351 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
352 Assert.assertEquals(true,result.isLeft());
356 public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
357 Either<PropertyDefinition, ResponseFormat> result;
359 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
360 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
362 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
363 Assert.assertEquals(true,result.isRight());
367 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
368 Either<PropertyDefinition, ResponseFormat> result;
370 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
371 Assert.assertEquals(true,result.isRight());
375 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
376 Either<PropertyDefinition, ResponseFormat> result;
378 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
379 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
381 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
382 Assert.assertEquals(true,result.isRight());
386 public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
387 Either<PropertyDefinition, ResponseFormat> result;
390 Component resource= new Resource();
391 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
392 resource.setIsDeleted(true);
393 resource.setLastUpdaterUserId("USR01");
396 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
401 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
402 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
404 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
405 Assert.assertEquals(true,result.isRight());
409 public void testdeleteAttribute_nonexistingresource() throws Exception {
410 Either<PropertyDefinition, ResponseFormat> result;
413 Component resource= new Resource();
414 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
415 resource.setIsDeleted(false);
416 resource.setLastUpdaterUserId("USR01");
418 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
420 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
421 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
423 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
424 Assert.assertEquals(true,result.isRight());
428 public void testdeleteAttribute_success() throws Exception {
429 Either<PropertyDefinition, ResponseFormat> result;
432 Component resource= new Resource();
433 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
434 resource.setIsDeleted(false);
435 resource.setLastUpdaterUserId("USR01");
438 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
440 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
441 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
442 when(toscaOperationFacade.deleteAttributeOfResource(any(),any())).thenReturn(StorageOperationStatus.OK);
444 PropertyDefinition prop= new PropertyDefinition();
445 prop.setUniqueId("ATTR01");
446 prop.setParentUniqueId("RES01");
447 List<PropertyDefinition> attributes = new ArrayList<>();
448 attributes.add(prop);
449 ((Resource) resource).setAttributes(attributes);
451 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
452 Assert.assertEquals(true,result.isLeft());