Skip to content

Commit c20e784

Browse files
committed
Add MODIFY and DELETE test coverage
Optimize the `filesFromEvents()` logic replacing item with the fresh event sources. Remove the item from the result set in case of `DELETE` event, because file removal generates both `MODIFY` and `DELETE` events.
1 parent 3151b74 commit c20e784

File tree

2 files changed

+23
-8
lines changed

2 files changed

+23
-8
lines changed

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

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -444,12 +444,14 @@ private Set<File> filesFromEvents() {
444444
if (FileReadingMessageSource.this.filter instanceof ResettableFileListFilter) {
445445
((ResettableFileListFilter<File>) FileReadingMessageSource.this.filter).remove(file);
446446
}
447+
files.remove(file);
447448
}
448449
else {
449450
if (file.isDirectory()) {
450451
files.addAll(walkDirectory(file.toPath()));
451452
}
452453
else {
454+
files.remove(file);
453455
files.add(file);
454456
}
455457
}

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

Lines changed: 21 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -37,7 +37,8 @@
3737
import org.junit.rules.TemporaryFolder;
3838

3939
import org.springframework.beans.factory.BeanFactory;
40-
import org.springframework.integration.file.filters.AcceptOnceFileListFilter;
40+
import org.springframework.integration.file.filters.FileSystemPersistentAcceptOnceFileListFilter;
41+
import org.springframework.integration.metadata.SimpleMetadataStore;
4142

4243
/**
4344
* @author Gary Russell
@@ -78,15 +79,18 @@ public void testInitialAndAddMoreThanRemove() throws Exception {
7879

7980
final CountDownLatch removeFileLatch = new CountDownLatch(1);
8081

81-
fileReadingMessageSource.setFilter(new AcceptOnceFileListFilter<File>() {
82+
FileSystemPersistentAcceptOnceFileListFilter filter =
83+
new FileSystemPersistentAcceptOnceFileListFilter(new SimpleMetadataStore(), "test") {
8284

83-
@Override
84-
public boolean remove(File fileToRemove) {
85-
removeFileLatch.countDown();
86-
return super.remove(fileToRemove);
87-
}
85+
@Override
86+
public boolean remove(File fileToRemove) {
87+
removeFileLatch.countDown();
88+
return super.remove(fileToRemove);
89+
}
90+
91+
};
8892

89-
});
93+
fileReadingMessageSource.setFilter(filter);
9094
fileReadingMessageSource.afterPropertiesSet();
9195
fileReadingMessageSource.start();
9296
DirectoryScanner scanner = fileReadingMessageSource.getScanner();
@@ -153,6 +157,15 @@ public boolean remove(File fileToRemove) {
153157

154158
assertTrue(accum.contains(baz2));
155159

160+
File baz2Copy = new File(baz2.getAbsolutePath());
161+
162+
baz2Copy.setLastModified(baz2.lastModified() + 100000);
163+
164+
files = scanner.listFiles(folder.getRoot());
165+
166+
assertEquals(1, files.size());
167+
assertTrue(files.contains(baz2));
168+
156169
baz2.delete();
157170

158171
scanner.listFiles(folder.getRoot());

0 commit comments

Comments
 (0)