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 3e71ea5521)
This commit is contained in:
Artem Bilan
2024-07-08 10:03:12 -04:00
committed by Spring Builds
parent 89425f031b
commit bd2cf773e2
2 changed files with 20 additions and 0 deletions

View File

@@ -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 {

View File

@@ -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<PosixFilePermission> 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();