提交 10eb42ed 编写于 作者: A alanb

8023139: java/nio/file/WatchService/SensitivityModifier.java failing intermittently (win8)

Reviewed-by: alanb
Contributed-by: yiming.wang@oracle.com
上级 55b1de80
......@@ -54,60 +54,66 @@ public class SensitivityModifier {
@SuppressWarnings("unchecked")
static void doTest(Path top) throws Exception {
FileSystem fs = top.getFileSystem();
WatchService watcher = fs.newWatchService();
try (WatchService watcher = fs.newWatchService()) {
// create directories and files
int nDirs = 5 + rand.nextInt(20);
int nFiles = 50 + rand.nextInt(50);
Path[] dirs = new Path[nDirs];
Path[] files = new Path[nFiles];
for (int i=0; i<nDirs; i++) {
dirs[i] = Files.createDirectory(top.resolve("dir" + i));
}
for (int i=0; i<nFiles; i++) {
Path dir = dirs[rand.nextInt(nDirs)];
files[i] = Files.createFile(dir.resolve("file" + i));
}
// create directories and files
int nDirs = 5 + rand.nextInt(20);
int nFiles = 50 + rand.nextInt(50);
Path[] dirs = new Path[nDirs];
Path[] files = new Path[nFiles];
for (int i=0; i<nDirs; i++) {
dirs[i] = Files.createDirectory(top.resolve("dir" + i));
}
for (int i=0; i<nFiles; i++) {
Path dir = dirs[rand.nextInt(nDirs)];
files[i] = Files.createFile(dir.resolve("file" + i));
}
// register the directories (random sensitivity)
register(dirs, watcher);
// register the directories (random sensitivity)
register(dirs, watcher);
// sleep a bit here to ensure that modification to the first file
// can be detected by polling implementations (ie: last modified time
// may not change otherwise).
try { Thread.sleep(1000); } catch (InterruptedException e) { }
// sleep a bit here to ensure that modification to the first file
// can be detected by polling implementations (ie: last modified time
// may not change otherwise).
try { Thread.sleep(1000); } catch (InterruptedException e) { }
// modify files and check that events are received
for (int i=0; i<10; i++) {
Path file = files[rand.nextInt(nFiles)];
System.out.println("Modify: " + file);
try (OutputStream out = Files.newOutputStream(file)) {
out.write(new byte[100]);
}
// modify files and check that events are received
for (int i=0; i<10; i++) {
Path file = files[rand.nextInt(nFiles)];
System.out.println("Modify: " + file);
try (OutputStream out = Files.newOutputStream(file)) {
out.write(new byte[100]);
}
System.out.println("Waiting for event...");
WatchKey key = watcher.take();
WatchEvent<?> event = key.pollEvents().iterator().next();
if (event.kind() != ENTRY_MODIFY)
throw new RuntimeException("Unexpected event: " + event);
Path name = ((WatchEvent<Path>)event).context();
if (!name.equals(file.getFileName()))
throw new RuntimeException("Unexpected context: " + name);
System.out.println("Event OK");
System.out.println("Waiting for event(s)...");
boolean eventReceived = false;
WatchKey key = watcher.take();
do {
for (WatchEvent<?> event: key.pollEvents()) {
if (event.kind() != ENTRY_MODIFY)
throw new RuntimeException("Unexpected event: " + event);
Path name = ((WatchEvent<Path>)event).context();
if (name.equals(file.getFileName())) {
eventReceived = true;
break;
}
}
key.reset();
key = watcher.poll(1, TimeUnit.SECONDS);
} while (key != null && !eventReceived);
// drain events (to avoid interference)
do {
key.pollEvents();
key.reset();
key = watcher.poll(1, TimeUnit.SECONDS);
} while (key != null);
// we should have received at least one ENTRY_MODIFY event
if (eventReceived) {
System.out.println("Event OK");
} else {
throw new RuntimeException("No ENTRY_MODIFY event received for " + file);
}
// re-register the directories to force changing their sensitivity
// level
register(dirs, watcher);
// re-register the directories to force changing their sensitivity
// level
register(dirs, watcher);
}
}
// done
watcher.close();
}
public static void main(String[] args) throws Exception {
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册