2 * ============LICENSE_START=======================================================
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
11 * http://www.apache.org/licenses/LICENSE-2.0
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=========================================================
21 package org.openecomp.sdc.be.components.scheduledtasks;
23 import com.google.common.collect.Lists;
24 import fj.data.Either;
25 import org.junit.Before;
26 import org.junit.Test;
27 import org.junit.runner.RunWith;
28 import org.mockito.InjectMocks;
29 import org.mockito.Mock;
30 import org.mockito.junit.MockitoJUnitRunner;
31 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
32 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
33 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
34 import org.openecomp.sdc.be.impl.ComponentsUtils;
35 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
36 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
37 import org.openecomp.sdc.exception.ResponseFormat;
39 import java.util.ArrayList;
40 import java.util.List;
43 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
44 import static org.mockito.ArgumentMatchers.any;
45 import static org.mockito.ArgumentMatchers.eq;
46 import static org.mockito.Mockito.*;
48 @RunWith(MockitoJUnitRunner.class)
49 public class ComponentsCleanBusinessLogicTest {
52 private ResourceBusinessLogic resourceBusinessLogic;
54 private ServiceBusinessLogic serviceBusinessLogic;
56 private IGraphLockOperation graphLockOperation;
58 private ComponentsUtils componentsUtils;
61 private ComponentsCleanBusinessLogic componentsCleanBL = new ComponentsCleanBusinessLogic();
65 mockResourceDeleting();
66 mockServiceDeleting();
70 public void deleteAll() {
71 List<NodeTypeEnum> cleanList = new ArrayList<>();
72 cleanList.add(NodeTypeEnum.Resource);
73 cleanList.add(NodeTypeEnum.Service);
74 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
75 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
76 componentsCleanBL.cleanComponents(cleanList);
77 verify(resourceBusinessLogic).deleteMarkedComponents();
78 verify(serviceBusinessLogic).deleteMarkedComponents();
79 verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
80 eq(NodeTypeEnum.Component));
84 public void deleteResourceWhenOperationAlreadyLocked() {
85 List<NodeTypeEnum> cleanList = new ArrayList<>();
86 cleanList.add(NodeTypeEnum.Resource);
87 componentsCleanBL.cleanComponents(cleanList, true);
88 verify(resourceBusinessLogic).deleteMarkedComponents();
89 verify(graphLockOperation, times(0)).lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any());
90 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
91 eq(NodeTypeEnum.Component));
95 public void deleteResource() {
96 List<NodeTypeEnum> cleanList = new ArrayList<>();
97 cleanList.add(NodeTypeEnum.Resource);
98 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
99 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
100 componentsCleanBL.cleanComponents(cleanList);
101 verify(resourceBusinessLogic).deleteMarkedComponents();
102 verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
103 eq(NodeTypeEnum.Component));
107 public void deleteServiceWhenOperationAlreadyLocked() {
108 List<NodeTypeEnum> cleanList = new ArrayList<>();
109 cleanList.add(NodeTypeEnum.Service);
110 componentsCleanBL.cleanComponents(cleanList, true);
111 verify(serviceBusinessLogic).deleteMarkedComponents();
112 verify(graphLockOperation, times(0)).lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any());
113 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
114 eq(NodeTypeEnum.Component));
119 public void deleteResourceIsNotCalledDueToCleanupLock() {
120 List<NodeTypeEnum> cleanList = new ArrayList<>();
122 cleanList.add(NodeTypeEnum.Resource);
123 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
124 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.FAILED_TO_LOCK_ELEMENT);
125 Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanedComponents = componentsCleanBL.cleanComponents(cleanList);
127 assertThat(cleanedComponents.get(NodeTypeEnum.Resource)).isNotNull();
128 verify(resourceBusinessLogic, times(0)).deleteMarkedComponents();
129 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
130 eq(NodeTypeEnum.Component));
135 public void deleteService() {
136 List<NodeTypeEnum> cleanList = new ArrayList<>();
137 cleanList.add(NodeTypeEnum.Service);
138 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
139 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
140 componentsCleanBL.cleanComponents(cleanList);
141 verify(serviceBusinessLogic).deleteMarkedComponents();
142 verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
143 eq(NodeTypeEnum.Component));
147 public void deleteServiceIsNotCalledDueToCleanupLock() {
148 List<NodeTypeEnum> cleanList = new ArrayList<>();
149 cleanList.add(NodeTypeEnum.Service);
150 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
151 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.FAILED_TO_LOCK_ELEMENT);
153 Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanedComponents = componentsCleanBL.cleanComponents(cleanList);
155 assertThat(cleanedComponents.get(NodeTypeEnum.Service)).isNotNull();
156 verify(serviceBusinessLogic, times(0)).deleteMarkedComponents();
157 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
158 eq(NodeTypeEnum.Component));
162 public void deleteWrongElement() {
163 List<NodeTypeEnum> cleanList = new ArrayList<>();
164 cleanList.add(NodeTypeEnum.User);
165 componentsCleanBL.cleanComponents(cleanList);
166 verify(resourceBusinessLogic, times(0)).deleteMarkedComponents();
167 verify(serviceBusinessLogic, times(0)).deleteMarkedComponents();
168 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
169 eq(NodeTypeEnum.Component));
172 private void mockResourceDeleting() {
173 when(resourceBusinessLogic.deleteMarkedComponents()).thenReturn(Either.left(Lists.newArrayList()));
176 private void mockServiceDeleting() {
177 when(serviceBusinessLogic.deleteMarkedComponents()).thenReturn(Either.left(Lists.newArrayList()));