57af76a1031224896c901e0fa4a018619ef0877b
[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.DataTypeDefinition;
35 import org.openecomp.sdc.be.model.LifecycleStateEnum;
36 import org.openecomp.sdc.be.model.PropertyDefinition;
37 import org.openecomp.sdc.be.model.Resource;
38 import org.openecomp.sdc.be.model.cache.ApplicationDataTypeCache;
39 import org.openecomp.sdc.be.model.jsonjanusgraph.operations.ToscaOperationFacade;
40 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
41 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
42 import org.openecomp.sdc.be.model.operations.impl.PropertyOperation;
43 import org.openecomp.sdc.be.model.tosca.ToscaPropertyType;
44 import org.openecomp.sdc.exception.ResponseFormat;
45
46 import java.lang.reflect.Field;
47 import java.util.ArrayList;
48 import java.util.HashMap;
49 import java.util.List;
50 import java.util.Map;
51
52 import static org.mockito.ArgumentMatchers.any;
53 import static org.mockito.ArgumentMatchers.anyObject;
54 import static org.mockito.Mockito.when;
55
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         UserValidations userValidations  = Mockito.mock(UserValidations.class);
65         ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
66         JanusGraphDao janusGraphDao = Mockito.mock(JanusGraphDao.class);
67         ToscaOperationFacade toscaOperationFacade  = Mockito.mock(ToscaOperationFacade.class);
68         ApplicationDataTypeCache applicationDataTypeCache = Mockito.mock(ApplicationDataTypeCache.class);
69         PropertyOperation propertyOperation = Mockito.mock(PropertyOperation.class);
70         Field baseBusinessLogic;
71         Field baseBusinessLogic1;
72         Field baseBusinessLogic2;
73         Field baseBusinessLogic3;
74         AttributeBusinessLogic attributeBusinessLogic=createTestSubject();
75         IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
76
77
78         @Before
79         public void setup() throws Exception{
80
81                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("graphLockOperation");
82                 baseBusinessLogic.setAccessible(true);
83                 baseBusinessLogic.set(attributeBusinessLogic, igraphLockOperation);
84
85                 baseBusinessLogic1 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("userValidations");
86                 baseBusinessLogic1.setAccessible(true);
87                 baseBusinessLogic1.set(attributeBusinessLogic, userValidations);
88
89                 baseBusinessLogic2 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("componentsUtils");
90                 baseBusinessLogic2.setAccessible(true);
91                 baseBusinessLogic2.set(attributeBusinessLogic, componentsUtils);
92
93                 baseBusinessLogic3 = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("janusGraphDao");
94                 baseBusinessLogic3.setAccessible(true);
95                 baseBusinessLogic3.set(attributeBusinessLogic, janusGraphDao);
96
97                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
98                 baseBusinessLogic.setAccessible(true);
99                 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
100
101                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("applicationDataTypeCache");
102                 baseBusinessLogic.setAccessible(true);
103                 baseBusinessLogic.set(attributeBusinessLogic, applicationDataTypeCache);
104
105                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("propertyOperation");
106                 baseBusinessLogic.setAccessible(true);
107                 baseBusinessLogic.set(attributeBusinessLogic, propertyOperation);
108         }
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<PropertyDefinition, ResponseFormat> result;
118
119                 // default test
120                 testSubject = createTestSubject();
121         }
122
123
124         @Test
125         public void testIsAttributeExist() throws Exception {
126                 AttributeBusinessLogic testSubject;List<PropertyDefinition> attributes = null;
127                 String resourceUid = "";
128                 String propertyName = "";
129                 boolean result;
130
131                 // test 1
132                 testSubject=createTestSubject();attributes = null;
133         }
134
135
136         @Test
137         public void testGetAttribute() throws Exception {
138                 AttributeBusinessLogic testSubject;
139                 String resourceId = "";
140                 String attributeId = "";
141                 String userId = "";
142                 Either<PropertyDefinition, ResponseFormat> result;
143
144                 // default test
145                 testSubject = createTestSubject();
146         }
147
148
149         @Test
150         public void testUpdateAttribute() throws Exception {
151                 AttributeBusinessLogic testSubject;
152                 String resourceId = "";
153                 String attributeId = "";
154                 PropertyDefinition newAttDef = null;
155                 String userId = "";
156                 Either<PropertyDefinition, ResponseFormat> result;
157
158                 // default test
159                 testSubject = createTestSubject();
160         }
161
162
163         @Test
164         public void testDeleteAttribute() throws Exception {
165                 AttributeBusinessLogic testSubject;
166                 String resourceId = "";
167                 String attributeId = "";
168                 String userId = "";
169                 Either<PropertyDefinition, ResponseFormat> result;
170
171                 // default test
172                 testSubject = createTestSubject();
173         }
174
175
176         @Test
177         public void createAttribute_lockfail() throws Exception {
178                 Either<PropertyDefinition, ResponseFormat> response;
179                 PropertyDefinition prop= new PropertyDefinition();
180
181                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
182
183                 Assert.assertEquals(true,response.isRight());
184
185         }
186
187         @Test
188         public void createAttribute_Success() throws Exception {
189
190                 Component resource= new Resource();
191                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
192                 resource.setIsDeleted(false);
193                 resource.setLastUpdaterUserId("USR01");
194
195                 PropertyDefinition prop= new PropertyDefinition();
196                 prop.setType(ToscaPropertyType.STRING.getType());
197
198                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
199
200                 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
201                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
202                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
203                 PropertyDefinition propertyDefinition = new PropertyDefinition();
204                 Either<PropertyDefinition, StorageOperationStatus> either = Either.left(propertyDefinition);
205                 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
206
207                 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
208
209                 Map<String,DataTypeDefinition> data=new HashMap<>();
210                 data.put("ONE",new DataTypeDefinition());
211                 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
212                 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
213
214                 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
215                 Either<PropertyDefinition, ResponseFormat> response;
216
217                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
218
219                 Assert.assertEquals(true,response.isLeft());
220
221         }
222
223         @Test
224         public void createAttribute_failtogettoscaelement() throws Exception {
225
226                 Component resource= new Resource();
227                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
228                 resource.setIsDeleted(false);
229                 resource.setLastUpdaterUserId("USR01");
230
231                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
232
233                 Either<PropertyDefinition, ResponseFormat> response;
234                 PropertyDefinition prop= new PropertyDefinition();
235
236                 baseBusinessLogic = attributeBusinessLogic.getClass().getSuperclass().getDeclaredField("toscaOperationFacade");
237                 baseBusinessLogic.setAccessible(true);
238                 baseBusinessLogic.set(attributeBusinessLogic, toscaOperationFacade);
239                 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
240                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.GENERAL_ERROR);
241                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
242
243                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
244
245                 Assert.assertEquals(true,response.isRight());
246
247         }
248
249         @Test
250         public void createAttribute_componentvalidationfails() throws Exception {
251
252                 Component resource= new Resource();
253                 resource.setLifecycleState(LifecycleStateEnum.CERTIFIED);
254                 resource.setIsDeleted(false);
255                 resource.setLastUpdaterUserId("USR02");
256
257                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
258
259                 Either<PropertyDefinition, ResponseFormat> response;
260                 PropertyDefinition prop= new PropertyDefinition();
261
262                 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
263                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
264                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
265
266                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
267
268                 Assert.assertEquals(true,response.isRight());
269
270         }
271
272         @Test
273         public void createAttribute_componentalreadyexist_fails() throws Exception {
274
275                 Either<PropertyDefinition, ResponseFormat> response;
276                 PropertyDefinition prop= new PropertyDefinition();
277                 prop.setName("RES01");
278                 prop.setParentUniqueId("RES01");
279
280                 List<PropertyDefinition> attributes = new ArrayList<>();
281                 attributes.add(prop);
282
283                 Component resource= new Resource();
284                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
285                 resource.setIsDeleted(false);
286                 resource.setLastUpdaterUserId("USR01");
287                 ((Resource) resource).setAttributes(attributes);
288
289                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
290
291                 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
292                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
293                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
294
295                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
296
297                 Assert.assertEquals(true,response.isRight());
298
299         }
300
301
302         @Test
303         public void createAttribute_addresourcetostoragefails() throws Exception {
304
305                 Component resource= new Resource();
306                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
307                 resource.setIsDeleted(false);
308                 resource.setLastUpdaterUserId("USR01");
309
310                 PropertyDefinition prop= new PropertyDefinition();
311                 prop.setType(ToscaPropertyType.STRING.getType());
312
313                 IGraphLockOperation igraphLockOperation = Mockito.mock(IGraphLockOperation.class);
314                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
315
316                 //Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.INVALID_PROPERTY);
317                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
318                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
319                 PropertyDefinition propertyDefinition = new PropertyDefinition();
320                 Either<PropertyDefinition, StorageOperationStatus> either = Either.right(StorageOperationStatus.CONNECTION_FAILURE);
321                 when(toscaOperationFacade.addAttributeOfResource(anyObject(),anyObject())).thenReturn(either);
322
323                 when(propertyOperation.isPropertyTypeValid(anyObject())).thenReturn(true);
324
325                 Map<String,DataTypeDefinition> data=new HashMap<>();
326                 data.put("ONE",new DataTypeDefinition());
327                 Either<Map<String, DataTypeDefinition>, JanusGraphOperationStatus> allDataTypes = Either.left(data);
328                 when(applicationDataTypeCache.getAll()).thenReturn(allDataTypes);
329
330                 when(propertyOperation.isPropertyDefaultValueValid(anyObject(),anyObject())).thenReturn(true);
331                 Either<PropertyDefinition, ResponseFormat> response;
332
333                 response = attributeBusinessLogic.createAttribute("RES01", prop, "USR01");
334
335                 Assert.assertEquals(true,response.isRight());
336
337         }
338
339         @Test
340         public void testgetAttribute_ATTRIBUTE_NOT_FOUND() throws Exception {
341                 Either<PropertyDefinition, ResponseFormat> result;
342
343                 Component resource= new Resource();
344                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
345                 resource.setIsDeleted(false);
346                 resource.setLastUpdaterUserId("USR01");
347                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
348                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
349
350                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
351                 Assert.assertEquals(true,result.isRight());
352         }
353
354         @Test
355         public void testgetAttribute_success() throws Exception {
356                 Either<PropertyDefinition, ResponseFormat> result;
357
358                 Component resource= new Resource();
359                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
360                 resource.setIsDeleted(false);
361                 resource.setLastUpdaterUserId("USR01");
362
363                 PropertyDefinition prop= new PropertyDefinition();
364                 prop.setUniqueId("ATTR01");
365                 prop.setParentUniqueId("RES01");
366
367                 List<PropertyDefinition> attr = new ArrayList<>();
368                 attr.add(prop);
369
370                 ((Resource) resource).setAttributes(attr);
371                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
372                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
373
374                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
375                 Assert.assertEquals(true,result.isLeft());
376         }
377
378         @Test
379         public void testgetAttribute_RESOURCE_NOT_FOUND() throws Exception {
380                 Either<PropertyDefinition, ResponseFormat> result;
381
382                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.PARENT_RESOURCE_NOT_FOUND);
383                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
384
385                 result=attributeBusinessLogic.getAttribute("RES01","ATTR01", "USR01");
386                 Assert.assertEquals(true,result.isRight());
387         }
388
389         @Test
390         public void testdeleteAttribute_FAILED_TO_LOCK_COMPONENT() throws Exception {
391                 Either<PropertyDefinition, ResponseFormat> result;
392
393                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
394                 Assert.assertEquals(true,result.isRight());
395         }
396
397         @Test
398         public void testdeleteAttribute_get_RESOURCE_from_DB_failed() throws Exception {
399                 Either<PropertyDefinition, ResponseFormat> result;
400
401                 Either<Component, StorageOperationStatus> toscastatus=Either.right(StorageOperationStatus.CONNECTION_FAILURE);
402                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
403
404                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
405                 Assert.assertEquals(true,result.isRight());
406         }
407
408         @Test
409         public void testdeleteAttribute_get_RESOURCE_verification_failed() throws Exception {
410                 Either<PropertyDefinition, ResponseFormat> result;
411
412
413                 Component resource= new Resource();
414                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
415                 resource.setIsDeleted(true);
416                 resource.setLastUpdaterUserId("USR01");
417
418
419                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
420
421
422
423
424                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
425                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
426
427                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
428                 Assert.assertEquals(true,result.isRight());
429         }
430
431         @Test
432         public void testdeleteAttribute_nonexistingresource() throws Exception {
433                 Either<PropertyDefinition, ResponseFormat> result;
434
435
436                 Component resource= new Resource();
437                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
438                 resource.setIsDeleted(false);
439                 resource.setLastUpdaterUserId("USR01");
440
441                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
442
443                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
444                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
445
446                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
447                 Assert.assertEquals(true,result.isRight());
448         }
449
450         @Test
451         public void testdeleteAttribute_success() throws Exception {
452                 Either<PropertyDefinition, ResponseFormat> result;
453
454
455                 Component resource= new Resource();
456                 resource.setLifecycleState(LifecycleStateEnum.NOT_CERTIFIED_CHECKOUT);
457                 resource.setIsDeleted(false);
458                 resource.setLastUpdaterUserId("USR01");
459
460
461                 when(igraphLockOperation.lockComponent(any(),any())).thenReturn(StorageOperationStatus.OK);
462
463                 Either<Component, StorageOperationStatus> toscastatus=Either.left(resource);
464                 when(toscaOperationFacade.getToscaElement("RES01")).thenReturn(toscastatus);
465                 when(toscaOperationFacade.deleteAttributeOfResource(any(),any())).thenReturn(StorageOperationStatus.OK);
466
467                 PropertyDefinition prop= new PropertyDefinition();
468                 prop.setUniqueId("ATTR01");
469                 prop.setParentUniqueId("RES01");
470                 List<PropertyDefinition> attributes = new ArrayList<>();
471                 attributes.add(prop);
472                 ((Resource) resource).setAttributes(attributes);
473
474                 result=attributeBusinessLogic.deleteAttribute("RES01","ATTR01", "USR01");
475                 Assert.assertEquals(true,result.isLeft());
476         }
477
478
479 }