0b11b2e0cf220755e588dbb642b5d1d6a4189f50
[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.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;
56
57 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock {
58
59         private AttributeBusinessLogic createTestSubject() {
60                 return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
61                         interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation );
62         }
63
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);
73
74         @Before
75         public void setup() throws Exception {
76                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
77                 baseBusinessLogic.setAccessible(true);
78                 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
79
80                 final Field baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass()
81                         .getDeclaredField("userValidations");
82                 baseBusinessLogic1.setAccessible(true);
83                 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
84
85                 final Field baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass()
86                         .getDeclaredField("componentsUtils");
87                 baseBusinessLogic2.setAccessible(true);
88                 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
89
90                 final Field baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().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().getDeclaredField("applicationDataTypeCache");
99                 baseBusinessLogic.setAccessible(true);
100                 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
101
102                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("attributeOperation");
103                 baseBusinessLogic.setAccessible(true);
104                 baseBusinessLogic.set(attributeBusinessLogic, attributeOperation);
105         }
106
107         @Test
108         public void createAttribute_lockfail() {
109                 Either<AttributeDataDefinition, ResponseFormat> response;
110                 response = attributeBusinessLogic.createAttribute("RES01", new AttributeDataDefinition(), "USR01");
111                 assertTrue(response.isRight());
112         }
113
114         @Test
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");
120
121                 AttributeDefinition attrib = new AttributeDefinition();
122                 attrib.setType(ToscaPropertyType.STRING.getType());
123
124                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
125
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);
131
132                 when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
133
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);
138
139                 when(attributeOperation.isAttributeDefaultValueValid(any(), any())).thenReturn(true);
140                 Either<AttributeDataDefinition, ResponseFormat> response;
141
142                 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
143
144                 assertTrue(response.isLeft());
145         }
146
147         @Test
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");
153
154                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
155
156                 Either<AttributeDataDefinition, ResponseFormat> response;
157                 AttributeDataDefinition prop= new AttributeDataDefinition();
158
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);
164
165                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
166
167                 assertTrue(response.isRight());
168         }
169
170         @Test
171         public void createAttribute_componentvalidationfails() {
172                 Component resource= new Resource();
173                 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
174                 resource.setIsDeleted(false);
175                 resource.setLastUpdaterUserId("USR02");
176
177                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
178
179                 Either<AttributeDataDefinition, ResponseFormat> response;
180                 AttributeDataDefinition prop= new AttributeDataDefinition();
181
182                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
183                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
184
185                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
186
187                 assertTrue(response.isRight());
188         }
189
190         @Test
191         public void createAttribute_componentalreadyexist_fails() {
192                 Either<AttributeDataDefinition, ResponseFormat> response;
193                 AttributeDefinition attrib = new AttributeDefinition();
194                 attrib.setName("RES01");
195                 attrib.setOwnerId("RES01");
196
197                 List<AttributeDataDefinition> attributes = new ArrayList<>();
198                 attributes.add(attrib);
199
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);
205
206                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
207
208                 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
209                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
210
211                 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
212
213                 assertTrue(response.isRight());
214         }
215
216         @Test
217         public void createAttribute_addresourcetostoragefails() {
218
219                 Component resource = new Resource();
220                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
221                 resource.setIsDeleted(false);
222                 resource.setLastUpdaterUserId("USR01");
223
224                 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
225                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
226
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);
233
234                 when(attributeOperation.isAttributeTypeValid(any())).thenReturn(true);
235
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);
240
241                 when(attributeOperation.isAttributeDefaultValueValid(any(),any())).thenReturn(true);
242                 Either<AttributeDataDefinition, ResponseFormat> response;
243
244                 AttributeDataDefinition attrib = new AttributeDefinition();
245                 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
246
247                 assertTrue( response.isRight());
248
249         }
250
251         @Test
252         public void testgetAttribute_ATTRIBUTE_NOT_FOUND() {
253                 Either<AttributeDataDefinition, ResponseFormat> result;
254
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);
261
262                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
263                 assertTrue(result.isRight());
264         }
265
266         @Test
267         public void testgetAttribute_success() {
268                 Either<AttributeDataDefinition, ResponseFormat> result;
269
270                 final Resource resource = new Resource();
271                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
272                 resource.setIsDeleted(false);
273                 resource.setLastUpdaterUserId("USR01");
274
275                 AttributeDefinition attrib = new AttributeDefinition();
276                 attrib.setUniqueId("ATTR01");
277                 attrib.setOwnerId("RES01");
278
279                 List<AttributeDataDefinition> attr = new ArrayList<>();
280                 attr.add(attrib);
281
282                 resource.setAttributes(attr);
283                 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
284                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
285
286                 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
287                 assertTrue( result.isLeft());
288         }
289
290         @Test
291         public void testgetAttribute_RESOURCE_NOT_FOUND() {
292                 Either<AttributeDataDefinition, ResponseFormat> result;
293
294                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
295                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
296
297                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
298                 assertTrue(result.isRight());
299         }
300
301         @Test
302         public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() {
303                 Either<AttributeDataDefinition, ResponseFormat> result;
304
305                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
306                 assertTrue(result.isRight());
307         }
308
309         @Test
310         public void testdeleteAttribute_get_RESOURCE_from_DB_failed() {
311                 Either<AttributeDataDefinition, ResponseFormat> result;
312
313                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
314                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
315
316                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
317                 assertTrue(result.isRight());
318         }
319
320         @Test
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());
332         }
333
334         @Test
335         public void testdeleteAttribute_nonexistingresource() {
336                 Either<AttributeDataDefinition, ResponseFormat> result;
337
338
339                 Component resource= new Resource();
340                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
341                 resource.setIsDeleted(false);
342                 resource.setLastUpdaterUserId("USR01");
343
344                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
345
346                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
347                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
348
349                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
350                 assertTrue(result.isRight());
351         }
352
353         @Test
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");
360
361                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
362
363                 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
364                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
365                 when(toscaOperationFacade.deleteAttributeOfResource(any(), any())).thenReturn(StorageOperationStatus.OK);
366
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);
373
374                 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
375                 assertTrue( result.isLeft());
376         }
377
378 }