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 * Modifications Copyright (C) 2020 Nordix Foundation
21 * ================================================================================
24 package org.openecomp.sdc.be.components.impl;
26 import static org.junit.Assert.assertTrue;
27 import static org.mockito.ArgumentMatchers.any;
28 import static org.mockito.Mockito.when;
30 import fj.data.Either;
31 import java.lang.reflect.Field;
32 import java.util.ArrayList;
33 import java.util.HashMap;
34 import java.util.List;
36 import org.junit.Before;
37 import org.junit.Test;
38 import org.mockito.Mockito;
39 import org.openecomp.sdc.be.components.validation.UserValidations;
40 import org.openecomp.sdc.be.dao.janusgraph.JanusGraphOperationStatus;
41 import org.openecomp.sdc.be.dao.jsongraph.JanusGraphDao;
42 import org.openecomp.sdc.be.datatypes.elements.AttributeDataDefinition;
43 import org.openecomp.sdc.be.impl.ComponentsUtils;
44 import org.openecomp.sdc.be.model.AttributeDefinition;
45 import org.openecomp.sdc.be.model.Component;
46 import org.openecomp.sdc.be.model.DataTypeDefinition;
47 import org.openecomp.sdc.be.model.LifecycleStateEnum;
48 import org.openecomp.sdc.be.model.Resource;
49 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
50 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
51 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
52 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
53 import org.openecomp.sdc.be.model.operations.impl.AttributeOperation;
54 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
55 import org.openecomp.sdc.exception.ResponseFormat;
57 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock {
59 private AttributeBusinessLogic createTestSubject() {
60 return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
61 interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation );
64 private UserValidations userValidations = Mockito.mock(UserValidations.class);
65 private ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
66 private JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
67 private ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
68 private ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
69 private AttributeOperation attributeOperation = Mockito.mock(AttributeOperation.class);
70 private Field baseBusinessLogic;
71 private AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
72 private IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
75 public void setup() throws Exception {
76 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
77 baseBusinessLogic.setAccessible(true);
78 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
80 final Field baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass()
81 .getDeclaredField("userValidations");
82 baseBusinessLogic1.setAccessible(true);
83 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
85 final Field baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass()
86 .getDeclaredField("componentsUtils");
87 baseBusinessLogic2.setAccessible(true);
88 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
90 final Field baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
91 baseBusinessLogic3.setAccessible(true);
92 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
94 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
95 baseBusinessLogic.setAccessible(true);
96 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
98 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
99 baseBusinessLogic.setAccessible(true);
100 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
102 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("attributeOperation");
103 baseBusinessLogic.setAccessible(true);
104 baseBusinessLogic.set(attributeBusinessLogic, attributeOperation);
108 public void createAttribute_lockfail() {
109 Either<AttributeDataDefinition, ResponseFormat> response;
110 response = attributeBusinessLogic.createAttribute("RES01", new AttributeDataDefinition(), "USR01");
111 assertTrue(response.isRight());
115 public void createAttribute_Success() {
116 Component resource = new Resource();
117 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
118 resource.setIsDeleted(false);
119 resource.setLastUpdaterUserId("USR01");
121 AttributeDefinition attrib = new AttributeDefinition();
122 attrib.setType(ToscaPropertyType.STRING.getType());
124 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
126 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
127 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
128 AttributeDataDefinition attributeDataDefinition = new AttributeDataDefinition();
129 Either<AttributeDataDefinition, StorageOperationStatus> either = Either.left(attributeDataDefinition);
130 when(toscaOperationFacade.addAttributeOfResource(any(), any())).thenReturn(either);
132 when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
134 Map<String, DataTypeDefinition> data = new HashMap<>();
135 data.put("ONE", new DataTypeDefinition());
136 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
137 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
139 when(attributeOperation.isAttributeDefaultValueValid(any(), any())).thenReturn(true);
140 Either<AttributeDataDefinition, ResponseFormat> response;
142 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
144 assertTrue(response.isLeft());
148 public void createAttribute_failtogettoscaelement() throws NoSuchFieldException, IllegalAccessException {
149 Component resource= new Resource();
150 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
151 resource.setIsDeleted(false);
152 resource.setLastUpdaterUserId("USR01");
154 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
156 Either<AttributeDataDefinition, ResponseFormat> response;
157 AttributeDataDefinition prop= new AttributeDataDefinition();
159 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
160 baseBusinessLogic.setAccessible(true);
161 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
162 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
163 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
165 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
167 assertTrue(response.isRight());
171 public void createAttribute_componentvalidationfails() {
172 Component resource= new Resource();
173 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
174 resource.setIsDeleted(false);
175 resource.setLastUpdaterUserId("USR02");
177 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
179 Either<AttributeDataDefinition, ResponseFormat> response;
180 AttributeDataDefinition prop= new AttributeDataDefinition();
182 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
183 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
185 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
187 assertTrue(response.isRight());
191 public void createAttribute_componentalreadyexist_fails() {
192 Either<AttributeDataDefinition, ResponseFormat> response;
193 AttributeDefinition attrib = new AttributeDefinition();
194 attrib.setName("RES01");
195 attrib.setOwnerId("RES01");
197 List<AttributeDataDefinition> attributes = new ArrayList<>();
198 attributes.add(attrib);
200 final Resource resource = new Resource();
201 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
202 resource.setIsDeleted(false);
203 resource.setLastUpdaterUserId("USR01");
204 resource.setAttributes(attributes);
206 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
208 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
209 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
211 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
213 assertTrue(response.isRight());
217 public void createAttribute_addresourcetostoragefails() {
219 Component resource = new Resource();
220 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
221 resource.setIsDeleted(false);
222 resource.setLastUpdaterUserId("USR01");
224 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
225 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
227 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
228 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
229 AttributeDataDefinition attributeDataDefinition = new AttributeDataDefinition();
230 Either<AttributeDataDefinition, StorageOperationStatus> either = Either
231 .right(StorageOperationStatus.CONNECTION_FAILURE);
232 when(toscaOperationFacade.addAttributeOfResource(any(),any())).thenReturn(either);
234 when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
236 Map<String, DataTypeDefinition> data = new HashMap<>();
237 data.put("ONE", new DataTypeDefinition());
238 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
239 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
241 when(attributeOperation.isAttributeDefaultValueValid(any(),any())).thenReturn(true);
242 Either<AttributeDataDefinition, ResponseFormat> response;
244 AttributeDataDefinition attrib = new AttributeDefinition();
245 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
247 assertTrue( response.isRight());
252 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() {
253 Either<AttributeDataDefinition, ResponseFormat> result;
255 Component resource= new Resource();
256 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
257 resource.setIsDeleted(false);
258 resource.setLastUpdaterUserId("USR01");
259 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
260 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
262 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
263 assertTrue(result.isRight());
267 public void testgetAttribute_success() {
268 Either<AttributeDataDefinition, ResponseFormat> result;
270 final Resource resource = new Resource();
271 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
272 resource.setIsDeleted(false);
273 resource.setLastUpdaterUserId("USR01");
275 AttributeDefinition attrib = new AttributeDefinition();
276 attrib.setUniqueId("ATTR01");
277 attrib.setOwnerId("RES01");
279 List<AttributeDataDefinition> attr = new ArrayList<>();
282 resource.setAttributes(attr);
283 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
284 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
286 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
287 assertTrue( result.isLeft());
291 public void testgetAttribute_RESOURCE_NOT_FOUND() {
292 Either<AttributeDataDefinition, ResponseFormat> result;
294 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
295 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
297 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
298 assertTrue(result.isRight());
302 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() {
303 Either<AttributeDataDefinition, ResponseFormat> result;
305 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
306 assertTrue(result.isRight());
310 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() {
311 Either<AttributeDataDefinition, ResponseFormat> result;
313 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
314 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
316 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
317 assertTrue(result.isRight());
321 public void testdeleteAttribute_get_RESOURCE_verification_failed() {
322 Either<AttributeDataDefinition, ResponseFormat> result;
323 Component resource= new Resource();
324 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
325 resource.setIsDeleted(true);
326 resource.setLastUpdaterUserId("USR01");
327 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
328 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
329 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
330 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
331 assertTrue(result.isRight());
335 public void testdeleteAttribute_nonexistingresource() {
336 Either<AttributeDataDefinition, ResponseFormat> result;
339 Component resource= new Resource();
340 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
341 resource.setIsDeleted(false);
342 resource.setLastUpdaterUserId("USR01");
344 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
346 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
347 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
349 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
350 assertTrue(result.isRight());
354 public void testdeleteAttribute_success() {
355 Either<AttributeDataDefinition, ResponseFormat> result;
356 final Resource resource = new Resource();
357 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
358 resource.setIsDeleted(false);
359 resource.setLastUpdaterUserId("USR01");
361 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
363 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
364 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
365 when(toscaOperationFacade.deleteAttributeOfResource(any(), any())).thenReturn(StorageOperationStatus.OK);
367 AttributeDefinition attrib = new AttributeDefinition();
368 attrib.setUniqueId("ATTR01");
369 attrib.setOwnerId("RES01");
370 List<AttributeDataDefinition> attributes = new ArrayList<>();
371 attributes.add(attrib);
372 resource.setAttributes(attributes);
374 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
375 assertTrue( result.isLeft());