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=========================================================
21 package org.openecomp.sdc.be.components.impl;
23 import java.lang.reflect.Field;
24 import java.util.ArrayList;
25 import java.util.HashMap;
26 import java.util.List;
29 import junit.framework.Assert;
30 import org.junit.Before;
31 import org.junit.Test;
32 import org.mockito.Mockito;
33 import org.openecomp.sdc.be.components.validation.UserValidations;
34 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
35 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
36 import org.openecomp.sdc.be.impl.ComponentsUtils;
37 import org.openecomp.sdc.be.model.*;
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;
45 import static org.mockito.ArgumentMatchers.any;
46 import static org.mockito.ArgumentMatchers.anyObject;
47 import static org.mockito.Mockito.when;
49 import fj.data.Either;
52 public class AttributeBusinessLogicTest {
54 private AttributeBusinessLogic createTestSubject() {
55 return new AttributeBusinessLogic();
58 UserValidations userValidations = Mockito.mock(UserValidations.class);
59 ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
60 JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
61 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
62 ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
63 PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
64 Field baseBusinessLogic;
65 Field baseBusinessLogic1;
66 Field baseBusinessLogic2;
67 Field baseBusinessLogic3;
68 AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
69 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
73 public void setup() throws Exception{
75 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
76 baseBusinessLogic.setAccessible(true);
77 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
79 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
80 baseBusinessLogic1.setAccessible(true);
81 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
83 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
84 baseBusinessLogic2.setAccessible(true);
85 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
87 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
88 baseBusinessLogic3.setAccessible(true);
89 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
91 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
92 baseBusinessLogic.setAccessible(true);
93 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
95 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
96 baseBusinessLogic.setAccessible(true);
97 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
99 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
100 baseBusinessLogic.setAccessible(true);
101 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
106 public void testCreateAttribute() throws Exception {
107 AttributeBusinessLogic testSubject;
108 String resourceId = "";
109 PropertyDefinition newAttributeDef = null;
111 Either<PropertyDefinition, ResponseFormat> result;
114 testSubject = createTestSubject();
119 public void testIsAttributeExist() throws Exception {
120 AttributeBusinessLogic testSubject;List<PropertyDefinition> attributes = null;
121 String resourceUid = "";
122 String propertyName = "";
126 testSubject=createTestSubject();attributes = null;
131 public void testGetAttribute() throws Exception {
132 AttributeBusinessLogic testSubject;
133 String resourceId = "";
134 String attributeId = "";
136 Either<PropertyDefinition, ResponseFormat> result;
139 testSubject = createTestSubject();
144 public void testUpdateAttribute() throws Exception {
145 AttributeBusinessLogic testSubject;
146 String resourceId = "";
147 String attributeId = "";
148 PropertyDefinition newAttDef = null;
150 Either<PropertyDefinition, ResponseFormat> result;
153 testSubject = createTestSubject();
158 public void testDeleteAttribute() throws Exception {
159 AttributeBusinessLogic testSubject;
160 String resourceId = "";
161 String attributeId = "";
163 Either<PropertyDefinition, ResponseFormat> result;
166 testSubject = createTestSubject();
171 public void createAttribute_lockfail() throws Exception {
172 Either<PropertyDefinition, ResponseFormat> response;
173 PropertyDefinition prop= new PropertyDefinition();
175 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
177 Assert.assertEquals(true,response.isRight());
182 public void createAttribute_Success() throws Exception {
184 Component resource= new Resource();
185 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
186 resource.setIsDeleted(false);
187 resource.setLastUpdaterUserId("USR01");
189 PropertyDefinition prop= new PropertyDefinition();
190 prop.setType(ToscaPropertyType.STRING.getType());
192 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
194 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
195 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
196 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
197 PropertyDefinition propertyDefinition = new PropertyDefinition();
198 Either<PropertyDefinition, StorageOperationStatus> either = Either.left(propertyDefinition);
199 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
201 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
203 Map<String,DataTypeDefinition> data=new HashMap<>();
204 data.put("ONE",new DataTypeDefinition());
205 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
206 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
208 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
209 Either<PropertyDefinition, ResponseFormat> response;
211 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
213 Assert.assertEquals(true,response.isLeft());
218 public void createAttribute_failtogettoscaelement() throws Exception {
220 Component resource= new Resource();
221 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
222 resource.setIsDeleted(false);
223 resource.setLastUpdaterUserId("USR01");
225 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
227 Either<PropertyDefinition, ResponseFormat> response;
228 PropertyDefinition prop= new PropertyDefinition();
230 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
231 baseBusinessLogic.setAccessible(true);
232 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
233 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
234 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
235 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
237 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
239 Assert.assertEquals(true,response.isRight());
244 public void createAttribute_componentvalidationfails() throws Exception {
246 Component resource= new Resource();
247 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
248 resource.setIsDeleted(false);
249 resource.setLastUpdaterUserId("USR02");
251 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
253 Either<PropertyDefinition, ResponseFormat> response;
254 PropertyDefinition prop= new PropertyDefinition();
256 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
257 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
258 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
260 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
262 Assert.assertEquals(true,response.isRight());
267 public void createAttribute_componentalreadyexist_fails() throws Exception {
269 Either<PropertyDefinition, ResponseFormat> response;
270 PropertyDefinition prop= new PropertyDefinition();
271 prop.setName("RES01");
272 prop.setParentUniqueId("RES01");
274 List<PropertyDefinition> attributes = new ArrayList<>();
275 attributes.add(prop);
277 Component resource= new Resource();
278 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
279 resource.setIsDeleted(false);
280 resource.setLastUpdaterUserId("USR01");
281 ((Resource) resource).setAttributes(attributes);
283 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
285 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
286 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
287 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
289 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
291 Assert.assertEquals(true,response.isRight());
297 public void createAttribute_addresourcetostoragefails() throws Exception {
299 Component resource= new Resource();
300 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
301 resource.setIsDeleted(false);
302 resource.setLastUpdaterUserId("USR01");
304 PropertyDefinition prop= new PropertyDefinition();
305 prop.setType(ToscaPropertyType.STRING.getType());
307 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
308 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
310 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
311 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
312 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
313 PropertyDefinition propertyDefinition = new PropertyDefinition();
314 Either<PropertyDefinition, StorageOperationStatus> either = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
315 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
317 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
319 Map<String,DataTypeDefinition> data=new HashMap<>();
320 data.put("ONE",new DataTypeDefinition());
321 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
322 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
324 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
325 Either<PropertyDefinition, ResponseFormat> response;
327 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
329 Assert.assertEquals(true,response.isRight());
334 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
335 Either<PropertyDefinition, ResponseFormat> result;
337 Component resource= new Resource();
338 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
339 resource.setIsDeleted(false);
340 resource.setLastUpdaterUserId("USR01");
341 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
342 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
344 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
345 Assert.assertEquals(true,result.isRight());
349 public void testgetAttribute_success() throws Exception {
350 Either<PropertyDefinition, ResponseFormat> result;
352 Component resource= new Resource();
353 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
354 resource.setIsDeleted(false);
355 resource.setLastUpdaterUserId("USR01");
357 PropertyDefinition prop= new PropertyDefinition();
358 prop.setUniqueId("ATTR01");
359 prop.setParentUniqueId("RES01");
361 List<PropertyDefinition> attr = new ArrayList<>();
364 ((Resource) resource).setAttributes(attr);
365 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
366 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
368 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
369 Assert.assertEquals(true,result.isLeft());
373 public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
374 Either<PropertyDefinition, ResponseFormat> result;
376 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
377 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
379 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
380 Assert.assertEquals(true,result.isRight());
384 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
385 Either<PropertyDefinition, ResponseFormat> result;
387 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
388 Assert.assertEquals(true,result.isRight());
392 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
393 Either<PropertyDefinition, ResponseFormat> result;
395 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
396 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
398 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
399 Assert.assertEquals(true,result.isRight());
403 public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
404 Either<PropertyDefinition, ResponseFormat> result;
407 Component resource= new Resource();
408 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
409 resource.setIsDeleted(true);
410 resource.setLastUpdaterUserId("USR01");
413 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
418 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
419 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
421 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
422 Assert.assertEquals(true,result.isRight());
426 public void testdeleteAttribute_nonexistingresource() throws Exception {
427 Either<PropertyDefinition, ResponseFormat> result;
430 Component resource= new Resource();
431 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
432 resource.setIsDeleted(false);
433 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);
440 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
441 Assert.assertEquals(true,result.isRight());
445 public void testdeleteAttribute_success() throws Exception {
446 Either<PropertyDefinition, ResponseFormat> result;
449 Component resource= new Resource();
450 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
451 resource.setIsDeleted(false);
452 resource.setLastUpdaterUserId("USR01");
455 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
457 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
458 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
459 when(toscaOperationFacade.deleteAttributeOfResource(any(),any())).thenReturn(StorageOperationStatus.OK);
461 PropertyDefinition prop= new PropertyDefinition();
462 prop.setUniqueId("ATTR01");
463 prop.setParentUniqueId("RES01");
464 List<PropertyDefinition> attributes = new ArrayList<>();
465 attributes.add(prop);
466 ((Resource) resource).setAttributes(attributes);
468 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
469 Assert.assertEquals(true,result.isLeft());