Update onboarding upload status during processing
[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.assertNotEquals;
28 import static org.junit.jupiter.api.Assertions.assertNotNull;
29 import static org.junit.jupiter.api.Assertions.assertThrows;
30 import static org.junit.jupiter.api.Assertions.assertTrue;
31 import static org.mockito.ArgumentMatchers.any;
32 import static org.mockito.Mockito.doThrow;
33 import static org.mockito.Mockito.when;
34 import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.alreadyInStatusBeingUpdated;
35 import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotFindStatus;
36 import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotUpdateStatus;
37
38 import java.text.ParseException;
39 import java.text.SimpleDateFormat;
40 import java.util.Date;
41 import java.util.List;
42 import java.util.Optional;
43 import java.util.UUID;
44 import org.junit.jupiter.api.BeforeEach;
45 import org.junit.jupiter.api.Test;
46 import org.mockito.InjectMocks;
47 import org.mockito.Mock;
48 import org.mockito.MockitoAnnotations;
49 import org.openecomp.sdc.common.errors.CoreException;
50 import org.openecomp.sdc.vendorsoftwareproduct.VendorSoftwareProductManager;
51 import org.openecomp.sdc.vendorsoftwareproduct.dao.VspUploadStatusRecordDao;
52 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspDetails;
53 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspUploadStatus;
54 import org.openecomp.sdc.vendorsoftwareproduct.dao.type.VspUploadStatusRecord;
55 import org.openecomp.sdc.versioning.dao.types.Version;
56 import org.openecomp.sdcrests.vendorsoftwareproducts.types.VspUploadStatusDto;
57 import org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier;
58
59 class OrchestrationTemplateCandidateUploadManagerImplTest {
60
61     @Mock
62     private VspUploadStatusRecordDao vspUploadStatusRecordDao;
63     @Mock
64     private VendorSoftwareProductManager vendorSoftwareProductManager;
65     @InjectMocks
66     private OrchestrationTemplateCandidateUploadManagerImpl packageUploadManagerImpl;
67
68     @BeforeEach
69     void setUp() {
70         MockitoAnnotations.openMocks(this);
71     }
72
73     @Test
74     void startUploadSuccessTest() {
75         //given
76         final String vspId = "vspId";
77         final String vspVersionId = "vspVersionId";
78         final String username = "username";
79         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
80         //when
81         final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username);
82         //then
83         assertEquals(vspId, vspUploadStatusDto.getVspId());
84         assertEquals(vspVersionId, vspUploadStatusDto.getVspVersionId());
85         assertEquals(VspUploadStatus.UPLOADING, vspUploadStatusDto.getStatus());
86         assertFalse(vspUploadStatusDto.isComplete());
87         assertNotNull(vspUploadStatusDto.getLockId());
88         assertNotNull(vspUploadStatusDto.getCreated());
89     }
90
91     @Test
92     void startUpload_uploadAlreadyInProgressTest() {
93         //given
94         final String vspId = "vspId";
95         final String vspVersionId = "vspVersionId";
96         final String username = "username";
97         when(vspUploadStatusRecordDao.findAllInProgress(vspId, vspVersionId)).thenReturn(List.of(new VspUploadStatusRecord()));
98         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
99         //when/then
100         final CoreException actualCoreException =
101             assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
102         final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspUploadAlreadyInProgress(vspId,
103             vspVersionId).get();
104         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
105         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
106     }
107
108     @Test
109     void startUpload_vspNotFoundTest() {
110         //given
111         final String vspId = "vspId";
112         final String vspVersionId = "vspVersionId";
113         final String username = "username";
114         //when/then
115         final CoreException actualCoreException =
116             assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
117         final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspNotFound(vspId, vspVersionId)
118             .get();
119         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
120         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
121     }
122
123     @Test
124     void startUpload_createLockErrorTest() {
125         //given
126         final String vspId = "vspId";
127         final String vspVersionId = "vspVersionId";
128         final String username = "username";
129         //when/then
130         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
131         doThrow(new RuntimeException()).when(vspUploadStatusRecordDao).create(any(VspUploadStatusRecord.class));
132         final CoreException actualCoreException =
133             assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
134         final CoreException expectedCoreException =
135             OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotCreateLock(vspId, vspVersionId, new RuntimeException()).get();
136         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
137         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
138     }
139
140     @Test
141     void finishUploadSuccessTest() {
142         //given
143         final String vspId = "vspId";
144         final String vspVersionId = "vspVersionId";
145         final UUID lockId = UUID.randomUUID();
146         final String username = "username";
147         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
148         vspUploadStatusRecord.setVspId(vspId);
149         vspUploadStatusRecord.setVspVersionId(vspVersionId);
150         vspUploadStatusRecord.setLockId(lockId);
151         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
152         vspUploadStatusRecord.setCreated(new Date());
153         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
154             .thenReturn(Optional.of(vspUploadStatusRecord));
155         //when
156         final VspUploadStatusDto actualVspUploadStatus = packageUploadManagerImpl
157             .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username);
158         //then
159         assertEquals(vspId, actualVspUploadStatus.getVspId());
160         assertEquals(vspVersionId, actualVspUploadStatus.getVspVersionId());
161         assertEquals(VspUploadStatus.SUCCESS, actualVspUploadStatus.getStatus());
162         assertEquals(vspUploadStatusRecord.getLockId(), actualVspUploadStatus.getLockId());
163         assertEquals(vspUploadStatusRecord.getCreated(), actualVspUploadStatus.getCreated());
164         assertNotNull(actualVspUploadStatus.getUpdated());
165         assertTrue(actualVspUploadStatus.isComplete());
166     }
167
168     @Test
169     void finishUploadIllegalStatusTest() {
170         final UUID lockId = UUID.randomUUID();
171         IllegalArgumentException actualException = assertThrows(IllegalArgumentException.class,
172             () -> packageUploadManagerImpl.putUploadAsFinished("vspId", "vspVersionId", lockId, VspUploadStatus.UPLOADING, "username"));
173         IllegalArgumentException expectedException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompleteStatus(
174             VspUploadStatus.UPLOADING).get();
175         assertEquals(expectedException.getMessage(), actualException.getMessage());
176
177         actualException = assertThrows(IllegalArgumentException.class,
178             () -> packageUploadManagerImpl
179                 .putUploadAsFinished("vspId", "vspVersionId", lockId, VspUploadStatus.PROCESSING, "username")
180         );
181         expectedException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompleteStatus(
182             VspUploadStatus.PROCESSING).get();
183         assertEquals(expectedException.getMessage(), actualException.getMessage());
184     }
185
186     @Test
187     void finishUploadCouldNotFindLockTest() {
188         //given
189         final String vspId = "vspId";
190         final String vspVersionId = "vspVersionId";
191         final UUID lockId = UUID.randomUUID();
192         final String username = "username";
193         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
194         vspUploadStatusRecord.setVspId(vspId);
195         vspUploadStatusRecord.setVspVersionId(vspVersionId);
196         vspUploadStatusRecord.setLockId(lockId);
197         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
198         vspUploadStatusRecord.setCreated(new Date());
199         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
200             .thenReturn(Optional.empty());
201         //when/then
202         final CoreException actualException = assertThrows(CoreException.class,
203             () -> packageUploadManagerImpl.putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
204
205         final CoreException expectedException =
206             OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotFindLock(lockId, vspId, vspVersionId).get();
207         assertEquals(expectedException.getMessage(), actualException.getMessage());
208     }
209
210     @Test
211     void finishUpload_uploadAlreadyFinishedTest() {
212         //given
213         final String vspId = "vspId";
214         final String vspVersionId = "vspVersionId";
215         final UUID lockId = UUID.randomUUID();
216         final String username = "username";
217         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
218         vspUploadStatusRecord.setVspId(vspId);
219         vspUploadStatusRecord.setVspVersionId(vspVersionId);
220         vspUploadStatusRecord.setLockId(lockId);
221         vspUploadStatusRecord.setIsComplete(true);
222         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
223             .thenReturn(Optional.of(vspUploadStatusRecord));
224         //when/then
225         final CoreException actualException = assertThrows(CoreException.class, () -> packageUploadManagerImpl
226             .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
227
228         final CoreException expectedException =
229             OrchestrationTemplateCandidateUploadManagerExceptionSupplier.uploadAlreadyFinished(lockId, vspId, vspVersionId).get();
230         assertEquals(expectedException.getMessage(), actualException.getMessage());
231     }
232
233     @Test
234     void finishUploadCouldNotUpdateLockTest() {
235         //given
236         final String vspId = "vspId";
237         final String vspVersionId = "vspVersionId";
238         final UUID lockId = UUID.randomUUID();
239         final String username = "username";
240         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
241         vspUploadStatusRecord.setVspId(vspId);
242         vspUploadStatusRecord.setVspVersionId(vspVersionId);
243         vspUploadStatusRecord.setLockId(lockId);
244         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
245         vspUploadStatusRecord.setCreated(new Date());
246         when(vspUploadStatusRecordDao.findByVspIdAndVersionIdAndLockId(vspId, vspVersionId, lockId))
247             .thenReturn(Optional.of(vspUploadStatusRecord));
248         doThrow(new RuntimeException()).when(vspUploadStatusRecordDao).update(vspUploadStatusRecord);
249         //when/then
250         final CoreException actualException = assertThrows(CoreException.class, () -> packageUploadManagerImpl
251             .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
252
253         final CoreException expectedException =
254             OrchestrationTemplateCandidateUploadManagerExceptionSupplier
255                 .couldNotUpdateLock(lockId, vspId, vspVersionId, new RuntimeException()).get();
256         assertEquals(expectedException.getMessage(), actualException.getMessage());
257     }
258
259     @Test
260     void findLatestSuccessTest() {
261         //given
262         final String vspId = "vspId";
263         final String vspVersionId = "vspVersionId";
264         final String username = "username";
265         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
266         final var expectedVspUploadStatus = new VspUploadStatusRecord();
267         expectedVspUploadStatus.setStatus(VspUploadStatus.UPLOADING);
268         expectedVspUploadStatus.setLockId(UUID.randomUUID());
269         expectedVspUploadStatus.setVspId(vspId);
270         expectedVspUploadStatus.setVspVersionId(vspVersionId);
271         expectedVspUploadStatus.setCreated(new Date());
272         expectedVspUploadStatus.setUpdated(new Date());
273         expectedVspUploadStatus.setIsComplete(true);
274         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.of(expectedVspUploadStatus));
275         //when
276         final Optional<VspUploadStatusDto> actualVspUploadStatusDtoOpt = packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username);
277         //then
278         assertTrue(actualVspUploadStatusDtoOpt.isPresent());
279         final VspUploadStatusDto actualVspUploadStatusDto = actualVspUploadStatusDtoOpt.get();
280         assertEquals(expectedVspUploadStatus.getVspId(), actualVspUploadStatusDto.getVspId());
281         assertEquals(expectedVspUploadStatus.getVspVersionId(), actualVspUploadStatusDto.getVspVersionId());
282         assertEquals(expectedVspUploadStatus.getLockId(), actualVspUploadStatusDto.getLockId());
283         assertEquals(expectedVspUploadStatus.getIsComplete(), actualVspUploadStatusDto.isComplete());
284         assertEquals(expectedVspUploadStatus.getCreated(), actualVspUploadStatusDto.getCreated());
285         assertEquals(expectedVspUploadStatus.getUpdated(), actualVspUploadStatusDto.getUpdated());
286         assertEquals(expectedVspUploadStatus.getStatus(), actualVspUploadStatusDto.getStatus());
287     }
288
289     @Test
290     void findLatest_noStatusFoundTest() {
291         //given
292         final String vspId = "vspId";
293         final String vspVersionId = "vspVersionId";
294         final String username = "username";
295         when(vendorSoftwareProductManager.getVsp(vspId, new Version(vspVersionId))).thenReturn(new VspDetails());
296         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.empty());
297         //when
298         final Optional<VspUploadStatusDto> actualVspUploadStatusDtoOpt = packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username);
299         //then
300         assertTrue(actualVspUploadStatusDtoOpt.isEmpty());
301     }
302
303     @Test
304     void findLatest_vspNotFoundTest() {
305         //given
306         final String vspId = "vspId";
307         final String vspVersionId = "vspVersionId";
308         final String username = "username";
309         //when/then
310         final CoreException actualCoreException =
311             assertThrows(CoreException.class, () -> packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username));
312         final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspNotFound(vspId, vspVersionId)
313             .get();
314         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
315         assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
316     }
317
318     @Test
319     void startValidationSuccessTest() throws ParseException {
320         //given
321         final String vspId = "vspId";
322         final String vspVersionId = "vspVersionId";
323         final UUID lockId = UUID.randomUUID();
324         final String username = "username";
325         final Date created = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/1900");
326         final Date updated = new SimpleDateFormat("dd/MM/yyyy").parse("02/01/1900");
327         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
328         vspUploadStatusRecord.setVspId(vspId);
329         vspUploadStatusRecord.setVspVersionId(vspVersionId);
330         vspUploadStatusRecord.setLockId(lockId);
331         vspUploadStatusRecord.setCreated(created);
332         vspUploadStatusRecord.setUpdated(updated);
333         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
334         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.of(vspUploadStatusRecord));
335         //when
336         final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInValidation(vspId, vspVersionId, username);
337         //then
338         assertEquals(VspUploadStatus.VALIDATING, vspUploadStatusDto.getStatus());
339         assertNotEquals(updated, vspUploadStatusDto.getUpdated());
340         assertEquals(vspId, vspUploadStatusDto.getVspId());
341         assertEquals(vspVersionId, vspUploadStatusDto.getVspVersionId());
342         assertEquals(lockId, vspUploadStatusDto.getLockId());
343         assertEquals(created, vspUploadStatusDto.getCreated());
344         assertFalse(vspUploadStatusDto.isComplete());
345     }
346
347     @Test
348     void startProcessingSuccessTest() throws ParseException {
349         //given
350         final String vspId = "vspId";
351         final String vspVersionId = "vspVersionId";
352         final UUID lockId = UUID.randomUUID();
353         final String username = "username";
354         final Date created = new SimpleDateFormat("dd/MM/yyyy").parse("01/01/1900");
355         final Date updated = new SimpleDateFormat("dd/MM/yyyy").parse("02/01/1900");
356         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
357         vspUploadStatusRecord.setVspId(vspId);
358         vspUploadStatusRecord.setVspVersionId(vspVersionId);
359         vspUploadStatusRecord.setLockId(lockId);
360         vspUploadStatusRecord.setCreated(created);
361         vspUploadStatusRecord.setUpdated(updated);
362         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
363         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.of(vspUploadStatusRecord));
364         //when
365         final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, username);
366         //then
367         assertEquals(VspUploadStatus.PROCESSING, vspUploadStatusDto.getStatus());
368         assertNotEquals(updated, vspUploadStatusDto.getUpdated());
369         assertEquals(vspId, vspUploadStatusDto.getVspId());
370         assertEquals(vspVersionId, vspUploadStatusDto.getVspVersionId());
371         assertEquals(lockId, vspUploadStatusDto.getLockId());
372         assertEquals(created, vspUploadStatusDto.getCreated());
373         assertFalse(vspUploadStatusDto.isComplete());
374     }
375
376
377     @Test
378     void startProcessing_statusNotFoundTest() {
379         //given
380         final String vspId = "vspId";
381         final String vspVersionId = "vspVersionId";
382         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.empty());
383         //when/then
384         final CoreException actualCoreException = assertThrows(CoreException.class,
385             () -> packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, "username"));
386
387         final CoreException expectedCoreException = couldNotFindStatus(vspId, vspVersionId).get();
388         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
389         assertEquals(expectedCoreException.getMessage(), actualCoreException.getMessage());
390     }
391
392     @Test
393     void startProcessing_alreadyInGivenStatusTest() {
394         //given
395         final String vspId = "vspId";
396         final String vspVersionId = "vspVersionId";
397         final VspUploadStatus processingStatus = VspUploadStatus.PROCESSING;
398         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
399         vspUploadStatusRecord.setStatus(processingStatus);
400         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.of(vspUploadStatusRecord));
401
402         //when/then
403         final CoreException actualCoreException = assertThrows(CoreException.class,
404             () -> packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, "username"));
405
406         final CoreException expectedCoreException = alreadyInStatusBeingUpdated(vspId, vspVersionId, processingStatus).get();
407         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
408         assertEquals(expectedCoreException.getMessage(), actualCoreException.getMessage());
409     }
410
411     @Test
412     void updateStatus_couldNotUpdateTest() {
413         //given
414         final String vspId = "vspId";
415         final String vspVersionId = "vspVersionId";
416         final VspUploadStatusRecord vspUploadStatusRecord = new VspUploadStatusRecord();
417         vspUploadStatusRecord.setVspId(vspId);
418         vspUploadStatusRecord.setVspVersionId(vspVersionId);
419         vspUploadStatusRecord.setStatus(VspUploadStatus.UPLOADING);
420         when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.of(vspUploadStatusRecord));
421         final RuntimeException exception = new RuntimeException("test");
422         doThrow(exception).when(vspUploadStatusRecordDao).update(vspUploadStatusRecord);
423
424         //when/then
425         final CoreException actualCoreException = assertThrows(CoreException.class,
426             () -> packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, "username"));
427
428         final CoreException expectedCoreException = couldNotUpdateStatus(vspId, vspVersionId, VspUploadStatus.PROCESSING, exception).get();
429         assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
430         assertEquals(expectedCoreException.getMessage(), actualCoreException.getMessage());
431     }
432
433 }