aboutsummaryrefslogtreecommitdiff
path: root/tests/sys/kqueue/libkqueue
diff options
context:
space:
mode:
authorNathaniel Wesley Filardo <nfilardo@microsoft.com>2021-09-24 00:31:39 +0000
committerJohn Baldwin <jhb@FreeBSD.org>2021-09-24 00:31:39 +0000
commit0321a7990b277702fa0b4f8366121bf53d03cb64 (patch)
tree8070770bac1c0fa2cf08176cec7b97b6ea45c06f /tests/sys/kqueue/libkqueue
parent701a99939fbf2007f1df03cb9f67be88455d31cc (diff)
Diffstat (limited to 'tests/sys/kqueue/libkqueue')
-rw-r--r--tests/sys/kqueue/libkqueue/user.c60
1 files changed, 60 insertions, 0 deletions
diff --git a/tests/sys/kqueue/libkqueue/user.c b/tests/sys/kqueue/libkqueue/user.c
index 3844251ff4ba..1f66234c4cda 100644
--- a/tests/sys/kqueue/libkqueue/user.c
+++ b/tests/sys/kqueue/libkqueue/user.c
@@ -61,6 +61,32 @@ event_wait(void)
}
static void
+event_wait_keepudata(void)
+{
+ const char *test_id = "kevent(EVFILT_USER, wait w/ EV_KEEPUDATA)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ test_no_kevents();
+
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ADD | EV_CLEAR, 0, 0, &kev);
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_KEEPUDATA, NOTE_TRIGGER, 0,
+ NULL);
+
+ kev.fflags &= ~NOTE_FFCTRLMASK;
+ kev.fflags &= ~NOTE_TRIGGER;
+ kev.flags = EV_CLEAR;
+ kev.udata = &kev;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ test_no_kevents();
+
+ success();
+}
+
+
+static void
disable_and_enable(void)
{
const char *test_id = "kevent(EVFILT_USER, EV_DISABLE and EV_ENABLE)";
@@ -89,6 +115,38 @@ disable_and_enable(void)
}
static void
+disable_and_enable_keepudata(void)
+{
+ const char *test_id =
+ "kevent(EVFILT_USER, EV_DISABLE and EV_ENABLE w/ EV_KEEPUDATA)";
+ struct kevent kev;
+
+ test_begin(test_id);
+
+ test_no_kevents();
+
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ADD, 0, 0, &kev);
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_DISABLE | EV_KEEPUDATA, 0, 0,
+ NULL);
+
+ /* Trigger the event, but since it is disabled, nothing will happen. */
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_KEEPUDATA, NOTE_TRIGGER, 0, NULL);
+ test_no_kevents();
+
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_ENABLE | EV_KEEPUDATA, 0, 0,
+ NULL);
+ kevent_add(kqfd, &kev, 1, EVFILT_USER, EV_KEEPUDATA, NOTE_TRIGGER, 0, NULL);
+
+ kev.flags = EV_CLEAR;
+ kev.fflags &= ~NOTE_FFCTRLMASK;
+ kev.fflags &= ~NOTE_TRIGGER;
+ kev.udata = &kev;
+ kevent_cmp(&kev, kevent_get(kqfd));
+
+ success();
+}
+
+static void
oneshot(void)
{
const char *test_id = "kevent(EVFILT_USER, EV_ONESHOT)";
@@ -120,7 +178,9 @@ test_evfilt_user(void)
add_and_delete();
event_wait();
+ event_wait_keepudata();
disable_and_enable();
+ disable_and_enable_keepudata();
oneshot();
/* TODO: try different fflags operations */