Onboarding upload control
[sdc.git] / openecomp-be / api / openecomp-sdc-rest-webapp / vendor-software-products-rest / vendor-software-products-rest-services / src / test / java / org / openecomp / sdcrests / vsp / rest / services / OrchestrationTemplateCandidateUploadManagerImplTest.java
1 /*
2  * -
3  *  ============LICENSE_START=======================================================
4  *  Copyright (C) 2022 Nordix Foundation.
5  *  ================================================================================
6  *  Licensed under the Apache License, Version 2.0 (the "License");
7  *  you may not use this file except in compliance with the License.
8  *  You may obtain a copy of the License at
9  *
10  *       http://www.apache.org/licenses/LICENSE-2.0
11  *
12  *  Unless required by applicable law or agreed to in writing, software
13  *  distributed under the License is distributed on an "AS IS" BASIS,
14  *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  *  See the License for the specific language governing permissions and
16  *  limitations under the License.
17  *
18  *  SPDX-License-Identifier: Apache-2.0
19  *  ============LICENSE_END=========================================================
20  */
21
22 package org.openecomp.sdcrests.vsp.rest.services;
23
24
25 import static org.junit.jupiter.api.Assertions.assertEquals;
26 import static org.junit.jupiter.api.Assertions.assertFalse;
27 import static org.junit.jupiter.api.Assertions.assertNotNull;
28 import static org.junit.jupiter.api.Assertions.assertThrows;
29 import static org.junit.jupiter.api.Assertions.assertTrue;
30 import static org.mockito.ArgumentMatchers.any;
31 import static org.mockito.Mockito.doThrow;
32 import static org.mockito.Mockito.when;
33
34 import java.util.Date;
35 import java.util.List;
36 import java.util.Optional;
37 import java.util.UUID;
38 import org.junit.jupiter.api.BeforeEach;
39 import org.junit.jupiter.api.Test;
40 import org.mockito.InjectMocks;
41 import org.mockito.Mock;
42 import org.mockito.MockitoAnnotations;
43 import org.openecomp.sdc.common.errors.CoreException;
44 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
45 import org.openecomp.sdc.vendorsoftwareproduct.dao.VspUploadStatusRecordDao;
46 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
47 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspUploadStatus;
48 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspUploadStatusRecord;
49 import org.openecomp.sdc.versioning.dao.types.Version;
50 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspUploadStatusDto;
51 import org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier;
52
53 class OrchestrationTemplateCandidateUploadManagerImplTest {
54
55     @Mock
56     private VspUploadStatusRecordDao vspUploadStatusRecordDao;
57     @Mock
58     private VendorSoftwareProductManager vendorSoftwareProductManager;
59     @InjectMocks
60     private OrchestrationTemplateCandidateUploadManagerImpl packageUploadManagerImpl;
61
62     @BeforeEach
63     void setUp() {
64         MockitoAnnotations.openMocks(this);
65     }
66
67     @Test
68     void startUploadSuccessTest() {
69         //given
70         final String vspId = "vspId";
71         final String vspVersionId = "vspVersionId";
72         final String username = "username";
73         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
74         //when
75         final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username);
76         //then
77         assertEquals(vspId, vspUploadStatusDto.getVspId());
78         assertEquals(vspVersionId, vspUploadStatusDto.getVspVersionId());
79         assertEquals(VspUploadStatus.UPLOADING, vspUploadStatusDto.getStatus());
80         assertFalse(vspUploadStatusDto.isComplete());
81         assertNotNull(vspUploadStatusDto.getLockId());
82         assertNotNull(vspUploadStatusDto.getCreated());
83     }
84
85     @Test
86     void startUpload_uploadAlreadyInProgressTest() {
87         //given
88         final String vspId = "vspId";
89         final String vspVersionId = "vspVersionId";
90         final String username = "username";
91         when(vspUploadStatusRecordDao.findAllInProgress(vspId, vspVersionId)).thenReturn(List.of(new VspUploadStatusRecord()));
92         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
93         //when/then
94         final CoreException actualCoreException =
95             assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
96         final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspUploadAlreadyInProgress(vspId,
97             vspVersionId).get();
98         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
99         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
100     }
101
102     @Test
103     void startUpload_vspNotFoundTest() {
104         //given
105         final String vspId = "vspId";
106         final String vspVersionId = "vspVersionId";
107         final String username = "username";
108         //when/then
109         final CoreException actualCoreException =
110             assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
111         final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspNotFound(vspId, vspVersionId)
112             .get();
113         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
114         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
115     }
116
117     @Test
118     void startUpload_createLockErrorTest() {
119         //given
120         final String vspId = "vspId";
121         final String vspVersionId = "vspVersionId";
122         final String username = "username";
123         //when/then
124         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
125         doThrow(new RuntimeException()).when(vspUploadStatusRecordDao).create(any(VspUploadStatusRecord.class));
126         final CoreException actualCoreException =
127             assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
128         final CoreException expectedCoreException =
129             OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotCreateLock(vspId, vspVersionId, new RuntimeException()).get();
130         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
131         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
132     }
133
134     @Test
135     void finishUploadSuccessTest() {
136         //given
137         final String vspId = "vspId";
138         final String vspVersionId = "vspVersionId";
139         final UUID lockId = UUID.randomUUID();
140         final String username = "username";
141         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
142         vspUploadStatusRecord.setVspId(vspId);
143         vspUploadStatusRecord.setVspVersionId(vspVersionId);
144         vspUploadStatusRecord.setLockId(lockId);
145         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
146         vspUploadStatusRecord.setCreated(new Date());
147         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
148             .thenReturn(Optional.of(vspUploadStatusRecord));
149         //when
150         final VspUploadStatusDto actualVspUploadStatus = packageUploadManagerImpl
151             .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username);
152         //then
153         assertEquals(vspId, actualVspUploadStatus.getVspId());
154         assertEquals(vspVersionId, actualVspUploadStatus.getVspVersionId());
155         assertEquals(VspUploadStatus.SUCCESS, actualVspUploadStatus.getStatus());
156         assertEquals(vspUploadStatusRecord.getLockId(), actualVspUploadStatus.getLockId());
157         assertEquals(vspUploadStatusRecord.getCreated(), actualVspUploadStatus.getCreated());
158         assertNotNull(actualVspUploadStatus.getUpdated());
159         assertTrue(actualVspUploadStatus.isComplete());
160     }
161
162     @Test
163     void finishUploadIllegalStatusTest() {
164         final UUID lockId = UUID.randomUUID();
165         IllegalArgumentException actualException = assertThrows(IllegalArgumentException.class,
166             () -> packageUploadManagerImpl.putUploadAsFinished("vspId", "vspVersionId", lockId, VspUploadStatus.UPLOADING, "username"));
167         IllegalArgumentException expectedException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompleteStatus(
168             VspUploadStatus.UPLOADING).get();
169         assertEquals(expectedException.getMessage(), actualException.getMessage());
170
171         actualException = assertThrows(IllegalArgumentException.class,
172             () -> packageUploadManagerImpl
173                 .putUploadAsFinished("vspId", "vspVersionId", lockId, VspUploadStatus.PROCESSING, "username")
174         );
175         expectedException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompleteStatus(
176             VspUploadStatus.PROCESSING).get();
177         assertEquals(expectedException.getMessage(), actualException.getMessage());
178     }
179
180     @Test
181     void finishUploadCouldNotFindLockTest() {
182         //given
183         final String vspId = "vspId";
184         final String vspVersionId = "vspVersionId";
185         final UUID lockId = UUID.randomUUID();
186         final String username = "username";
187         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
188         vspUploadStatusRecord.setVspId(vspId);
189         vspUploadStatusRecord.setVspVersionId(vspVersionId);
190         vspUploadStatusRecord.setLockId(lockId);
191         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
192         vspUploadStatusRecord.setCreated(new Date());
193         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
194             .thenReturn(Optional.empty());
195         //when/then
196         final CoreException actualException = assertThrows(CoreException.class,
197             () -> packageUploadManagerImpl.putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
198
199         final CoreException expectedException =
200             OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotFindLock(lockId, vspId, vspVersionId).get();
201         assertEquals(expectedException.getMessage(), actualException.getMessage());
202     }
203
204     @Test
205     void finishUpload_uploadAlreadyFinishedTest() {
206         //given
207         final String vspId = "vspId";
208         final String vspVersionId = "vspVersionId";
209         final UUID lockId = UUID.randomUUID();
210         final String username = "username";
211         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
212         vspUploadStatusRecord.setVspId(vspId);
213         vspUploadStatusRecord.setVspVersionId(vspVersionId);
214         vspUploadStatusRecord.setLockId(lockId);
215         vspUploadStatusRecord.setIsComplete(true);
216         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
217             .thenReturn(Optional.of(vspUploadStatusRecord));
218         //when/then
219         final CoreException actualException = assertThrows(CoreException.class, () -> packageUploadManagerImpl
220             .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
221
222         final CoreException expectedException =
223             OrchestrationTemplateCandidateUploadManagerExceptionSupplier.uploadAlreadyFinished(lockId, vspId, vspVersionId).get();
224         assertEquals(expectedException.getMessage(), actualException.getMessage());
225     }
226
227     @Test
228     void finishUploadCouldNotUpdateLockTest() {
229         //given
230         final String vspId = "vspId";
231         final String vspVersionId = "vspVersionId";
232         final UUID lockId = UUID.randomUUID();
233         final String username = "username";
234         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
235         vspUploadStatusRecord.setVspId(vspId);
236         vspUploadStatusRecord.setVspVersionId(vspVersionId);
237         vspUploadStatusRecord.setLockId(lockId);
238         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
239         vspUploadStatusRecord.setCreated(new Date());
240         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
241             .thenReturn(Optional.of(vspUploadStatusRecord));
242         doThrow(new RuntimeException()).when(vspUploadStatusRecordDao).update(vspUploadStatusRecord);
243         //when/then
244         final CoreException actualException = assertThrows(CoreException.class, () -> packageUploadManagerImpl
245             .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
246
247         final CoreException expectedException =
248             OrchestrationTemplateCandidateUploadManagerExceptionSupplier
249                 .couldNotUpdateLock(lockId, vspId, vspVersionId, new RuntimeException()).get();
250         assertEquals(expectedException.getMessage(), actualException.getMessage());
251     }
252
253     @Test
254     void findLatestSuccessTest() {
255         //given
256         final String vspId = "vspId";
257         final String vspVersionId = "vspVersionId";
258         final String username = "username";
259         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
260         final var expectedVspUploadStatus = new VspUploadStatusRecord();
261         expectedVspUploadStatus.setStatus(VspUploadStatus.UPLOADING);
262         expectedVspUploadStatus.setLockId(UUID.randomUUID());
263         expectedVspUploadStatus.setVspId(vspId);
264         expectedVspUploadStatus.setVspVersionId(vspVersionId);
265         expectedVspUploadStatus.setCreated(new Date());
266         expectedVspUploadStatus.setUpdated(new Date());
267         expectedVspUploadStatus.setIsComplete(true);
268         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.of(expectedVspUploadStatus));
269         //when
270         final Optional<VspUploadStatusDto> actualVspUploadStatusDtoOpt = packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username);
271         //then
272         assertTrue(actualVspUploadStatusDtoOpt.isPresent());
273         final VspUploadStatusDto actualVspUploadStatusDto = actualVspUploadStatusDtoOpt.get();
274         assertEquals(expectedVspUploadStatus.getVspId(), actualVspUploadStatusDto.getVspId());
275         assertEquals(expectedVspUploadStatus.getVspVersionId(), actualVspUploadStatusDto.getVspVersionId());
276         assertEquals(expectedVspUploadStatus.getLockId(), actualVspUploadStatusDto.getLockId());
277         assertEquals(expectedVspUploadStatus.getIsComplete(), actualVspUploadStatusDto.isComplete());
278         assertEquals(expectedVspUploadStatus.getCreated(), actualVspUploadStatusDto.getCreated());
279         assertEquals(expectedVspUploadStatus.getUpdated(), actualVspUploadStatusDto.getUpdated());
280         assertEquals(expectedVspUploadStatus.getStatus(), actualVspUploadStatusDto.getStatus());
281     }
282
283     @Test
284     void findLatest_noStatusFoundTest() {
285         //given
286         final String vspId = "vspId";
287         final String vspVersionId = "vspVersionId";
288         final String username = "username";
289         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
290         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.empty());
291         //when
292         final Optional<VspUploadStatusDto> actualVspUploadStatusDtoOpt = packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username);
293         //then
294         assertTrue(actualVspUploadStatusDtoOpt.isEmpty());
295     }
296
297     @Test
298     void findLatest_vspNotFoundTest() {
299         //given
300         final String vspId = "vspId";
301         final String vspVersionId = "vspVersionId";
302         final String username = "username";
303         //when/then
304         final CoreException actualCoreException =
305             assertThrows(CoreException.class, () -> packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username));
306         final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspNotFound(vspId, vspVersionId)
307             .get();
308         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
309         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
310     }
311
312 }