Support for defining attributes on a node_type
[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  * ================================================================================
21  */
22 package org.openecomp.sdc.be.components.impl;
23
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;
46
47 import java.lang.reflect.Field;
48 import java.util.ArrayList;
49 import java.util.HashMap;
50 import java.util.List;
51 import java.util.Map;
52
53 import static org.mockito.ArgumentMatchers.any;
54 import static org.mockito.ArgumentMatchers.anyObject;
55 import static org.mockito.Mockito.when;
56
57 import org.openecomp.sdc.be.model.DataTypeDefinition;
58
59 public class AttributeBusinessLogicTest extends BaseBusinessLogicMock{
60
61         private AttributeBusinessLogic createTestSubject() {
62                 return new AttributeBusinessLogic(elementDao, groupOperation, groupInstanceOperation, groupTypeOperation,
63                         interfaceOperation, interfaceLifecycleTypeOperation, artifactToscaOperation );
64         }
65
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);
78
79         @Before
80         public void setup() throws Exception{
81
82                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
83                 baseBusinessLogic.setAccessible(true);
84                 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
85
86                 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
87                 baseBusinessLogic1.setAccessible(true);
88                 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
89
90                 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
91                 baseBusinessLogic2.setAccessible(true);
92                 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
93
94                 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
95                 baseBusinessLogic3.setAccessible(true);
96                 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
97
98                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
99                 baseBusinessLogic.setAccessible(true);
100                 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
101
102                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
103                 baseBusinessLogic.setAccessible(true);
104                 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
105
106                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
107                 baseBusinessLogic.setAccessible(true);
108                 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
109         }
110
111         @Test
112         public void testCreateAttribute() throws Exception {
113                 AttributeBusinessLogic testSubject;
114                 String resourceId = "";
115                 PropertyDefinition newAttributeDef = null;
116                 String userId = "";
117                 Either<AttributeDataDefinition, ResponseFormat> result;
118
119                 // default test
120                 testSubject = createTestSubject();
121         }
122
123         @Test
124         public void testIsAttributeExist() throws Exception {
125                 AttributeBusinessLogic testSubject;List<AttributeDataDefinition> attributes = null;
126                 String resourceUid = "";
127                 String propertyName = "";
128                 boolean result;
129
130                 // test 1
131                 testSubject=createTestSubject();attributes = null;
132         }
133
134         @Test
135         public void testGetAttribute() throws Exception {
136                 AttributeBusinessLogic testSubject;
137                 String resourceId = "";
138                 String attributeId = "";
139                 String userId = "";
140                 Either<PropertyDefinition, ResponseFormat> result;
141
142                 // default test
143                 testSubject = createTestSubject();
144         }
145
146         @Test
147         public void testUpdateAttribute() throws Exception {
148                 AttributeBusinessLogic testSubject;
149                 String resourceId = "";
150                 String attributeId = "";
151                 PropertyDefinition newAttDef = null;
152                 String userId = "";
153                 Either<PropertyDefinition, ResponseFormat> result;
154
155                 // default test
156                 testSubject = createTestSubject();
157         }
158
159         @Test
160         public void testDeleteAttribute() throws Exception {
161                 AttributeBusinessLogic testSubject;
162                 String resourceId = "";
163                 String attributeId = "";
164                 String userId = "";
165                 Either<PropertyDefinition, ResponseFormat> result;
166
167                 // default test
168                 testSubject = createTestSubject();
169         }
170
171         @Test
172         public void createAttribute_lockfail() throws Exception {
173                 Either<AttributeDataDefinition, ResponseFormat> response;
174                 AttributeDataDefinition prop= new AttributeDataDefinition();
175
176                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
177
178                 Assert.assertEquals(true,response.isRight());
179
180         }
181
182         @Test
183         public void createAttribute_Success() throws Exception {
184
185                 Component resource = new Resource();
186                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
187                 resource.setIsDeleted(false);
188                 resource.setLastUpdaterUserId("USR01");
189
190                 AttributeDefinition attrib = new AttributeDefinition();
191                 attrib.setType(ToscaPropertyType.STRING.getType());
192
193                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
194
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);
201
202                 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
203
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);
208
209                 when(propertyOperation.isPropertyDefaultValueValid(anyObject(), anyObject())).thenReturn(true);
210                 Either<AttributeDataDefinition, ResponseFormat> response;
211
212                 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
213
214                 Assert.assertEquals(true, response.isLeft());
215
216         }
217
218         @Test
219         public void createAttribute_failtogettoscaelement() throws Exception {
220
221                 Component resource= new Resource();
222                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
223                 resource.setIsDeleted(false);
224                 resource.setLastUpdaterUserId("USR01");
225
226                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
227
228                 Either<AttributeDataDefinition, ResponseFormat> response;
229                 AttributeDataDefinition prop= new AttributeDataDefinition();
230
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);
237
238                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
239
240                 Assert.assertEquals(true,response.isRight());
241
242         }
243
244         @Test
245         public void createAttribute_componentvalidationfails() throws Exception {
246
247                 Component resource= new Resource();
248                 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
249                 resource.setIsDeleted(false);
250                 resource.setLastUpdaterUserId("USR02");
251
252                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
253
254                 Either<AttributeDataDefinition, ResponseFormat> response;
255                 AttributeDataDefinition prop= new AttributeDataDefinition();
256
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);
260
261                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
262
263                 Assert.assertEquals(true,response.isRight());
264
265         }
266
267         @Test
268         public void createAttribute_componentalreadyexist_fails() throws Exception {
269
270                 Either<AttributeDataDefinition, ResponseFormat> response;
271                 AttributeDefinition attrib = new AttributeDefinition();
272                 attrib.setName("RES01");
273                 attrib.setParentUniqueId("RES01");
274
275                 List<AttributeDataDefinition> attributes = new ArrayList<>();
276                 attributes.add(attrib);
277
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);
283
284                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
285
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);
289
290                 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
291
292                 Assert.assertEquals(true, response.isRight());
293
294         }
295
296         @Test
297         public void createAttribute_addresourcetostoragefails() throws Exception {
298
299                 Component resource = new Resource();
300                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
301                 resource.setIsDeleted(false);
302                 resource.setLastUpdaterUserId("USR01");
303
304                 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
305                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
306
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);
314
315                 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
316
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);
321
322                 when(propertyOperation.isPropertyDefaultValueValid(anyObject(), anyObject())).thenReturn(true);
323                 Either<AttributeDataDefinition, ResponseFormat> response;
324
325                 AttributeDataDefinition attrib = new AttributeDefinition();
326                 response = attributeBusinessLogic.createAttribute("RES01", attrib, "USR01");
327
328                 Assert.assertEquals(true, response.isRight());
329
330         }
331
332         @Test
333         public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
334                 Either<AttributeDataDefinition, ResponseFormat> result;
335
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);
342
343                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
344                 Assert.assertEquals(true,result.isRight());
345         }
346
347         @Test
348         public void testgetAttribute_success() throws Exception {
349                 Either<AttributeDataDefinition, ResponseFormat> result;
350
351                 Component resource = new Resource();
352                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
353                 resource.setIsDeleted(false);
354                 resource.setLastUpdaterUserId("USR01");
355
356                 AttributeDefinition attrib = new AttributeDefinition();
357                 attrib.setUniqueId("ATTR01");
358                 attrib.setParentUniqueId("RES01");
359
360                 List<AttributeDataDefinition> attr = new ArrayList<>();
361                 attr.add(attrib);
362
363                 ((Resource) resource).setAttributes(attr);
364                 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
365                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
366
367                 result = attributeBusinessLogic.getAttribute("RES01", "ATTR01", "USR01");
368                 Assert.assertEquals(true, result.isLeft());
369         }
370
371         @Test
372         public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
373                 Either<AttributeDataDefinition, ResponseFormat> result;
374
375                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
376                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
377
378                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
379                 Assert.assertEquals(true,result.isRight());
380         }
381
382         @Test
383         public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
384                 Either<AttributeDataDefinition, ResponseFormat> result;
385
386                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
387                 Assert.assertEquals(true,result.isRight());
388         }
389
390         @Test
391         public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
392                 Either<AttributeDataDefinition, ResponseFormat> result;
393
394                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
395                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
396
397                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
398                 Assert.assertEquals(true,result.isRight());
399         }
400
401         @Test
402         public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
403                 Either<AttributeDataDefinition, ResponseFormat> result;
404
405
406                 Component resource= new Resource();
407                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
408                 resource.setIsDeleted(true);
409                 resource.setLastUpdaterUserId("USR01");
410
411
412                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
413
414
415
416
417                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
418                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
419
420                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
421                 Assert.assertEquals(true,result.isRight());
422         }
423
424         @Test
425         public void testdeleteAttribute_nonexistingresource() throws Exception {
426                 Either<AttributeDataDefinition, ResponseFormat> result;
427
428
429                 Component resource= new Resource();
430                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
431                 resource.setIsDeleted(false);
432                 resource.setLastUpdaterUserId("USR01");
433
434                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
435
436                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
437                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
438
439                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
440                 Assert.assertEquals(true,result.isRight());
441         }
442
443         @Test
444         public void testdeleteAttribute_success() throws Exception {
445                 Either<AttributeDataDefinition, ResponseFormat> result;
446
447
448                 Component resource= new Resource();
449                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
450                 resource.setIsDeleted(false);
451                 resource.setLastUpdaterUserId("USR01");
452
453                 when(igraphLockOperation.lockComponent(any(), any())).thenReturn(StorageOperationStatus.OK);
454
455                 Either<Component, StorageOperationStatus> toscastatus = Either.left(resource);
456                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
457                 when(toscaOperationFacade.deleteAttributeOfResource(any(), any())).thenReturn(StorageOperationStatus.OK);
458
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);
465
466                 result = attributeBusinessLogic.deleteAttribute("RES01", "ATTR01", "USR01");
467                 Assert.assertEquals(true, result.isLeft());
468         }
469
470 }