From bd2cf773e26d1ecd6a2443b6b5a0706c91c3ccc8 Mon Sep 17 00:00:00 2001 From: Artem Bilan Date: Mon, 8 Jul 2024 10:03:12 -0400 Subject: [PATCH] GH-9294: Set permissions to target file on rename * GH-9294: Set permissions to target file on rename Fixes: #9294 When the `deleteSourceFiles` property of `FileWritingMessageHandler` is `true`, the `chmod` is not set on the target file. * Fix `FileWritingMessageHandler.handleFileMessage()` logic to `setPermissions(resultFile)` after `move` operation * * Set only `OWNER_READ` permission for file in unit test (cherry picked from commit 3e71ea552100cd35d1d84c2417e2fbb0e4815d00) --- .../file/FileWritingMessageHandler.java | 1 + .../file/FileWritingMessageHandlerTests.java | 19 +++++++++++++++++++ 2 files changed, 20 insertions(+) diff --git a/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java b/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java index 6568e2656d..0a24b651eb 100644 --- a/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java +++ b/spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java @@ -629,6 +629,7 @@ public class FileWritingMessageHandler extends AbstractReplyProducingMessageHand if (!FileExistsMode.APPEND.equals(this.fileExistsMode) && this.deleteSourceFiles) { rename(sourceFile, resultFile); + setPermissions(resultFile); return resultFile; } else { diff --git a/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java b/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java index b006fa0336..a6492c3569 100644 --- a/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java +++ b/spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java @@ -36,6 +36,8 @@ import org.apache.commons.io.output.ByteArrayOutputStream; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Disabled; import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.condition.DisabledOnOs; +import org.junit.jupiter.api.condition.OS; import org.junit.jupiter.api.io.TempDir; import org.springframework.beans.DirectFieldAccessor; @@ -301,6 +303,23 @@ public class FileWritingMessageHandlerTests { assertThat(sourceFile.exists()).isFalse(); } + @Test + @DisabledOnOs(OS.WINDOWS) + public void deleteFilesWithChmod() throws Exception { + QueueChannel output = new QueueChannel(); + handler.setDeleteSourceFiles(true); + handler.setOutputChannel(output); + handler.setChmod(0400); + Message message = MessageBuilder.withPayload(sourceFile).build(); + handler.handleMessage(message); + Message result = output.receive(0); + assertFileContentIsMatching(result); + File resultFile = messageToFile(result); + Set posixFilePermissions = Files.getPosixFilePermissions(resultFile.toPath()); + assertThat(posixFilePermissions).containsOnly(PosixFilePermission.OWNER_READ); + assertThat(sourceFile.exists()).isFalse(); + } + @Test public void deleteSourceFileWithStringPayloadAndFileInstanceHeader() throws Exception { QueueChannel output = new QueueChannel();