2 * ============LICENSE_START=======================================================
4 * ================================================================================
5 * Copyright (C) 2017 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=========================================================
19 * Modifications copyright (c) 2019 Nokia
20 * ================================================================================
22 package org.openecomp.sdc.be.components.scheduledtasks;
24 import com.google.common.collect.Lists;
25 import fj.data.Either;
26 import org.junit.Before;
27 import org.junit.Test;
28 import org.junit.runner.RunWith;
29 import org.mockito.InjectMocks;
30 import org.mockito.Mock;
31 import org.mockito.Mockito;
32 import org.mockito.junit.MockitoJUnitRunner;
33 import org.openecomp.sdc.be.components.impl.BaseBusinessLogicMock;
34 import org.openecomp.sdc.be.components.impl.ResourceBusinessLogic;
35 import org.openecomp.sdc.be.components.impl.ServiceBusinessLogic;
36 import org.openecomp.sdc.be.datatypes.enums.NodeTypeEnum;
37 import org.openecomp.sdc.be.impl.ComponentsUtils;
38 import org.openecomp.sdc.be.model.operations.api.IGraphLockOperation;
39 import org.openecomp.sdc.be.model.operations.api.StorageOperationStatus;
40 import org.openecomp.sdc.exception.ResponseFormat;
42 import java.util.ArrayList;
43 import java.util.List;
46 import static org.assertj.core.api.AssertionsForClassTypes.assertThat;
47 import static org.mockito.ArgumentMatchers.any;
48 import static org.mockito.ArgumentMatchers.eq;
49 import static org.mockito.Mockito.*;
51 public class ComponentsCleanBusinessLogicTest extends BaseBusinessLogicMock {
53 private ResourceBusinessLogic resourceBusinessLogic = Mockito.mock(ResourceBusinessLogic.class);
54 private ServiceBusinessLogic serviceBusinessLogic = Mockito.mock(ServiceBusinessLogic.class);
55 private IGraphLockOperation graphLockOperation = Mockito.mock(IGraphLockOperation.class);
56 private ComponentsUtils componentsUtils = Mockito.mock(ComponentsUtils.class);
58 private ComponentsCleanBusinessLogic componentsCleanBL = new ComponentsCleanBusinessLogic(elementDao, groupOperation,
59 groupInstanceOperation, groupTypeOperation, interfaceOperation, interfaceLifecycleTypeOperation,
60 resourceBusinessLogic, serviceBusinessLogic, artifactToscaOperation);
64 mockResourceDeleting();
65 mockServiceDeleting();
66 componentsCleanBL.setGraphLockOperation(graphLockOperation);
67 componentsCleanBL.setComponentsUtils(componentsUtils);
71 public void deleteAll() {
72 List<NodeTypeEnum> cleanList = new ArrayList<>();
73 cleanList.add(NodeTypeEnum.Resource);
74 cleanList.add(NodeTypeEnum.Service);
75 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
76 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
77 componentsCleanBL.cleanComponents(cleanList);
78 verify(resourceBusinessLogic).deleteMarkedComponents();
79 verify(serviceBusinessLogic).deleteMarkedComponents();
80 verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
81 eq(NodeTypeEnum.Component));
85 public void deleteResourceWhenOperationAlreadyLocked() {
86 List<NodeTypeEnum> cleanList = new ArrayList<>();
87 cleanList.add(NodeTypeEnum.Resource);
88 componentsCleanBL.cleanComponents(cleanList, true);
89 verify(resourceBusinessLogic).deleteMarkedComponents();
90 verify(graphLockOperation, times(0)).lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any());
91 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
92 eq(NodeTypeEnum.Component));
96 public void deleteResource() {
97 List<NodeTypeEnum> cleanList = new ArrayList<>();
98 cleanList.add(NodeTypeEnum.Resource);
99 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
100 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
101 componentsCleanBL.cleanComponents(cleanList);
102 verify(resourceBusinessLogic).deleteMarkedComponents();
103 verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
104 eq(NodeTypeEnum.Component));
108 public void deleteServiceWhenOperationAlreadyLocked() {
109 List<NodeTypeEnum> cleanList = new ArrayList<>();
110 cleanList.add(NodeTypeEnum.Service);
111 componentsCleanBL.cleanComponents(cleanList, true);
112 verify(serviceBusinessLogic).deleteMarkedComponents();
113 verify(graphLockOperation, times(0)).lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any());
114 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
115 eq(NodeTypeEnum.Component));
120 public void deleteResourceIsNotCalledDueToCleanupLock() {
121 List<NodeTypeEnum> cleanList = new ArrayList<>();
123 cleanList.add(NodeTypeEnum.Resource);
124 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
125 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.FAILED_TO_LOCK_ELEMENT);
126 Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanedComponents = componentsCleanBL.cleanComponents(cleanList);
128 assertThat(cleanedComponents.get(NodeTypeEnum.Resource)).isNotNull();
129 verify(resourceBusinessLogic, times(0)).deleteMarkedComponents();
130 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
131 eq(NodeTypeEnum.Component));
136 public void deleteService() {
137 List<NodeTypeEnum> cleanList = new ArrayList<>();
138 cleanList.add(NodeTypeEnum.Service);
139 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
140 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.OK);
141 componentsCleanBL.cleanComponents(cleanList);
142 verify(serviceBusinessLogic).deleteMarkedComponents();
143 verify(graphLockOperation).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
144 eq(NodeTypeEnum.Component));
148 public void deleteServiceIsNotCalledDueToCleanupLock() {
149 List<NodeTypeEnum> cleanList = new ArrayList<>();
150 cleanList.add(NodeTypeEnum.Service);
151 when(graphLockOperation.lockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER),
152 eq(NodeTypeEnum.Component))).thenReturn(StorageOperationStatus.FAILED_TO_LOCK_ELEMENT);
154 Map<NodeTypeEnum, Either<List<String>, ResponseFormat>> cleanedComponents = componentsCleanBL.cleanComponents(cleanList);
156 assertThat(cleanedComponents.get(NodeTypeEnum.Service)).isNotNull();
157 verify(serviceBusinessLogic, times(0)).deleteMarkedComponents();
158 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
159 eq(NodeTypeEnum.Component));
163 public void deleteWrongElement() {
164 List<NodeTypeEnum> cleanList = new ArrayList<>();
165 cleanList.add(NodeTypeEnum.User);
166 componentsCleanBL.cleanComponents(cleanList);
167 verify(resourceBusinessLogic, times(0)).deleteMarkedComponents();
168 verify(serviceBusinessLogic, times(0)).deleteMarkedComponents();
169 verify(graphLockOperation, times(0)).unlockComponentByName(eq(ComponentsCleanBusinessLogic.DELETE_LOCKER), any(),
170 eq(NodeTypeEnum.Component));
173 private void mockResourceDeleting() {
174 when(resourceBusinessLogic.deleteMarkedComponents()).thenReturn(Either.left(Lists.newArrayList()));
177 private void mockServiceDeleting() {
178 when(serviceBusinessLogic.deleteMarkedComponents()).thenReturn(Either.left(Lists.newArrayList()));