diff options
Diffstat (limited to 'openecomp-be/api')
5 files changed, 115 insertions, 11 deletions
diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/OrchestrationTemplateCandidateUploadManagerController.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/OrchestrationTemplateCandidateUploadManagerController.java index 971a1c42b5..19c27e4c56 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/OrchestrationTemplateCandidateUploadManagerController.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/OrchestrationTemplateCandidateUploadManagerController.java @@ -31,6 +31,7 @@ import javax.validation.constraints.NotNull; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; +import javax.ws.rs.POST; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; @@ -62,4 +63,18 @@ public interface OrchestrationTemplateCandidateUploadManagerController extends V @Parameter(description = "Vendor Software Product version id") @PathParam("versionId") String versionId, @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user); + /** + * Creates the upload lock, setting the status to upload in progress. + * + * @param vspId the vsp id + * @param versionId the vsp version id + * @param user the username accessing the API + * @return if successful, an OK response with the created VspUploadStatus information + */ + @POST + @Path("/") + Response createUploadLock(@Parameter(description = "Vendor Software Product id") @PathParam("vspId") String vspId, + @Parameter(description = "Vendor Software Product version id") @PathParam("versionId") String versionId, + @NotNull(message = USER_MISSING_ERROR_MSG) @HeaderParam(USER_ID_HEADER_PARAM) String user); + } diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/controllers/OrchestrationTemplateCandidateUploadManagerControllerImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/controllers/OrchestrationTemplateCandidateUploadManagerControllerImpl.java index f96522aa75..aec877d777 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/controllers/OrchestrationTemplateCandidateUploadManagerControllerImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/controllers/OrchestrationTemplateCandidateUploadManagerControllerImpl.java @@ -55,6 +55,15 @@ public class OrchestrationTemplateCandidateUploadManagerControllerImpl implement return Response.ok(vspUploadStatus.get()).build(); } + public Response createUploadLock(String vspId, String versionId, String user) { + vspId = ValidationUtils.sanitizeInputString(vspId); + versionId = ValidationUtils.sanitizeInputString(versionId); + user = ValidationUtils.sanitizeInputString(user); + + final VspUploadStatusDto vspUploadStatus = orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user); + return Response.status(Status.CREATED).entity(vspUploadStatus).build(); + } + /** * Builds the string representing the get API url. * diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/exception/OrchestrationTemplateCandidateUploadManagerExceptionSupplier.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/exception/OrchestrationTemplateCandidateUploadManagerExceptionSupplier.java index 643f59bffb..bea478cfef 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/exception/OrchestrationTemplateCandidateUploadManagerExceptionSupplier.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/exception/OrchestrationTemplateCandidateUploadManagerExceptionSupplier.java @@ -44,7 +44,7 @@ public class OrchestrationTemplateCandidateUploadManagerExceptionSupplier { } public static Supplier<CoreException> vspUploadAlreadyInProgress(final String vspId, final String vspVersionId) { - final String errorMsg = String.format("There is a processing in progress for the VSP '%s', version '%s'", vspId, vspVersionId); + final String errorMsg = String.format("Upload already in progress for the VSP '%s', version '%s'", vspId, vspVersionId); return () -> new CoreException(new ErrorCodeBuilder().withId(VSP_PROCESSING_IN_PROGRESS).withMessage(errorMsg).build()); } diff --git a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java index 01d2a59e45..93483f3de1 100644 --- a/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java +++ b/openecomp-be/api/openecomp-sdc-rest-webapp/vendor-software-products-rest/vendor-software-products-rest-services/src/main/java/org/openecomp/sdcrests/vsp/rest/services/OrchestrationTemplateCandidateImpl.java @@ -30,6 +30,7 @@ import static org.openecomp.sdc.common.errors.Messages.ERROR_HAS_OCCURRED_WHILE_ import static org.openecomp.sdc.common.errors.Messages.NO_FILE_WAS_UPLOADED_OR_FILE_NOT_EXIST; import static org.openecomp.sdc.common.errors.Messages.PACKAGE_PROCESS_ERROR; import static org.openecomp.sdc.common.errors.Messages.UNEXPECTED_PROBLEM_HAPPENED_WHILE_GETTING; +import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspUploadAlreadyInProgress; import java.io.ByteArrayInputStream; import java.io.FileInputStream; @@ -144,7 +145,11 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate final Response response; VspUploadStatusDto vspUploadStatus = null; try { - vspUploadStatus = orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user); + vspUploadStatus = getVspUploadStatus(vspId, versionId, user); + + if (vspUploadStatus.getStatus() != VspUploadStatus.UPLOADING) { + throw vspUploadAlreadyInProgress(vspId, versionId).get(); + } final byte[] fileToUploadBytes; final DataHandler dataHandler = fileToUpload.getDataHandler(); final var filename = ValidationUtils.sanitizeInputString(dataHandler.getName()); @@ -199,6 +204,16 @@ public class OrchestrationTemplateCandidateImpl implements OrchestrationTemplate return response; } + private VspUploadStatusDto getVspUploadStatus(final String vspId, final String versionId, final String user) { + final Optional<VspUploadStatusDto> vspUploadStatusOpt = + orchestrationTemplateCandidateUploadManager.findLatestStatus(vspId, versionId, user); + if (vspUploadStatusOpt.isEmpty() || vspUploadStatusOpt.get().isComplete()) { + return orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user); + } + + return vspUploadStatusOpt.get(); + } + private ArtifactInfo handleArtifactStorage(final String vspId, final String versionId, final String filename, final DataHandler artifactDataHandler) { final Path tempArtifactPath; diff --git a/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/OrchestrationTemplateCandidateImplTest.java b/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/OrchestrationTemplateCandidateImplTest.java index 802d6d885a..8b31261d6a 100644 --- a/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/OrchestrationTemplateCandidateImplTest.java +++ b/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/OrchestrationTemplateCandidateImplTest.java @@ -32,6 +32,7 @@ import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.verify; import static org.mockito.Mockito.when; +import static org.openecomp.sdcrests.vsp.rest.exception.OrchestrationTemplateCandidateUploadManagerExceptionSupplier.vspUploadAlreadyInProgress; import java.io.IOException; import java.io.InputStream; @@ -50,6 +51,7 @@ import org.apache.commons.io.IOUtils; import org.apache.commons.lang3.tuple.Pair; import org.apache.cxf.jaxrs.ext.multipart.Attachment; import org.apache.cxf.jaxrs.ext.multipart.ContentDisposition; +import org.jetbrains.annotations.NotNull; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.ArgumentMatchers; @@ -66,6 +68,7 @@ import org.openecomp.sdc.be.csar.storage.MinIoStorageArtifactStorageConfig.Crede import org.openecomp.sdc.be.csar.storage.MinIoStorageArtifactStorageConfig.EndPoint; import org.openecomp.sdc.be.csar.storage.PackageSizeReducer; import org.openecomp.sdc.be.csar.storage.StorageFactory; +import org.openecomp.sdc.common.errors.CoreException; import org.openecomp.sdc.logging.api.Logger; import org.openecomp.sdc.logging.api.LoggerFactory; import org.openecomp.sdc.vendorsoftwareproduct.OrchestrationTemplateCandidateManager; @@ -159,9 +162,14 @@ class OrchestrationTemplateCandidateImplTest { void uploadSignedTest() throws IOException { final String vspId = "vspId"; final String versionId = "versionId"; - when(orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); - when(orchestrationTemplateCandidateUploadManager.putUploadInValidation(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); - when(orchestrationTemplateCandidateUploadManager.putUploadInProcessing(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); + when(orchestrationTemplateCandidateUploadManager.findLatestStatus(vspId, versionId, user)).thenReturn(Optional.empty()); + final UUID lockId = UUID.randomUUID(); + when(orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user)) + .thenReturn(createVspUploadStatus(lockId, VspUploadStatus.UPLOADING)); + when(orchestrationTemplateCandidateUploadManager.putUploadInValidation(vspId, versionId, user)) + .thenReturn(createVspUploadStatus(lockId, VspUploadStatus.VALIDATING)); + when(orchestrationTemplateCandidateUploadManager.putUploadInProcessing(vspId, versionId, user)) + .thenReturn(createVspUploadStatus(lockId, VspUploadStatus.PROCESSING)); Response response = orchestrationTemplateCandidate .upload(vspId, versionId, mockAttachment("filename.zip", this.getClass().getResource("/files/sample-signed.zip")), user); assertEquals(Status.OK.getStatusCode(), response.getStatus()); @@ -172,15 +180,28 @@ class OrchestrationTemplateCandidateImplTest { void uploadNotSignedTest() throws IOException { final String vspId = "vspId"; final String versionId = "versionId"; - when(orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); - when(orchestrationTemplateCandidateUploadManager.putUploadInValidation(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); - when(orchestrationTemplateCandidateUploadManager.putUploadInProcessing(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); + when(orchestrationTemplateCandidateUploadManager.findLatestStatus(vspId, versionId, user)).thenReturn(Optional.empty()); + final UUID lockId = UUID.randomUUID(); + when(orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user)) + .thenReturn(createVspUploadStatus(lockId, VspUploadStatus.UPLOADING)); + when(orchestrationTemplateCandidateUploadManager.putUploadInValidation(vspId, versionId, user)) + .thenReturn(createVspUploadStatus(lockId, VspUploadStatus.VALIDATING)); + when(orchestrationTemplateCandidateUploadManager.putUploadInProcessing(vspId, versionId, user)) + .thenReturn(createVspUploadStatus(lockId, VspUploadStatus.PROCESSING)); Response response = orchestrationTemplateCandidate.upload(vspId, versionId, mockAttachment("filename.csar", this.getClass().getResource("/files/sample-not-signed.csar")), user); assertEquals(Status.OK.getStatusCode(), response.getStatus()); assertTrue(((UploadFileResponseDto) response.getEntity()).getErrors().isEmpty()); } + @NotNull + private VspUploadStatusDto createVspUploadStatus(final UUID lockId, final VspUploadStatus uploadStatus) { + final VspUploadStatusDto vspUploadStatusProcessing = new VspUploadStatusDto(); + vspUploadStatusProcessing.setLockId(lockId); + vspUploadStatusProcessing.setStatus(uploadStatus); + return vspUploadStatusProcessing; + } + @Test void uploadNotSignedArtifactStorageManagerIsEnabledTest() throws IOException { when(storageFactory.createArtifactStorageManager()).thenReturn(artifactStorageManager); @@ -195,7 +216,9 @@ class OrchestrationTemplateCandidateImplTest { final byte[] bytes = Files.readAllBytes(path); when(packageSizeReducer.reduce(any())).thenReturn(bytes); - when(orchestrationTemplateCandidateUploadManager.putUploadInProgress(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); + final VspUploadStatusDto vspUploadStatusDto = new VspUploadStatusDto(); + vspUploadStatusDto.setStatus(VspUploadStatus.UPLOADING); + when(orchestrationTemplateCandidateUploadManager.findLatestStatus(vspId, versionId, user)).thenReturn(Optional.of(vspUploadStatusDto)); when(orchestrationTemplateCandidateUploadManager.putUploadInValidation(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); when(orchestrationTemplateCandidateUploadManager.putUploadInProcessing(vspId, versionId, user)).thenReturn(new VspUploadStatusDto()); @@ -230,6 +253,10 @@ class OrchestrationTemplateCandidateImplTest { @Test void uploadSignNotValidTest() throws IOException { //given + final VspUploadStatusDto vspUploadStatusDto = new VspUploadStatusDto(); + vspUploadStatusDto.setStatus(VspUploadStatus.UPLOADING); + when(orchestrationTemplateCandidateUploadManager.findLatestStatus(candidateId, versionId, user)) + .thenReturn(Optional.of(vspUploadStatusDto)); when(orchestrationTemplateCandidateUploadManager.putUploadInValidation(candidateId, versionId, user)).thenReturn(new VspUploadStatusDto()); //when Response response = orchestrationTemplateCandidate @@ -318,8 +345,8 @@ class OrchestrationTemplateCandidateImplTest { @Test void finishUploadMustBeCalledWhenExceptionHappensTest() { //given - final VspUploadStatusDto vspUploadStatusDto = new VspUploadStatusDto(); - vspUploadStatusDto.setLockId(UUID.randomUUID()); + final VspUploadStatusDto vspUploadStatusDto = createVspUploadStatus(UUID.randomUUID(), VspUploadStatus.UPLOADING); + when(orchestrationTemplateCandidateUploadManager.findLatestStatus(candidateId, versionId, user)).thenReturn(Optional.empty()); when(orchestrationTemplateCandidateUploadManager.putUploadInProgress(candidateId, versionId, user)).thenReturn(vspUploadStatusDto); final RuntimeException forcedException = new RuntimeException(); when(fileToUpload.getDataHandler()).thenThrow(forcedException); @@ -331,4 +358,42 @@ class OrchestrationTemplateCandidateImplTest { verify(orchestrationTemplateCandidateUploadManager) .putUploadAsFinished(candidateId, versionId, vspUploadStatusDto.getLockId(), VspUploadStatus.ERROR, user); } + +// @Test +// void uploadTestWithLatestStatusComplete() { +// final VspUploadStatusDto vspUploadStatusDto = new VspUploadStatusDto(); +// vspUploadStatusDto.setComplete(true); +// //given +// when(orchestrationTemplateCandidateUploadManager.findLatestStatus(candidateId, versionId, user)).thenReturn(Optional.of(vspUploadStatusDto)); +// final Attachment mock = Mockito.mock(Attachment.class); +// when(mock.getDataHandler()).thenReturn(Mockito.mock(DataHandler.class)); +// //when +// final CoreException actualException = assertThrows(CoreException.class, +// () -> orchestrationTemplateCandidate.upload(candidateId, versionId, mock, user)); +// final CoreException expectedException = couldNotAcceptPackageNoUploadInProgress(candidateId, versionId).get(); +// //then +// assertEquals(expectedException.code().id(), actualException.code().id()); +// assertEquals(expectedException.code().message(), actualException.code().message()); +// verify(orchestrationTemplateCandidateUploadManager).findLatestStatus(candidateId, versionId, user); +// } + + @Test + void uploadTestWithUploadInProgress() { + final VspUploadStatusDto vspUploadStatusDto = new VspUploadStatusDto(); + vspUploadStatusDto.setComplete(false); + vspUploadStatusDto.setStatus(VspUploadStatus.PROCESSING); + //given + when(orchestrationTemplateCandidateUploadManager.findLatestStatus(candidateId, versionId, user)).thenReturn(Optional.of(vspUploadStatusDto)); + final Attachment mock = Mockito.mock(Attachment.class); + when(mock.getDataHandler()).thenReturn(Mockito.mock(DataHandler.class)); + //when + final CoreException actualException = assertThrows(CoreException.class, + () -> orchestrationTemplateCandidate.upload(candidateId, versionId, mock, user)); + final CoreException expectedException = vspUploadAlreadyInProgress(candidateId, versionId).get(); + //then + assertEquals(expectedException.code().id(), actualException.code().id()); + assertEquals(expectedException.code().message(), actualException.code().message()); + verify(orchestrationTemplateCandidateUploadManager).findLatestStatus(candidateId, versionId, user); + } + } |