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.impl.ComponentsUtils;
43 import org.openecomp.sdc.be.model.AttributeDefinition;
44 import org.openecomp.sdc.be.model.Component;
45 import org.openecomp.sdc.be.model.DataTypeDefinition;
46 import org.openecomp.sdc.be.model.LifecycleStateEnum;
47 import org.openecomp.sdc.be.model.Resource;
48 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
49 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
50 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
51 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
52 import org.openecomp.sdc.be.model.operations.impl.AttributeOperation;
53 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
54 import org.openecomp.sdc.exception.ResponseFormat;
56 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock {
58 private AttributeBusinessLogic createTestSubject() {
59 return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
60 interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation);
63 private UserValidations userValidations = Mockito.mock(UserValidations.class);
64 private ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
65 private JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
66 private ToscaOperationFacade toscaOperationFacade = Mockito.mock(ToscaOperationFacade.class);
67 private ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
68 private AttributeOperation attributeOperation = Mockito.mock(AttributeOperation.class);
69 private Field baseBusinessLogic;
70 private AttributeBusinessLogic attributeBusinessLogic = createTestSubject();
71 private IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
74 public void setup() throws Exception {
75 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
76 baseBusinessLogic.setAccessible(true);
77 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
79 final Field baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass()
80 .getDeclaredField("userValidations");
81 baseBusinessLogic1.setAccessible(true);
82 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
84 final Field baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass()
85 .getDeclaredField("componentsUtils");
86 baseBusinessLogic2.setAccessible(true);
87 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
89 final Field baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass()
90 .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()
99 .getDeclaredField("applicationDataTypeCache");
100 baseBusinessLogic.setAccessible(true);
101 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
103 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("attributeOperation");
104 baseBusinessLogic.setAccessible(true);
105 baseBusinessLogic.set(attributeBusinessLogic, attributeOperation);
109 public void createAttribute_lockfail() {
110 Either<AttributeDefinition, ResponseFormat> response;
111 response = attributeBusinessLogic.createAttribute("RES01", new AttributeDefinition(), "USR01");
112 assertTrue(response.isRight());
116 public void createAttribute_Success() {
117 Component resource = new Resource();
118 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
119 resource.setIsDeleted(false);
120 resource.setLastUpdaterUserId("USR01");
122 AttributeDefinition attrib = new AttributeDefinition();
123 attrib.setType(ToscaPropertyType.STRING.getType());
125 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
127 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
128 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
129 AttributeDefinition attributeDataDefinition = new AttributeDefinition();
130 Either<AttributeDefinition, StorageOperationStatus> either = Either.left(attributeDataDefinition);
131 when(toscaOperationFacade.addAttributeOfResource(any(), any())).thenReturn(either);
133 when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
135 Map<String, DataTypeDefinition> data = new HashMap<>();
136 data.put("ONE", new DataTypeDefinition());
137 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
138 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
140 when(attributeOperation.isAttributeDefaultValueValid(any(), any())).thenReturn(true);
141 Either<AttributeDefinition, ResponseFormat> response;
143 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
145 assertTrue(response.isLeft());
149 public void createAttribute_failtogettoscaelement() throws NoSuchFieldException, IllegalAccessException {
150 Component resource = new Resource();
151 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
152 resource.setIsDeleted(false);
153 resource.setLastUpdaterUserId("USR01");
155 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
157 Either<AttributeDefinition, ResponseFormat> response;
158 AttributeDefinition prop = new AttributeDefinition();
160 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
161 baseBusinessLogic.setAccessible(true);
162 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
163 Either<Component, StorageOperationStatus> toscastatus = Either.right(StorageOperationStatus.GENERAL_ERROR);
164 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
166 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
168 assertTrue(response.isRight());
172 public void createAttribute_componentvalidationfails() {
173 Component resource = new Resource();
174 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
175 resource.setIsDeleted(false);
176 resource.setLastUpdaterUserId("USR02");
178 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
180 Either<AttributeDefinition, ResponseFormat> response;
181 AttributeDefinition prop = new AttributeDefinition();
183 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
184 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
186 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
188 assertTrue(response.isRight());
192 public void createAttribute_componentalreadyexist_fails() {
193 Either<AttributeDefinition, ResponseFormat> response;
194 AttributeDefinition attrib = new AttributeDefinition();
195 attrib.setName("RES01");
196 attrib.setOwnerId("RES01");
198 List<AttributeDefinition> attributes = new ArrayList<>();
199 attributes.add(attrib);
201 final Resource resource = new Resource();
202 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
203 resource.setIsDeleted(false);
204 resource.setLastUpdaterUserId("USR01");
205 resource.setAttributes(attributes);
207 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
209 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
210 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
212 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
214 assertTrue(response.isRight());
218 public void createAttribute_addresourcetostoragefails() {
220 Component resource = new Resource();
221 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
222 resource.setIsDeleted(false);
223 resource.setLastUpdaterUserId("USR01");
225 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
226 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
228 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
229 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
230 AttributeDefinition attributeDataDefinition = new AttributeDefinition();
231 Either<AttributeDefinition, StorageOperationStatus> either = Either
232 .right(StorageOperationStatus.CONNECTION_FAILURE);
233 when(toscaOperationFacade.addAttributeOfResource(any(), any())).thenReturn(either);
235 when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
237 Map<String, DataTypeDefinition> data = new HashMap<>();
238 data.put("ONE", new DataTypeDefinition());
239 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
240 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
242 when(attributeOperation.isAttributeDefaultValueValid(any(), any())).thenReturn(true);
243 Either<AttributeDefinition, ResponseFormat> response;
245 AttributeDefinition attrib = new AttributeDefinition();
246 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
248 assertTrue(response.isRight());
253 public void testgetAttribute_ATTRIBUTE_NOT_FOUND() {
254 Either<AttributeDefinition, ResponseFormat> result;
256 Component resource = new Resource();
257 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
258 resource.setIsDeleted(false);
259 resource.setLastUpdaterUserId("USR01");
260 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
261 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
263 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
264 assertTrue(result.isRight());
268 public void testgetAttribute_success() {
269 Either<AttributeDefinition, ResponseFormat> result;
271 final Resource resource = new Resource();
272 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
273 resource.setIsDeleted(false);
274 resource.setLastUpdaterUserId("USR01");
276 AttributeDefinition attrib = new AttributeDefinition();
277 attrib.setUniqueId("ATTR01");
278 attrib.setOwnerId("RES01");
280 List<AttributeDefinition> attr = new ArrayList<>();
283 resource.setAttributes(attr);
284 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
285 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
287 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
288 assertTrue(result.isLeft());
292 public void testgetAttribute_RESOURCE_NOT_FOUND() {
293 Either<AttributeDefinition, ResponseFormat> result;
295 Either<Component, StorageOperationStatus> toscastatus = Either
296 .right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
297 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
299 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
300 assertTrue(result.isRight());
304 public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() {
305 Either<AttributeDefinition, ResponseFormat> result;
307 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
308 assertTrue(result.isRight());
312 public void testdeleteAttribute_get_RESOURCE_from_DB_failed() {
313 Either<AttributeDefinition, ResponseFormat> result;
315 Either<Component, StorageOperationStatus> toscastatus = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
316 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
318 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
319 assertTrue(result.isRight());
323 public void testdeleteAttribute_get_RESOURCE_verification_failed() {
324 Either<AttributeDefinition, ResponseFormat> result;
325 Component resource = new Resource();
326 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
327 resource.setIsDeleted(true);
328 resource.setLastUpdaterUserId("USR01");
329 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
330 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
331 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
332 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
333 assertTrue(result.isRight());
337 public void testdeleteAttribute_nonexistingresource() {
338 Either<AttributeDefinition, ResponseFormat> result;
340 Component resource = new Resource();
341 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
342 resource.setIsDeleted(false);
343 resource.setLastUpdaterUserId("USR01");
345 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
347 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
348 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
350 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
351 assertTrue(result.isRight());
355 public void testdeleteAttribute_success() {
356 Either<AttributeDefinition, ResponseFormat> result;
357 final Resource resource = new Resource();
358 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
359 resource.setIsDeleted(false);
360 resource.setLastUpdaterUserId("USR01");
362 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
364 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
365 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
366 when(toscaOperationFacade.deleteAttributeOfResource(any(), any())).thenReturn(StorageOperationStatus.OK);
368 AttributeDefinition attrib = new AttributeDefinition();
369 attrib.setUniqueId("ATTR01");
370 attrib.setOwnerId("RES01");
371 List<AttributeDefinition> attributes = new ArrayList<>();
372 attributes.add(attrib);
373 resource.setAttributes(attributes);
375 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
376 assertTrue(result.isLeft());