|
11 | 11 | import java.io.IOException; |
12 | 12 | import java.net.URL; |
13 | 13 | import java.util.concurrent.ExecutorService; |
| 14 | +import java.util.concurrent.Future; |
14 | 15 | import java.util.concurrent.atomic.AtomicBoolean; |
15 | 16 | import java.util.concurrent.atomic.AtomicInteger; |
16 | 17 |
|
@@ -240,39 +241,44 @@ public void testForceDeleteOnIOException() throws Exception { |
240 | 241 | // status : 2 -> deleting |
241 | 242 | AtomicInteger status = new AtomicInteger(0); |
242 | 243 |
|
243 | | - executor.submit(() -> { |
| 244 | + long timeoutInMs = 1000; |
| 245 | + |
| 246 | + Future future = executor.submit(() -> { |
244 | 247 | synchronized (testFile) { |
245 | 248 | FileOutputStream outputStream = new FileOutputStream(testFile); |
246 | 249 | outputStream.write('a'); |
247 | 250 | status.set(1); |
248 | | - // wait for notification |
249 | | - testFile.wait(); |
250 | | - outputStream.close(); |
251 | | - } |
252 | | - return null; |
253 | | - }); |
254 | 251 |
|
255 | | - executor.submit(() -> { |
256 | | - while (status.get() != 1) { |
257 | | - } |
258 | | - try { |
259 | | - forceDelete(testFile); |
260 | | - } finally { |
261 | | - status.set(2); |
262 | | - } |
263 | | - return null; |
264 | | - }); |
| 252 | + executor.submit(() -> { |
| 253 | + while (status.get() != 1) { |
| 254 | + } |
| 255 | + try { |
| 256 | + assertThrows(IOException.class, () -> forceDelete(testFile)); |
| 257 | + } finally { |
| 258 | + status.set(2); |
| 259 | + } |
| 260 | + return null; |
| 261 | + }); |
265 | 262 |
|
266 | | - executor.submit(() -> { |
267 | | - while (status.get() != 2) { |
268 | | - } |
269 | | - synchronized (testFile) { |
270 | | - testFile.notifyAll(); |
| 263 | + // wait for notification |
| 264 | + testFile.wait(timeoutInMs / 2); |
| 265 | + outputStream.close(); |
271 | 266 | } |
272 | 267 | return null; |
273 | 268 | }); |
274 | | - |
275 | | - executor.awaitTermination(100, MILLISECONDS); |
| 269 | + |
| 270 | + future.get(timeoutInMs, MILLISECONDS); |
| 271 | + |
| 272 | +// executor.submit(() -> { |
| 273 | +// while (status.get() != 2) { |
| 274 | +// } |
| 275 | +// synchronized (testFile) { |
| 276 | +// testFile.notifyAll(); |
| 277 | +// } |
| 278 | +// return null; |
| 279 | +// }); |
| 280 | + |
| 281 | + executor.awaitTermination(timeoutInMs, MILLISECONDS); |
276 | 282 |
|
277 | 283 | executor.shutdown(); |
278 | 284 |
|
|
0 commit comments