1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.apache.commons.io;
18
19 import static org.junit.jupiter.api.Assertions.assertFalse;
20 import static org.junit.jupiter.api.Assertions.assertTrue;
21
22 import java.io.File;
23 import java.util.concurrent.TimeUnit;
24 import java.util.concurrent.atomic.AtomicBoolean;
25
26 import org.junit.jupiter.api.Test;
27 import org.junit.jupiter.api.Timeout;
28
29
30
31
32
33
34
35
36
37 class FileUtilsWaitForTest {
38
39
40 private final File NOSUCHFILE = new File("a.b.c.d." + System.currentTimeMillis());
41
42 @Test
43 void testIO_488() throws InterruptedException {
44 final long start = System.currentTimeMillis();
45 final AtomicBoolean wasInterrupted = new AtomicBoolean();
46 final int seconds = 3;
47 final Thread thread1 = new Thread(() -> {
48
49 assertFalse(FileUtils.waitFor(NOSUCHFILE, seconds), "Should not find file");
50 wasInterrupted.set(Thread.currentThread().isInterrupted());
51 });
52 thread1.start();
53 Thread.sleep(500);
54 thread1.interrupt();
55 thread1.join();
56 assertTrue(wasInterrupted.get(), "Should have been interrupted");
57 final long elapsed = System.currentTimeMillis() - start;
58 assertTrue(elapsed >= seconds * 1000, "Should wait for n seconds, actual: " + elapsed);
59 }
60
61 @Test
62 @Timeout(value = 30, unit = TimeUnit.MILLISECONDS)
63 void testWaitFor0() {
64 assertTrue(FileUtils.waitFor(FileUtils.current(), 0));
65 }
66
67 @Test
68 @Timeout(value = 30, unit = TimeUnit.MILLISECONDS)
69 void testWaitFor0Absent() {
70 assertFalse(FileUtils.waitFor(NOSUCHFILE, 0));
71 }
72
73 @Test
74 @Timeout(value = 30, unit = TimeUnit.MILLISECONDS)
75 void testWaitFor10() {
76 assertTrue(FileUtils.waitFor(FileUtils.current(), 10));
77 }
78
79 @Test
80 @Timeout(value = 30, unit = TimeUnit.MILLISECONDS)
81 void testWaitFor100() {
82 assertTrue(FileUtils.waitFor(FileUtils.current(), 100));
83 }
84
85 @Test
86 @Timeout(value = 3, unit = TimeUnit.SECONDS)
87 void testWaitFor5Absent() {
88 final long start = System.currentTimeMillis();
89 assertFalse(FileUtils.waitFor(NOSUCHFILE, 2));
90 final long elapsed = System.currentTimeMillis() - start;
91 assertTrue(elapsed >= 2000, "Must reach timeout - expected 2000, actual: " + elapsed);
92 }
93
94 @Test
95 @Timeout(value = 300, unit = TimeUnit.MILLISECONDS)
96 void testWaitForNegativeDuration() {
97 assertTrue(FileUtils.waitFor(FileUtils.current(), -1));
98 }
99
100 @Test
101 @Timeout(value = 30, unit = TimeUnit.MILLISECONDS)
102 void testWaitForNegativeDurationAbsent() {
103 assertFalse(FileUtils.waitFor(NOSUCHFILE, -1));
104 }
105
106 }