diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/model/BinaryFileUpload.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/model/BinaryFileUpload.java deleted file mode 100644 index dbd30813e39d2bd6308b101031a9f6f5a78bc0ab..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/model/BinaryFileUpload.java +++ /dev/null @@ -1,8 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osiv2.model; - -public record BinaryFileUpload( - String name, - String contentType, - long size -) { -} diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/model/FileChunkResource.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/model/FileChunkResource.java deleted file mode 100644 index 59078e50a3ada9e039d40e56dd2d8a774d4b8611..0000000000000000000000000000000000000000 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/model/FileChunkResource.java +++ /dev/null @@ -1,28 +0,0 @@ -package de.ozgcloud.nachrichten.postfach.osiv2.model; - -import java.io.InputStream; -import java.nio.ByteBuffer; - -import org.springframework.core.io.AbstractResource; - -import com.fasterxml.jackson.databind.util.ByteBufferBackedInputStream; - -import lombok.Builder; -import lombok.RequiredArgsConstructor; - -@Builder -@RequiredArgsConstructor -public class FileChunkResource extends AbstractResource { - private final Integer chunkSize; - private final ByteBuffer content; - - @Override - public String getDescription() { - return "Chunk of a file"; - } - - @Override - public InputStream getInputStream() { - return new ByteBufferBackedInputStream(content); - } -} diff --git a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/storage/Osi2AttachmentFileService.java b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/storage/Osi2AttachmentFileService.java index 0eab427e38359e7611f6da256e860458ea9d1abe..24596f9ffb2d654bc8533b816dc977813dcec952 100644 --- a/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/storage/Osi2AttachmentFileService.java +++ b/src/main/java/de/ozgcloud/nachrichten/postfach/osiv2/storage/Osi2AttachmentFileService.java @@ -49,7 +49,6 @@ public class Osi2AttachmentFileService { } public String uploadFileAndReturnId(AttachmentFile attachmentFile, Supplier<InputStream> fileInputStream) { - // TODO KOP-3008 use revised (nachrichten-manager) AttachmentFileService var attachmentFileId = ozgCloudFileService.uploadFile( attachmentFileMapper.toOzgCloudUploadFile(attachmentFile), fileInputStream.get() diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java index 04bef851099121b376b03d3c58aad0135f44382c..0e793a14b6e51ab19b4a8f5713c54945b0932ca8 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/OsiPostfachRemoteServiceITCase.java @@ -74,7 +74,6 @@ class OsiPostfachRemoteServiceITCase { @SneakyThrows public void setup() { postfachFacadeMockServer = OSI_MOCK_SERVER_EXTENSION.getPostfachFacadeMockServer(); - } @DisplayName("should send request with jwt") @@ -138,6 +137,58 @@ class OsiPostfachRemoteServiceITCase { ); } + @DisplayName("should delete attachments on upload exception") + @Test + void shouldDeleteAttachmentsOnUploadException() { + var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService); + postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked")) + .willReturn(okJsonObj(QuarantineFileResult.builder() + .success(false) + .error("Upload failure") + .build())) + ); + postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/Quarantine/v1/Upload/{guid}")) + .willReturn(ok()) + ); + var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder() + .attachments(List.of(textFileId)) + .build(); + + osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment); + + postfachFacadeMockServer.verify( + exactly(1), + deleteRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}")) + ); + } + + @DisplayName("should delete attachments on scan exception") + @Test + void shouldDeleteAttachmentsOnScanException() { + var textFileId = AttachmentExampleUploadUtil.uploadTextFile(osi2AttachmentFileService); + postfachFacadeMockServer.stubFor(post(urlPathTemplate("/Quarantine/v1/Upload/Chunked")) + .willReturn(okJsonObj(QuarantineFileResult.builder() + .success(true) + .build())) + ); + postfachFacadeMockServer.stubFor(get(urlPathTemplate("/Quarantine/v1/Upload/{guid}")) + .willReturn(okJsonObj(QuarantineStatus.UNSAFE)) + ); + postfachFacadeMockServer.stubFor(delete(urlPathTemplate("/Quarantine/v1/Upload/{guid}")) + .willReturn(ok()) + ); + var postfachNachrichtWithAttachment = PostfachNachrichtTestFactory.createBuilder() + .attachments(List.of(textFileId)) + .build(); + + osiPostfachRemoteService.sendMessage(postfachNachrichtWithAttachment); + + postfachFacadeMockServer.verify( + exactly(1), + deleteRequestedFor(urlPathTemplate("/Quarantine/v1/Upload/{guid}")) + ); + } + private void mockSendResponse() { // Stub message send response (MessageExchangeApi::sendMessage) postfachFacadeMockServer.stubFor(post(urlPathTemplate("/MessageExchange/v1/Send/{mailboxId}")) diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java index 494577ae67a60c3dd38b701520023967f42d164b..872ebbc820ad1e76278c07c296434a196ff7fd19 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/extension/VorgangManagerServerExtension.java @@ -5,7 +5,6 @@ import java.util.Map; import java.util.Optional; import org.junit.jupiter.api.extension.AfterAllCallback; -import org.junit.jupiter.api.extension.AfterEachCallback; import org.junit.jupiter.api.extension.BeforeAllCallback; import org.junit.jupiter.api.extension.ExtensionContext; import org.testcontainers.containers.MongoDBContainer; @@ -21,7 +20,7 @@ import lombok.extern.log4j.Log4j2; @Log4j2 @Getter @RequiredArgsConstructor -public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAllCallback, AfterEachCallback { +public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAllCallback { static final String VORGANG_MANAGER_NETWORK_ALIAS = "vorgang-manager"; static final String MONGODB_NETWORK_ALIAS = "mongodb"; @@ -77,8 +76,4 @@ public class VorgangManagerServerExtension implements BeforeAllCallback, AfterAl .orElse("missing"); } - @Override - public void afterEach(ExtensionContext context) { - // Consider clearing mongodb (uploaded files) - } } diff --git a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java index a0e6ba9488cae35fd5595ae558c5b211de9da329..6117bc3e23f9702a6fee0fbcedfae106ec296654 100644 --- a/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java +++ b/src/test/java/de/ozgcloud/nachrichten/postfach/osiv2/transfer/PostfachApiFacadeServiceTest.java @@ -16,6 +16,7 @@ import org.junit.jupiter.api.Test; import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.Spy; +import org.springframework.core.io.AbstractResource; import de.ozgcloud.nachrichten.postfach.PostfachNachricht; import de.ozgcloud.nachrichten.postfach.osiv2.config.Osi2PostfachProperties; @@ -32,7 +33,6 @@ import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.OutSendMessageRequestV2; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.QuarantineStatus; import de.ozgcloud.nachrichten.postfach.osiv2.gen.model.V1ReplyMessage; import de.ozgcloud.nachrichten.postfach.osiv2.model.FileChunkInfo; -import de.ozgcloud.nachrichten.postfach.osiv2.model.FileChunkResource; import de.ozgcloud.nachrichten.postfach.osiv2.model.Osi2FileUpload; import lombok.SneakyThrows; @@ -214,7 +214,7 @@ class PostfachApiFacadeServiceTest { @Nested class TestUploadChunk { @Mock - FileChunkResource chunkResource; + AbstractResource chunkResource; @Mock DomainChunkMetaData domainChunkMetaData;