Skip to content

Commit 4367ab7

Browse files
artembilanspring-builds
authored andcommitted
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 3e71ea5)
1 parent 9a81395 commit 4367ab7

File tree

2 files changed

+20
-0
lines changed

2 files changed

+20
-0
lines changed

spring-integration-file/src/main/java/org/springframework/integration/file/FileWritingMessageHandler.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -630,6 +630,7 @@ private File handleFileMessage(File sourceFile, File tempFile, File resultFile,
630630

631631
if (!FileExistsMode.APPEND.equals(this.fileExistsMode) && this.deleteSourceFiles) {
632632
rename(sourceFile, resultFile);
633+
setPermissions(resultFile);
633634
return resultFile;
634635
}
635636
else {

spring-integration-file/src/test/java/org/springframework/integration/file/FileWritingMessageHandlerTests.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,8 @@
3636
import org.junit.jupiter.api.BeforeEach;
3737
import org.junit.jupiter.api.Disabled;
3838
import org.junit.jupiter.api.Test;
39+
import org.junit.jupiter.api.condition.DisabledOnOs;
40+
import org.junit.jupiter.api.condition.OS;
3941
import org.junit.jupiter.api.io.TempDir;
4042

4143
import org.springframework.beans.DirectFieldAccessor;
@@ -302,6 +304,23 @@ public void deleteFilesTrueWithFilePayload() throws Exception {
302304
assertThat(sourceFile.exists()).isFalse();
303305
}
304306

307+
@Test
308+
@DisabledOnOs(OS.WINDOWS)
309+
public void deleteFilesWithChmod() throws Exception {
310+
QueueChannel output = new QueueChannel();
311+
handler.setDeleteSourceFiles(true);
312+
handler.setOutputChannel(output);
313+
handler.setChmod(0400);
314+
Message<?> message = MessageBuilder.withPayload(sourceFile).build();
315+
handler.handleMessage(message);
316+
Message<?> result = output.receive(0);
317+
assertFileContentIsMatching(result);
318+
File resultFile = messageToFile(result);
319+
Set<PosixFilePermission> posixFilePermissions = Files.getPosixFilePermissions(resultFile.toPath());
320+
assertThat(posixFilePermissions).containsOnly(PosixFilePermission.OWNER_READ);
321+
assertThat(sourceFile.exists()).isFalse();
322+
}
323+
305324
@Test
306325
public void deleteSourceFileWithStringPayloadAndFileInstanceHeader() throws Exception {
307326
QueueChannel output = new QueueChannel();

0 commit comments

Comments
 (0)