Skip to content

Commit 00a8bbf

Browse files
committed
Update FileUtilsTest.java
1 parent f08f156 commit 00a8bbf

1 file changed

Lines changed: 45 additions & 13 deletions

File tree

microsphere-java-core/src/test/java/io/microsphere/io/FileUtilsTest.java

Lines changed: 45 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -10,8 +10,14 @@
1010
import java.io.FileOutputStream;
1111
import java.io.IOException;
1212
import java.net.URL;
13+
import java.util.ArrayList;
14+
import java.util.List;
15+
import java.util.concurrent.CompletionService;
16+
import java.util.concurrent.ExecutorCompletionService;
1317
import java.util.concurrent.ExecutorService;
18+
import java.util.concurrent.Future;
1419
import java.util.concurrent.atomic.AtomicBoolean;
20+
import java.util.concurrent.atomic.AtomicInteger;
1521

1622
import static io.microsphere.io.FileUtils.cleanDirectory;
1723
import static io.microsphere.io.FileUtils.deleteDirectory;
@@ -27,7 +33,8 @@
2733
import static io.microsphere.util.StringUtils.EMPTY_STRING;
2834
import static io.microsphere.util.SystemUtils.IS_OS_WINDOWS;
2935
import static io.microsphere.util.SystemUtils.JAVA_IO_TMPDIR;
30-
import static java.nio.charset.StandardCharsets.UTF_8;
36+
import static java.lang.Thread.sleep;
37+
import static java.util.concurrent.Executors.newFixedThreadPool;
3138
import static java.util.concurrent.Executors.newSingleThreadExecutor;
3239
import static org.junit.jupiter.api.Assertions.assertEquals;
3340
import static org.junit.jupiter.api.Assertions.assertFalse;
@@ -154,7 +161,7 @@ public void onFileDeleted(FileChangedEvent event) {
154161
while (true) {
155162
try {
156163
deleteDirectory(testDir);
157-
Thread.sleep(500);
164+
sleep(500);
158165
} catch (IOException e) {
159166
exception = e;
160167
running.set(false);
@@ -231,25 +238,50 @@ public void testForceDeleteOnIOException() throws Exception {
231238
File testDir = createRandomTempDirectory();
232239
File testFile = createRandomFile(testDir);
233240

234-
ExecutorService executor = newSingleThreadExecutor();
241+
int n = 2;
242+
243+
ExecutorService executor = newFixedThreadPool(n);
244+
245+
CompletionService completionService = new ExecutorCompletionService(executor);
246+
247+
// status : 0 -> init
248+
// status : 1 -> writing
249+
// status : 2 -> deleting
250+
AtomicInteger status = new AtomicInteger(0);
235251

236-
executor.submit(() -> {
252+
completionService.submit(() -> {
237253
synchronized (testFile) {
238-
FileOutputStream outputStream = new FileOutputStream(testFile);
239-
for (int i = 0; i < 10000; i++) {
240-
outputStream.write(i);
241-
// wait for notification
242-
testFile.wait(10);
243-
}
254+
FileOutputStream outputStream = new FileOutputStream(testFile, true);
255+
outputStream.write('a');
256+
status.set(1);
257+
// wait for notification
258+
testFile.wait();
244259
outputStream.close();
245260
}
246261
return null;
247262
});
248263

249-
assertThrows(IOException.class, () -> forceDelete(testFile));
264+
completionService.submit(() -> {
265+
while (status.get() != 1) {
266+
sleep(10L);
267+
}
268+
assertThrows(IOException.class, () -> forceDelete(testFile));
269+
status.set(2);
270+
return null;
271+
});
272+
273+
completionService.submit(() -> {
274+
while (status.get() != 2) {
275+
sleep(10L);
276+
}
277+
synchronized (testFile) {
278+
testFile.notify();
279+
}
280+
return null;
281+
});
250282

251-
synchronized (testFile) {
252-
testFile.notify();
283+
for (int i = 0; i < n; i++) {
284+
completionService.take().get();
253285
}
254286

255287
executor.shutdown();

0 commit comments

Comments
 (0)