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.LifecycleStateEnum;
35 import org.openecomp.sdc.be.model.PropertyDefinition;
36 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
37 import org.openecomp.sdc.be.model.AttributeDefinition;
38 import org.openecomp.sdc.be.model.Resource;
39 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
40 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
41 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
42 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
43 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
44 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
45 import org.openecomp.sdc.exception.ResponseFormat;
47 import java.lang.reflect.Field;
48 import java.util.ArrayList;
49 import java.util.HashMap;
50 import java.util.List;
53 import static org.mockito.ArgumentMatchers.any;
54 import static org.mockito.ArgumentMatchers.anyObject;
55 import static org.mockito.Mockito.when;
57 import org.openecomp.sdc.be.model.DataTypeDefinition;
59 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock{
61 private AttributeBusinessLogic createTestSubject() {
62 return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
63 interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation );
66 UserValidations userValidations = Mockito.mock(UserValidations.class);
67 ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
68 JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
69 ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
70 ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
71 PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
72 Field baseBusinessLogic;
73 Field baseBusinessLogic1;
74 Field baseBusinessLogic2;
75 Field baseBusinessLogic3;
76 AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
77 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
80 public void setup() throws Exception{
82 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
83 baseBusinessLogic.setAccessible(true);
84 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
86 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
87 baseBusinessLogic1.setAccessible(true);
88 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
90 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
91 baseBusinessLogic2.setAccessible(true);
92 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
94 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
95 baseBusinessLogic3.setAccessible(true);
96 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
98 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
99 baseBusinessLogic.setAccessible(true);
100 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
102 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
103 baseBusinessLogic.setAccessible(true);
104 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
106 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
107 baseBusinessLogic.setAccessible(true);
108 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
112 public void testCreateAttribute() throws Exception {
113 AttributeBusinessLogic testSubject;
114 String resourceId = "";
115 PropertyDefinition newAttributeDef = null;
117 Either<AttributeDataDefinition, ResponseFormat> result;
120 testSubject = createTestSubject();
124 public void testIsAttributeExist() throws Exception {
125 AttributeBusinessLogic testSubject;List<AttributeDataDefinition> attributes = null;
126 String resourceUid = "";
127 String propertyName = "";
131 testSubject=createTestSubject();attributes = null;
135 public void testGetAttribute() throws Exception {
136 AttributeBusinessLogic testSubject;
137 String resourceId = "";
138 String attributeId = "";
140 Either<PropertyDefinition, ResponseFormat> result;
143 testSubject = createTestSubject();
147 public void testUpdateAttribute() throws Exception {
148 AttributeBusinessLogic testSubject;
149 String resourceId = "";
150 String attributeId = "";
151 PropertyDefinition newAttDef = null;
153 Either<PropertyDefinition, ResponseFormat> result;
156 testSubject = createTestSubject();
160 public void testDeleteAttribute() throws Exception {
161 AttributeBusinessLogic testSubject;
162 String resourceId = "";
163 String attributeId = "";
165 Either<PropertyDefinition, ResponseFormat> result;
168 testSubject = createTestSubject();
172 public void createAttribute_lockfail() throws Exception {
173 Either<AttributeDataDefinition, ResponseFormat> response;
174 AttributeDataDefinition prop= new AttributeDataDefinition();
176 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
178 Assert.assertEquals(true,response.isRight());
183 public void createAttribute_Success() throws Exception {
185 Component resource = new Resource();
186 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
187 resource.setIsDeleted(false);
188 resource.setLastUpdaterUserId("USR01");
190 AttributeDefinition attrib = new AttributeDefinition();
191 attrib.setType(ToscaPropertyType.STRING.getType());
193 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
195 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
196 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
197 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
198 AttributeDataDefinition attributeDataDefinition = new AttributeDataDefinition();
199 Either<AttributeDataDefinition, StorageOperationStatus> either = Either.left(attributeDataDefinition);
200 when(toscaOperationFacade.addAttributeOfResource(anyObject(), anyObject())).thenReturn(either);
202 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
204 Map<String, DataTypeDefinition> data = new HashMap<>();
205 data.put("ONE", new DataTypeDefinition());
206 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
207 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
209 when(propertyOperation.isPropertyDefaultValueValid(anyObject(), anyObject())).thenReturn(true);
210 Either<AttributeDataDefinition, ResponseFormat> response;
212 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
214 Assert.assertEquals(true, response.isLeft());
219 public void createAttribute_failtogettoscaelement() throws Exception {
221 Component resource= new Resource();
222 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
223 resource.setIsDeleted(false);
224 resource.setLastUpdaterUserId("USR01");
226 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
228 Either<AttributeDataDefinition, ResponseFormat> response;
229 AttributeDataDefinition prop= new AttributeDataDefinition();
231 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
232 baseBusinessLogic.setAccessible(true);
233 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
234 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
235 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
236 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
238 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
240 Assert.assertEquals(true,response.isRight());
245 public void createAttribute_componentvalidationfails() throws Exception {
247 Component resource= new Resource();
248 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
249 resource.setIsDeleted(false);
250 resource.setLastUpdaterUserId("USR02");
252 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
254 Either<AttributeDataDefinition, ResponseFormat> response;
255 AttributeDataDefinition prop= new AttributeDataDefinition();
257 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
258 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
259 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
261 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
263 Assert.assertEquals(true,response.isRight());
268 public void createAttribute_componentalreadyexist_fails() throws Exception {
270 Either<AttributeDataDefinition, ResponseFormat> response;
271 AttributeDefinition attrib = new AttributeDefinition();
272 attrib.setName("RES01");
273 attrib.setParentUniqueId("RES01");
275 List<AttributeDataDefinition> attributes = new ArrayList<>();
276 attributes.add(attrib);
278 Component resource = new Resource();
279 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
280 resource.setIsDeleted(false);
281 resource.setLastUpdaterUserId("USR01");
282 ((Resource) resource).setAttributes(attributes);
284 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
286 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
287 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
288 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
290 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
292 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 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
305 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
307 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
308 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
309 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
310 AttributeDataDefinition attributeDataDefinition = new AttributeDataDefinition();
311 Either<AttributeDataDefinition, StorageOperationStatus> either = Either
312 .right(StorageOperationStatus.CONNECTION_FAILURE);
313 when(toscaOperationFacade.addAttributeOfResource(anyObject(), anyObject())).thenReturn(either);
315 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
317 Map<String, DataTypeDefinition> data = new HashMap<>();
318 data.put("ONE", new DataTypeDefinition());
319 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
320 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
322 when(propertyOperation.isPropertyDefaultValueValid(anyObject(), anyObject())).thenReturn(true);
323 Either<AttributeDataDefinition, ResponseFormat> response;
325 AttributeDataDefinition attrib = new AttributeDefinition();
326 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
328 Assert.assertEquals(true, response.isRight());
333 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
334 Either<AttributeDataDefinition, ResponseFormat> result;
336 Component resource= new Resource();
337 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
338 resource.setIsDeleted(false);
339 resource.setLastUpdaterUserId("USR01");
340 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
341 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
343 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
344 Assert.assertEquals(true,result.isRight());
348 public void testgetAttribute_success() throws Exception {
349 Either<AttributeDataDefinition, ResponseFormat> result;
351 Component resource = new Resource();
352 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
353 resource.setIsDeleted(false);
354 resource.setLastUpdaterUserId("USR01");
356 AttributeDefinition attrib = new AttributeDefinition();
357 attrib.setUniqueId("ATTR01");
358 attrib.setParentUniqueId("RES01");
360 List<AttributeDataDefinition> attr = new ArrayList<>();
363 ((Resource) resource).setAttributes(attr);
364 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
365 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
367 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
368 Assert.assertEquals(true, result.isLeft());
372 public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
373 Either<AttributeDataDefinition, ResponseFormat> result;
375 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
376 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
378 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
379 Assert.assertEquals(true,result.isRight());
383 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
384 Either<AttributeDataDefinition, ResponseFormat> result;
386 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
387 Assert.assertEquals(true,result.isRight());
391 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
392 Either<AttributeDataDefinition, ResponseFormat> result;
394 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
395 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
397 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
398 Assert.assertEquals(true,result.isRight());
402 public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
403 Either<AttributeDataDefinition, ResponseFormat> result;
406 Component resource= new Resource();
407 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
408 resource.setIsDeleted(true);
409 resource.setLastUpdaterUserId("USR01");
412 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_nonexistingresource() throws Exception {
426 Either<AttributeDataDefinition, ResponseFormat> result;
429 Component resource= new Resource();
430 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
431 resource.setIsDeleted(false);
432 resource.setLastUpdaterUserId("USR01");
434 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
436 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
437 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
439 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
440 Assert.assertEquals(true,result.isRight());
444 public void testdeleteAttribute_success() throws Exception {
445 Either<AttributeDataDefinition, ResponseFormat> result;
448 Component resource= new Resource();
449 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
450 resource.setIsDeleted(false);
451 resource.setLastUpdaterUserId("USR01");
453 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
455 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
456 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
457 when(toscaOperationFacade.deleteAttributeOfResource(any(), any())).thenReturn(StorageOperationStatus.OK);
459 AttributeDefinition attrib = new AttributeDefinition();
460 attrib.setUniqueId("ATTR01");
461 attrib.setParentUniqueId("RES01");
462 List<AttributeDataDefinition> attributes = new ArrayList<>();
463 attributes.add(attrib);
464 ((Resource) resource).setAttributes(attributes);
466 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
467 Assert.assertEquals(true, result.isLeft());