re base code
[sdc.git] / catalog-be / src / test / java / org / openecomp / sdc / be / components / scheduledtasks / ComponentsCleanBusinessLogicTest.java
1 package org.openecomp.sdc.be.components.scheduledtasks;
2
3 import com.google.common.collect.Lists;
4 import fj.data.Either;
5 import org.junit.Before;
6 import org.junit.Test;
7 import org.junit.runner.RunWith;
8 import org.mockito.InjectMocks;
9 import org.mockito.Mock;
10 import org.mockito.junit.MockitoJUnitRunner;
11 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
12 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
13 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
14 import org.openecomp.sdc.be.impl.ComponentsUtils;
15 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
16 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
17 import org.openecomp.sdc.exception.ResponseFormat;
18
19 import java.util.ArrayList;
20 import java.util.List;
21 import java.util.Map;
22
23 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
24 import static org.mockito.ArgumentMatchers.any;
25 import static org.mockito.ArgumentMatchers.eq;
26 import static org.mockito.Mockito.*;
27
28 @RunWith(MockitoJUnitRunner.class)
29 public class ComponentsCleanBusinessLogicTest {
30
31     @Mock
32     private ResourceBusinessLogic resourceBusinessLogic;
33     @Mock
34     private ServiceBusinessLogic serviceBusinessLogic;
35     @Mock
36     private IGraphLockOperation graphLockOperation;
37     @Mock
38     private ComponentsUtils componentsUtils;
39
40     @InjectMocks
41     private ComponentsCleanBusinessLogic componentsCleanBL = new ComponentsCleanBusinessLogic();
42
43     @Before
44     public void setUp() {
45         mockResourceDeleting();
46         mockServiceDeleting();
47     }
48
49     @Test
50     public void deleteAll() {
51         List<NodeTypeEnum> cleanList = new ArrayList<>();
52         cleanList.add(NodeTypeEnum.Resource);
53         cleanList.add(NodeTypeEnum.Service);
54         when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
55                 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
56         componentsCleanBL.cleanComponents(cleanList);
57         verify(resourceBusinessLogic).deleteMarkedComponents();
58         verify(serviceBusinessLogic).deleteMarkedComponents();
59         verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
60                 eq(NodeTypeEnum.Component));
61     }
62
63     @Test
64     public void deleteResourceWhenOperationAlreadyLocked() {
65         List<NodeTypeEnum> cleanList = new ArrayList<>();
66         cleanList.add(NodeTypeEnum.Resource);
67         componentsCleanBL.cleanComponents(cleanList, true);
68         verify(resourceBusinessLogic).deleteMarkedComponents();
69         verify(graphLockOperation, times(0)).lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any());
70         verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
71                 eq(NodeTypeEnum.Component));
72     }
73
74     @Test
75     public void deleteResource() {
76         List<NodeTypeEnum> cleanList = new ArrayList<>();
77         cleanList.add(NodeTypeEnum.Resource);
78         when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
79                 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
80         componentsCleanBL.cleanComponents(cleanList);
81         verify(resourceBusinessLogic).deleteMarkedComponents();
82         verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
83                 eq(NodeTypeEnum.Component));
84     }
85
86     @Test
87     public void deleteServiceWhenOperationAlreadyLocked() {
88         List<NodeTypeEnum> cleanList = new ArrayList<>();
89         cleanList.add(NodeTypeEnum.Service);
90         componentsCleanBL.cleanComponents(cleanList, true);
91         verify(serviceBusinessLogic).deleteMarkedComponents();
92         verify(graphLockOperation, times(0)).lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any());
93         verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
94                 eq(NodeTypeEnum.Component));
95     }
96
97
98     @Test
99     public void deleteResourceIsNotCalledDueToCleanupLock() {
100         List<NodeTypeEnum> cleanList = new ArrayList<>();
101
102         cleanList.add(NodeTypeEnum.Resource);
103         when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
104                 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.FAILED_TO_LOCK_ELEMENT);
105         Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanedComponents = componentsCleanBL.cleanComponents(cleanList);
106
107         assertThat(cleanedComponents.get(NodeTypeEnum.Resource)).isNotNull();
108         verify(resourceBusinessLogic, times(0)).deleteMarkedComponents();
109         verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
110                 eq(NodeTypeEnum.Component));
111     }
112
113
114     @Test
115     public void deleteService() {
116         List<NodeTypeEnum> cleanList = new ArrayList<>();
117         cleanList.add(NodeTypeEnum.Service);
118         when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
119                 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
120         componentsCleanBL.cleanComponents(cleanList);
121         verify(serviceBusinessLogic).deleteMarkedComponents();
122         verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
123                 eq(NodeTypeEnum.Component));
124     }
125
126     @Test
127     public void deleteServiceIsNotCalledDueToCleanupLock() {
128         List<NodeTypeEnum> cleanList = new ArrayList<>();
129         cleanList.add(NodeTypeEnum.Service);
130         when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
131                 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.FAILED_TO_LOCK_ELEMENT);
132
133         Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanedComponents = componentsCleanBL.cleanComponents(cleanList);
134
135         assertThat(cleanedComponents.get(NodeTypeEnum.Service)).isNotNull();
136         verify(serviceBusinessLogic, times(0)).deleteMarkedComponents();
137         verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
138                 eq(NodeTypeEnum.Component));
139     }
140
141     @Test
142     public void deleteWrongElement() {
143         List<NodeTypeEnum> cleanList = new ArrayList<>();
144         cleanList.add(NodeTypeEnum.User);
145         componentsCleanBL.cleanComponents(cleanList);
146         verify(resourceBusinessLogic, times(0)).deleteMarkedComponents();
147         verify(serviceBusinessLogic, times(0)).deleteMarkedComponents();
148         verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
149                 eq(NodeTypeEnum.Component));
150     }
151
152     private void mockResourceDeleting() {
153         when(resourceBusinessLogic.deleteMarkedComponents()).thenReturn(Either.left(Lists.newArrayList()));
154     }
155
156     private void mockServiceDeleting() {
157         when(serviceBusinessLogic.deleteMarkedComponents()).thenReturn(Either.left(Lists.newArrayList()));
158     }
159
160 }
161