diff options
author | 2019-03-04 19:35:28 +0000 | |
---|---|---|
committer | 2019-03-04 19:35:28 +0000 | |
commit | 0df5504e01e3ff46ff45e5d4f08baef5372ff7f4 (patch) | |
tree | 753e0f02a8fb3cdd473ca160793781d7c3b732ad | |
parent | add support for multiple kqueue pty tests (diff) | |
download | wireguard-openbsd-0df5504e01e3ff46ff45e5d4f08baef5372ff7f4.tar.xz wireguard-openbsd-0df5504e01e3ff46ff45e5d4f08baef5372ff7f4.zip |
add kqueue pty close slave test
-rw-r--r-- | regress/sys/kern/kqueue/Makefile | 5 | ||||
-rw-r--r-- | regress/sys/kern/kqueue/kqueue-pty.c | 34 |
2 files changed, 37 insertions, 2 deletions
diff --git a/regress/sys/kern/kqueue/Makefile b/regress/sys/kern/kqueue/Makefile index 18fdc010a23..e991a431123 100644 --- a/regress/sys/kern/kqueue/Makefile +++ b/regress/sys/kern/kqueue/Makefile @@ -1,4 +1,4 @@ -# $OpenBSD: Makefile,v 1.25 2019/03/04 19:33:41 anton Exp $ +# $OpenBSD: Makefile,v 1.26 2019/03/04 19:35:28 anton Exp $ PROG= kqueue-test CFLAGS+=-Wall @@ -24,6 +24,8 @@ kq-tun: ${PROG} @-${SUDO} rm -f /dev/tun98 /dev/tun99 kq-pty-1: ${PROG} ${SUDO} ./${PROG} -T1 +kq-pty-2: ${PROG} + ${SUDO} ./${PROG} -T2 kq-signal: ${PROG} ./${PROG} -s kq-fdpass: ${PROG} @@ -48,6 +50,7 @@ TESTS+= kq-invalid-timer TESTS+= kq-pipe TESTS+= kq-process TESTS+= kq-pty-1 +TESTS+= kq-pty-2 TESTS+= kq-random TESTS+= kq-regress-1 TESTS+= kq-regress-2 diff --git a/regress/sys/kern/kqueue/kqueue-pty.c b/regress/sys/kern/kqueue/kqueue-pty.c index 7a2d7b7cb18..068eaabdaae 100644 --- a/regress/sys/kern/kqueue/kqueue-pty.c +++ b/regress/sys/kern/kqueue/kqueue-pty.c @@ -1,4 +1,4 @@ -/* $OpenBSD: kqueue-pty.c,v 1.9 2019/03/04 19:33:41 anton Exp $ */ +/* $OpenBSD: kqueue-pty.c,v 1.10 2019/03/04 19:35:28 anton Exp $ */ /* Written by Michael Shalayeff, 2003, Public Domain */ @@ -116,12 +116,44 @@ pty_rdrw(void) return (0); } +static int +pty_close(void) +{ + struct kevent ev[1]; + struct timespec ts; + int kq, massa, n, slave; + + if (openpty(&massa, &slave, NULL, NULL, NULL) == -1) + err(1, "openpty"); + + kq = kqueue(); + if (kq == -1) + err(1, "kqueue"); + + EV_SET(&ev[0], massa, EVFILT_READ, EV_ADD|EV_ENABLE, 0, 0, NULL); + if (kevent(kq, ev, 1, NULL, 0, NULL) == -1) + err(1, "kevent: add"); + + close(slave); + + ts.tv_sec = 5; + ts.tv_nsec = 0; + n = kevent(kq, NULL, 0, ev, 1, &ts); + ASSX(n == 1); + ASSX(ev[0].filter == EVFILT_READ); + ASSX(ev[0].flags & EV_EOF); + + return 0; +} + int do_pty(int n) { switch (n) { case 1: return pty_rdrw(); + case 2: + return pty_close(); default: errx(1, "unknown pty test number %d", n); } |