Changeset View
Changeset View
Standalone View
Standalone View
tests/sys/kqueue/libkqueue/vnode.c
Show First 20 Lines • Show All 59 Lines • ▼ Show 20 Lines | if (unlink("./kqueue-test.tmp") < 0) | ||||
err(1, "unlink"); | err(1, "unlink"); | ||||
kevent_cmp(&kev, kevent_get(kqfd)); | kevent_cmp(&kev, kevent_get(kqfd)); | ||||
success(); | success(); | ||||
} | } | ||||
static void | static void | ||||
test_kevent_vnode_note_delete_fifo(void) | |||||
{ | |||||
const char *test_id = "kevent(EVFILT_VNODE, NOTE_DELETE, FIFO)"; | |||||
const char *fifo_path = "./kqueue-fifo.tmp"; | |||||
struct kevent kev; | |||||
int fd; | |||||
pid_t pid; | |||||
test_begin(test_id); | |||||
if (mkfifo(fifo_path, 0600) != 0) | |||||
err(1, "mkfifo"); | |||||
pid = fork(); | |||||
if (pid == -1) | |||||
err(1, "fork"); | |||||
if (pid == 0) { | |||||
char buf[4]; | |||||
fd = open(fifo_path, O_RDONLY); | |||||
if (fd == -1) | |||||
_exit(1); | |||||
while (read(fd, buf, sizeof(buf)) != 0) { | |||||
} | |||||
_exit(0); | |||||
} | |||||
sleep(1); | |||||
if (waitpid(pid, NULL, WNOHANG) == pid) { | |||||
unlink(fifo_path); | |||||
err(1, "open"); | |||||
} | |||||
fd = open(fifo_path, O_WRONLY); | |||||
if (fd < 0) { | |||||
unlink(fifo_path); | |||||
err(1, "open"); | |||||
} | |||||
EV_SET(&kev, fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_DELETE, 0, NULL); | |||||
if (kevent(kqfd, &kev, 1, NULL, 0, NULL) < 0) { | |||||
unlink(fifo_path); | |||||
err(1, "%s", test_id); | |||||
} | |||||
if (unlink(fifo_path) < 0) | |||||
err(1, "unlink"); | |||||
kevent_cmp(&kev, kevent_get(kqfd)); | |||||
close(fd); | |||||
success(); | |||||
} | |||||
static void | |||||
test_kevent_vnode_note_write(void) | test_kevent_vnode_note_write(void) | ||||
{ | { | ||||
const char *test_id = "kevent(EVFILT_VNODE, NOTE_WRITE)"; | const char *test_id = "kevent(EVFILT_VNODE, NOTE_WRITE)"; | ||||
struct kevent kev; | struct kevent kev; | ||||
test_begin(test_id); | test_begin(test_id); | ||||
EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_WRITE, 0, NULL); | EV_SET(&kev, vnode_fd, EVFILT_VNODE, EV_ADD | EV_ONESHOT, NOTE_WRITE, 0, NULL); | ||||
▲ Show 20 Lines • Show All 180 Lines • ▼ Show 20 Lines | test_evfilt_vnode(void) | ||||
test_kevent_vnode_disable_and_enable(); | test_kevent_vnode_disable_and_enable(); | ||||
#if HAVE_EV_DISPATCH | #if HAVE_EV_DISPATCH | ||||
test_kevent_vnode_dispatch(); | test_kevent_vnode_dispatch(); | ||||
#endif | #endif | ||||
test_kevent_vnode_note_write(); | test_kevent_vnode_note_write(); | ||||
test_kevent_vnode_note_attrib(); | test_kevent_vnode_note_attrib(); | ||||
test_kevent_vnode_note_rename(); | test_kevent_vnode_note_rename(); | ||||
test_kevent_vnode_note_delete(); | test_kevent_vnode_note_delete(); | ||||
test_kevent_vnode_note_delete_fifo(); | |||||
close(kqfd); | close(kqfd); | ||||
} | } |