Implement Attributes/Outputs BE (part 1)
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / impl / AttributeBusinessLogicTest.java
1 /*-
2  * ============LICENSE_START=======================================================
3  * SDC
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
10  *
11  *      http://www.apache.org/licenses/LICENSE-2.0
12  *
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  * ================================================================================
22  */
23
24 package org.openecomp.sdc.be.components.impl;
25
26 import static org.junit.Assert.assertTrue;
27 import static org.mockito.ArgumentMatchers.any;
28 import static org.mockito.Mockito.when;
29
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;
35 import java.util.Map;
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;
55
56 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock {
57
58     private AttributeBusinessLogic createTestSubject() {
59         return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
60             interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation);
61     }
62
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);
72
73     @Before
74     public void setup() throws Exception {
75         baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
76         baseBusinessLogic.setAccessible(true);
77         baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
78
79         final Field baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass()
80             .getDeclaredField("userValidations");
81         baseBusinessLogic1.setAccessible(true);
82         baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
83
84         final Field baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass()
85             .getDeclaredField("componentsUtils");
86         baseBusinessLogic2.setAccessible(true);
87         baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
88
89         final Field baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass()
90             .getDeclaredField("janusGraphDao");
91         baseBusinessLogic3.setAccessible(true);
92         baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
93
94         baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
95         baseBusinessLogic.setAccessible(true);
96         baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
97
98         baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass()
99             .getDeclaredField("applicationDataTypeCache");
100         baseBusinessLogic.setAccessible(true);
101         baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
102
103         baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("attributeOperation");
104         baseBusinessLogic.setAccessible(true);
105         baseBusinessLogic.set(attributeBusinessLogic, attributeOperation);
106     }
107
108     @Test
109     public void createAttribute_lockfail() {
110         Either<AttributeDefinition, ResponseFormat> response;
111         response = attributeBusinessLogic.createAttribute("RES01", new AttributeDefinition(), "USR01");
112         assertTrue(response.isRight());
113     }
114
115     @Test
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");
121
122         AttributeDefinition attrib = new AttributeDefinition();
123         attrib.setType(ToscaPropertyType.STRING.getType());
124
125         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
126
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);
132
133         when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
134
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);
139
140         when(attributeOperation.isAttributeDefaultValueValid(any(), any())).thenReturn(true);
141         Either<AttributeDefinition, ResponseFormat> response;
142
143         response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
144
145         assertTrue(response.isLeft());
146     }
147
148     @Test
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");
154
155         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
156
157         Either<AttributeDefinition, ResponseFormat> response;
158         AttributeDefinition prop = new AttributeDefinition();
159
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);
165
166         response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
167
168         assertTrue(response.isRight());
169     }
170
171     @Test
172     public void createAttribute_componentvalidationfails() {
173         Component resource = new Resource();
174         resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
175         resource.setIsDeleted(false);
176         resource.setLastUpdaterUserId("USR02");
177
178         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
179
180         Either<AttributeDefinition, ResponseFormat> response;
181         AttributeDefinition prop = new AttributeDefinition();
182
183         Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
184         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
185
186         response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
187
188         assertTrue(response.isRight());
189     }
190
191     @Test
192     public void createAttribute_componentalreadyexist_fails() {
193         Either<AttributeDefinition, ResponseFormat> response;
194         AttributeDefinition attrib = new AttributeDefinition();
195         attrib.setName("RES01");
196         attrib.setOwnerId("RES01");
197
198         List<AttributeDefinition> attributes = new ArrayList<>();
199         attributes.add(attrib);
200
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);
206
207         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
208
209         Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
210         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
211
212         response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
213
214         assertTrue(response.isRight());
215     }
216
217     @Test
218     public void createAttribute_addresourcetostoragefails() {
219
220         Component resource = new Resource();
221         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
222         resource.setIsDeleted(false);
223         resource.setLastUpdaterUserId("USR01");
224
225         IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
226         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
227
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);
234
235         when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
236
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);
241
242         when(attributeOperation.isAttributeDefaultValueValid(any(), any())).thenReturn(true);
243         Either<AttributeDefinition, ResponseFormat> response;
244
245         AttributeDefinition attrib = new AttributeDefinition();
246         response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
247
248         assertTrue(response.isRight());
249
250     }
251
252     @Test
253     public void testgetAttribute_ATTRIBUTE_NOT_FOUND() {
254         Either<AttributeDefinition, ResponseFormat> result;
255
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);
262
263         result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
264         assertTrue(result.isRight());
265     }
266
267     @Test
268     public void testgetAttribute_success() {
269         Either<AttributeDefinition, ResponseFormat> result;
270
271         final Resource resource = new Resource();
272         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
273         resource.setIsDeleted(false);
274         resource.setLastUpdaterUserId("USR01");
275
276         AttributeDefinition attrib = new AttributeDefinition();
277         attrib.setUniqueId("ATTR01");
278         attrib.setOwnerId("RES01");
279
280         List<AttributeDefinition> attr = new ArrayList<>();
281         attr.add(attrib);
282
283         resource.setAttributes(attr);
284         Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
285         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
286
287         result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
288         assertTrue(result.isLeft());
289     }
290
291     @Test
292     public void testgetAttribute_RESOURCE_NOT_FOUND() {
293         Either<AttributeDefinition, ResponseFormat> result;
294
295         Either<Component, StorageOperationStatus> toscastatus = Either
296             .right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
297         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
298
299         result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
300         assertTrue(result.isRight());
301     }
302
303     @Test
304     public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() {
305         Either<AttributeDefinition, ResponseFormat> result;
306
307         result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
308         assertTrue(result.isRight());
309     }
310
311     @Test
312     public void testdeleteAttribute_get_RESOURCE_from_DB_failed() {
313         Either<AttributeDefinition, ResponseFormat> result;
314
315         Either<Component, StorageOperationStatus> toscastatus = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
316         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
317
318         result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
319         assertTrue(result.isRight());
320     }
321
322     @Test
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());
334     }
335
336     @Test
337     public void testdeleteAttribute_nonexistingresource() {
338         Either<AttributeDefinition, ResponseFormat> result;
339
340         Component resource = new Resource();
341         resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
342         resource.setIsDeleted(false);
343         resource.setLastUpdaterUserId("USR01");
344
345         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
346
347         Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
348         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
349
350         result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
351         assertTrue(result.isRight());
352     }
353
354     @Test
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");
361
362         when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
363
364         Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
365         when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
366         when(toscaOperationFacade.deleteAttributeOfResource(any(), any())).thenReturn(StorageOperationStatus.OK);
367
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);
374
375         result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
376         assertTrue(result.isLeft());
377     }
378
379 }