From 10287b658e490a21330eaa20ad28a1c1b02e448a Mon Sep 17 00:00:00 2001 From: devplant Date: Wed, 3 Nov 2021 15:10:53 +0200 Subject: [PATCH] RED-2508 empty pdf file - throw bad request exception when an empty file is uploaded --- .../v1/server/service/FileService.java | 4 ++++ .../v1/server/integration/tests/FileTest.java | 17 +++++++++++++++++ .../AbstractPersistenceServerServiceTest.java | 7 +++++-- persistence-service-v1/pom.xml | 2 +- 4 files changed, 27 insertions(+), 3 deletions(-) diff --git a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java index a52edd699..e367caec1 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java +++ b/persistence-service-v1/persistence-service-server-v1/src/main/java/com/iqser/red/service/peristence/v1/server/service/FileService.java @@ -6,6 +6,7 @@ import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeReque import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeResponse; import com.iqser.red.service.persistence.management.v1.processor.client.PDFTronRedactionClient; import com.iqser.red.service.persistence.management.v1.processor.entity.dossier.FileEntity; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.management.v1.processor.exception.ConflictException; import com.iqser.red.service.persistence.management.v1.processor.exception.NotFoundException; import com.iqser.red.service.persistence.management.v1.processor.service.persistence.*; @@ -68,6 +69,9 @@ public class FileService { try { PdfTronOptimizeResponse optimized = pdfTronRedactionClient.optimize(new PdfTronOptimizeRequest(request.getData())); + if (optimized.getNumberOfPages() == 0) { + throw new BadRequestException("Empty document"); + } // if successful update request with linearized PDF request.setData(optimized.getDocument()); } catch (Exception e) { diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java index 07fa7723b..20770f193 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/tests/FileTest.java @@ -2,6 +2,8 @@ package com.iqser.red.service.peristence.v1.server.integration.tests; import com.google.common.collect.Sets; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeRequest; +import com.iqser.red.service.pdftron.redaction.v1.api.model.PdfTronOptimizeResponse; import com.iqser.red.service.peristence.v1.server.integration.client.FileClient; import com.iqser.red.service.peristence.v1.server.integration.client.ManualRedactionClient; import com.iqser.red.service.peristence.v1.server.integration.client.UploadClient; @@ -10,17 +12,20 @@ import com.iqser.red.service.peristence.v1.server.integration.service.DossierTes import com.iqser.red.service.peristence.v1.server.integration.service.FileTesterAndProvider; import com.iqser.red.service.peristence.v1.server.integration.service.TypeProvider; import com.iqser.red.service.peristence.v1.server.integration.utils.AbstractPersistenceServerServiceTest; +import com.iqser.red.service.persistence.management.v1.processor.exception.BadRequestException; import com.iqser.red.service.persistence.service.v1.api.model.annotations.*; import com.iqser.red.service.persistence.service.v1.api.model.common.JSONPrimitive; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.BinaryFileRequest; import com.iqser.red.service.persistence.service.v1.api.model.dossiertemplate.dossier.file.WorkflowStatus; import org.junit.Test; +import org.mockito.Mockito; import org.springframework.beans.factory.annotation.Autowired; import java.nio.charset.StandardCharsets; import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.when; public class FileTest extends AbstractPersistenceServerServiceTest { @@ -45,6 +50,18 @@ public class FileTest extends AbstractPersistenceServerServiceTest { @Autowired private ManualRedactionClient manualRedactionClient; + @Test + public void testEmptyFile() { + var dossier = dossierTesterAndProvider.provideTestDossier(); + BinaryFileRequest upload = new BinaryFileRequest("".getBytes(StandardCharsets.UTF_8), "emptyFile.pdf", dossier.getId(), "1"); + + try { + uploadClient.upload(upload); + } catch (BadRequestException e) { + assertThat(e.getMessage().startsWith("empty")).isTrue(); + } + } + @Test public void testFile() { var dossier = dossierTesterAndProvider.provideTestDossier(); diff --git a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java index 8d148e7fa..fefd91b76 100644 --- a/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java +++ b/persistence-service-v1/persistence-service-server-v1/src/test/java/com/iqser/red/service/peristence/v1/server/integration/utils/AbstractPersistenceServerServiceTest.java @@ -114,8 +114,11 @@ public abstract class AbstractPersistenceServerServiceTest { doNothing().when(pdfTronRedactionClient).testDigitalCurrentSignature(Mockito.any()); when(amqpAdmin.getQueueInfo(Mockito.any())).thenReturn(null); - when(pdfTronRedactionClient.optimize(Mockito.any())).thenAnswer((args) -> - new PdfTronOptimizeResponse(((PdfTronOptimizeRequest) args.getArguments()[0]).getDocument())); + when(pdfTronRedactionClient.optimize(Mockito.any())).thenAnswer((args) -> { + PdfTronOptimizeRequest request = (PdfTronOptimizeRequest) args.getArguments()[0]; + int numberOfPages = (request.getDocument().length == 0? 0: 10); + return new PdfTronOptimizeResponse(request.getDocument(), numberOfPages); + }); when(pdfTronRedactionClient.redact(Mockito.any())).thenAnswer((args) -> new PdfTronRedactionResult(((PdfTronRedactionRequest) args.getArguments()[0]).getDocument())); when(pdfTronRedactionClient.redactionPreview(Mockito.any())).thenAnswer((args) -> diff --git a/persistence-service-v1/pom.xml b/persistence-service-v1/pom.xml index 3d4db050d..f2cc0a42c 100755 --- a/persistence-service-v1/pom.xml +++ b/persistence-service-v1/pom.xml @@ -50,7 +50,7 @@ com.iqser.red.service pdftron-redaction-service-api-v1 - 3.13.0 + 3.16.0