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.janusgraph.JanusGraphOperationStatus;
15 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
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.jsonjanusgraph.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.tosca.ToscaPropertyType;
24 import org.openecomp.sdc.exception.ResponseFormat;
25 import static org.mockito.ArgumentMatchers.any;
26 import static org.mockito.ArgumentMatchers.anyObject;
27 import static org.mockito.Mockito.when;
29 import fj.data.Either;
32 public class AttributeBusinessLogicTest {
34 private AttributeBusinessLogic createTestSubject() {
35 return new AttributeBusinessLogic();
38 UserValidations userValidations = Mockito.mock(UserValidations.class);
39 ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
40 JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
41 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
42 ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
43 PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
44 Field baseBusinessLogic;
45 Field baseBusinessLogic1;
46 Field baseBusinessLogic2;
47 Field baseBusinessLogic3;
48 AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
49 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
53 public void setup() throws Exception{
55 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
56 baseBusinessLogic.setAccessible(true);
57 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
59 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
60 baseBusinessLogic1.setAccessible(true);
61 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
63 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
64 baseBusinessLogic2.setAccessible(true);
65 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
67 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
68 baseBusinessLogic3.setAccessible(true);
69 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
71 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
72 baseBusinessLogic.setAccessible(true);
73 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
75 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
76 baseBusinessLogic.setAccessible(true);
77 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
79 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
80 baseBusinessLogic.setAccessible(true);
81 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
86 public void testCreateAttribute() throws Exception {
87 AttributeBusinessLogic testSubject;
88 String resourceId = "";
89 PropertyDefinition newAttributeDef = null;
91 Either<PropertyDefinition, ResponseFormat> result;
94 testSubject = createTestSubject();
99 public void testIsAttributeExist() throws Exception {
100 AttributeBusinessLogic testSubject;List<PropertyDefinition> attributes = null;
101 String resourceUid = "";
102 String propertyName = "";
106 testSubject=createTestSubject();attributes = null;
111 public void testGetAttribute() throws Exception {
112 AttributeBusinessLogic testSubject;
113 String resourceId = "";
114 String attributeId = "";
116 Either<PropertyDefinition, ResponseFormat> result;
119 testSubject = createTestSubject();
124 public void testUpdateAttribute() throws Exception {
125 AttributeBusinessLogic testSubject;
126 String resourceId = "";
127 String attributeId = "";
128 PropertyDefinition newAttDef = null;
130 Either<PropertyDefinition, ResponseFormat> result;
133 testSubject = createTestSubject();
138 public void testDeleteAttribute() throws Exception {
139 AttributeBusinessLogic testSubject;
140 String resourceId = "";
141 String attributeId = "";
143 Either<PropertyDefinition, ResponseFormat> result;
146 testSubject = createTestSubject();
151 public void createAttribute_lockfail() throws Exception {
152 Either<PropertyDefinition, ResponseFormat> response;
153 PropertyDefinition prop= new PropertyDefinition();
155 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
157 Assert.assertEquals(true,response.isRight());
162 public void createAttribute_Success() throws Exception {
164 Component resource= new Resource();
165 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
166 resource.setIsDeleted(false);
167 resource.setLastUpdaterUserId("USR01");
169 PropertyDefinition prop= new PropertyDefinition();
170 prop.setType(ToscaPropertyType.STRING.getType());
172 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
174 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
175 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
176 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
177 PropertyDefinition propertyDefinition = new PropertyDefinition();
178 Either<PropertyDefinition, StorageOperationStatus> either = Either.left(propertyDefinition);
179 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
181 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
183 Map<String,DataTypeDefinition> data=new HashMap<>();
184 data.put("ONE",new DataTypeDefinition());
185 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
186 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
188 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
189 Either<PropertyDefinition, ResponseFormat> response;
191 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
193 Assert.assertEquals(true,response.isLeft());
198 public void createAttribute_failtogettoscaelement() throws Exception {
200 Component resource= new Resource();
201 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
202 resource.setIsDeleted(false);
203 resource.setLastUpdaterUserId("USR01");
205 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
207 Either<PropertyDefinition, ResponseFormat> response;
208 PropertyDefinition prop= new PropertyDefinition();
210 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
211 baseBusinessLogic.setAccessible(true);
212 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
213 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
214 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
215 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
217 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
219 Assert.assertEquals(true,response.isRight());
224 public void createAttribute_componentvalidationfails() throws Exception {
226 Component resource= new Resource();
227 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
228 resource.setIsDeleted(false);
229 resource.setLastUpdaterUserId("USR02");
231 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
233 Either<PropertyDefinition, ResponseFormat> response;
234 PropertyDefinition prop= new PropertyDefinition();
236 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
237 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
238 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
240 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
242 Assert.assertEquals(true,response.isRight());
247 public void createAttribute_componentalreadyexist_fails() throws Exception {
249 Either<PropertyDefinition, ResponseFormat> response;
250 PropertyDefinition prop= new PropertyDefinition();
251 prop.setName("RES01");
252 prop.setParentUniqueId("RES01");
254 List<PropertyDefinition> attributes = new ArrayList<>();
255 attributes.add(prop);
257 Component resource= new Resource();
258 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
259 resource.setIsDeleted(false);
260 resource.setLastUpdaterUserId("USR01");
261 ((Resource) resource).setAttributes(attributes);
263 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
265 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
266 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
267 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
269 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
271 Assert.assertEquals(true,response.isRight());
277 public void createAttribute_addresourcetostoragefails() throws Exception {
279 Component resource= new Resource();
280 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
281 resource.setIsDeleted(false);
282 resource.setLastUpdaterUserId("USR01");
284 PropertyDefinition prop= new PropertyDefinition();
285 prop.setType(ToscaPropertyType.STRING.getType());
287 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
288 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
290 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
291 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
292 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
293 PropertyDefinition propertyDefinition = new PropertyDefinition();
294 Either<PropertyDefinition, StorageOperationStatus> either = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
295 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
297 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
299 Map<String,DataTypeDefinition> data=new HashMap<>();
300 data.put("ONE",new DataTypeDefinition());
301 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
302 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
304 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
305 Either<PropertyDefinition, ResponseFormat> response;
307 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
309 Assert.assertEquals(true,response.isRight());
314 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
315 Either<PropertyDefinition, ResponseFormat> result;
317 Component resource= new Resource();
318 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
319 resource.setIsDeleted(false);
320 resource.setLastUpdaterUserId("USR01");
321 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
322 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
324 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
325 Assert.assertEquals(true,result.isRight());
329 public void testgetAttribute_success() throws Exception {
330 Either<PropertyDefinition, ResponseFormat> result;
332 Component resource= new Resource();
333 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
334 resource.setIsDeleted(false);
335 resource.setLastUpdaterUserId("USR01");
337 PropertyDefinition prop= new PropertyDefinition();
338 prop.setUniqueId("ATTR01");
339 prop.setParentUniqueId("RES01");
341 List<PropertyDefinition> attr = new ArrayList<>();
344 ((Resource) resource).setAttributes(attr);
345 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
346 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
348 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
349 Assert.assertEquals(true,result.isLeft());
353 public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
354 Either<PropertyDefinition, ResponseFormat> result;
356 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
357 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
359 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
360 Assert.assertEquals(true,result.isRight());
364 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
365 Either<PropertyDefinition, ResponseFormat> result;
367 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
368 Assert.assertEquals(true,result.isRight());
372 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
373 Either<PropertyDefinition, ResponseFormat> result;
375 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
376 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
378 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
379 Assert.assertEquals(true,result.isRight());
383 public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
384 Either<PropertyDefinition, ResponseFormat> result;
387 Component resource= new Resource();
388 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
389 resource.setIsDeleted(true);
390 resource.setLastUpdaterUserId("USR01");
393 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
398 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
399 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
401 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
402 Assert.assertEquals(true,result.isRight());
406 public void testdeleteAttribute_nonexistingresource() throws Exception {
407 Either<PropertyDefinition, ResponseFormat> result;
410 Component resource= new Resource();
411 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
412 resource.setIsDeleted(false);
413 resource.setLastUpdaterUserId("USR01");
415 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
417 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
418 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
420 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
421 Assert.assertEquals(true,result.isRight());
425 public void testdeleteAttribute_success() throws Exception {
426 Either<PropertyDefinition, ResponseFormat> result;
429 Component resource= new Resource();
430 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
431 resource.setIsDeleted(false);
432 resource.setLastUpdaterUserId("USR01");
435 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
437 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
438 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
439 when(toscaOperationFacade.deleteAttributeOfResource(any(),any())).thenReturn(StorageOperationStatus.OK);
441 PropertyDefinition prop= new PropertyDefinition();
442 prop.setUniqueId("ATTR01");
443 prop.setParentUniqueId("RES01");
444 List<PropertyDefinition> attributes = new ArrayList<>();
445 attributes.add(prop);
446 ((Resource) resource).setAttributes(attributes);
448 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
449 Assert.assertEquals(true,result.isLeft());