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
10 * http://www.apache.org/licenses/LICENSE-2.0
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.
18 * SPDX-License-Identifier: Apache-2.0
19 * ============LICENSE_END=========================================================
22 package org.openecomp.sdcrests.vsp.rest.services;
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;
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;
59 class OrchestrationTemplateCandidateUploadManagerImplTest {
62 private VspUploadStatusRecordDao vspUploadStatusRecordDao;
64 private VendorSoftwareProductManager vendorSoftwareProductManager;
66 private OrchestrationTemplateCandidateUploadManagerImpl packageUploadManagerImpl;
70 MockitoAnnotations.openMocks(this);
74 void startUploadSuccessTest() {
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());
81 final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username);
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());
92 void startUpload_uploadAlreadyInProgressTest() {
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());
100 final CoreException actualCoreException =
101 assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
102 final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspUploadAlreadyInProgress(vspId,
104 assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
105 assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
109 void startUpload_vspNotFoundTest() {
111 final String vspId = "vspId";
112 final String vspVersionId = "vspVersionId";
113 final String username = "username";
115 final CoreException actualCoreException =
116 assertThrows(CoreException.class, () -> packageUploadManagerImpl.putUploadInProgress(vspId, vspVersionId, username));
117 final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspNotFound(vspId, vspVersionId)
119 assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
120 assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
124 void startUpload_createLockErrorTest() {
126 final String vspId = "vspId";
127 final String vspVersionId = "vspVersionId";
128 final String username = "username";
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());
141 void finishUploadSuccessTest() {
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));
156 final VspUploadStatusDto actualVspUploadStatus = packageUploadManagerImpl
157 .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username);
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());
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());
177 actualException = assertThrows(IllegalArgumentException.class,
178 () -> packageUploadManagerImpl
179 .putUploadAsFinished("vspId", "vspVersionId", lockId, VspUploadStatus.PROCESSING, "username")
181 expectedException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.invalidCompleteStatus(
182 VspUploadStatus.PROCESSING).get();
183 assertEquals(expectedException.getMessage(), actualException.getMessage());
187 void finishUploadCouldNotFindLockTest() {
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());
202 final CoreException actualException = assertThrows(CoreException.class,
203 () -> packageUploadManagerImpl.putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
205 final CoreException expectedException =
206 OrchestrationTemplateCandidateUploadManagerExceptionSupplier.couldNotFindLock(lockId, vspId, vspVersionId).get();
207 assertEquals(expectedException.getMessage(), actualException.getMessage());
211 void finishUpload_uploadAlreadyFinishedTest() {
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));
225 final CoreException actualException = assertThrows(CoreException.class, () -> packageUploadManagerImpl
226 .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
228 final CoreException expectedException =
229 OrchestrationTemplateCandidateUploadManagerExceptionSupplier.uploadAlreadyFinished(lockId, vspId, vspVersionId).get();
230 assertEquals(expectedException.getMessage(), actualException.getMessage());
234 void finishUploadCouldNotUpdateLockTest() {
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);
250 final CoreException actualException = assertThrows(CoreException.class, () -> packageUploadManagerImpl
251 .putUploadAsFinished(vspId, vspVersionId, lockId, VspUploadStatus.SUCCESS, username));
253 final CoreException expectedException =
254 OrchestrationTemplateCandidateUploadManagerExceptionSupplier
255 .couldNotUpdateLock(lockId, vspId, vspVersionId, new RuntimeException()).get();
256 assertEquals(expectedException.getMessage(), actualException.getMessage());
260 void findLatestSuccessTest() {
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));
276 final Optional<VspUploadStatusDto> actualVspUploadStatusDtoOpt = packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username);
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());
290 void findLatest_noStatusFoundTest() {
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());
298 final Optional<VspUploadStatusDto> actualVspUploadStatusDtoOpt = packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username);
300 assertTrue(actualVspUploadStatusDtoOpt.isEmpty());
304 void findLatest_vspNotFoundTest() {
306 final String vspId = "vspId";
307 final String vspVersionId = "vspVersionId";
308 final String username = "username";
310 final CoreException actualCoreException =
311 assertThrows(CoreException.class, () -> packageUploadManagerImpl.findLatestStatus(vspId, vspVersionId, username));
312 final CoreException expectedCoreException = OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspNotFound(vspId, vspVersionId)
314 assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
315 assertEquals(expectedCoreException.code().message(), actualCoreException.code().message());
319 void startValidationSuccessTest() throws ParseException {
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));
336 final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInValidation(vspId, vspVersionId, username);
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());
348 void startProcessingSuccessTest() throws ParseException {
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));
365 final VspUploadStatusDto vspUploadStatusDto = packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, username);
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());
378 void startProcessing_statusNotFoundTest() {
380 final String vspId = "vspId";
381 final String vspVersionId = "vspVersionId";
382 when(vspUploadStatusRecordDao.findLatest(vspId, vspVersionId)).thenReturn(Optional.empty());
384 final CoreException actualCoreException = assertThrows(CoreException.class,
385 () -> packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, "username"));
387 final CoreException expectedCoreException = couldNotFindStatus(vspId, vspVersionId).get();
388 assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
389 assertEquals(expectedCoreException.getMessage(), actualCoreException.getMessage());
393 void startProcessing_alreadyInGivenStatusTest() {
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));
403 final CoreException actualCoreException = assertThrows(CoreException.class,
404 () -> packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, "username"));
406 final CoreException expectedCoreException = alreadyInStatusBeingUpdated(vspId, vspVersionId, processingStatus).get();
407 assertEquals(expectedCoreException.code().id(), actualCoreException.code().id());
408 assertEquals(expectedCoreException.getMessage(), actualCoreException.getMessage());
412 void updateStatus_couldNotUpdateTest() {
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);
425 final CoreException actualCoreException = assertThrows(CoreException.class,
426 () -> packageUploadManagerImpl.putUploadInProcessing(vspId, vspVersionId, "username"));
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());