Source-Changes-HG archive
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]
[src/trunk]: src/regress/sys/kern/kqueue Basic set of kqueue tests for variou...
details: https://anonhg.NetBSD.org/src/rev/fcdb857c2200
branches: trunk
changeset: 537615:fcdb857c2200
user: jdolecek <jdolecek%NetBSD.org@localhost>
date: Thu Oct 03 07:46:02 2002 +0000
description:
Basic set of kqueue tests for various filters. Most of files based
on code written by Luke Mewburn.
These need to be compiled with kqueue headers and kqueue-enabled libc.
diffstat:
regress/sys/kern/kqueue/Makefile | 10 +
regress/sys/kern/kqueue/Makefile.inc | 7 +
regress/sys/kern/kqueue/ioctl/Makefile | 14 +
regress/sys/kern/kqueue/ioctl/ioctl.c | 81 +++
regress/sys/kern/kqueue/proc/Makefile | 6 +
regress/sys/kern/kqueue/proc/Makefile.inc | 3 +
regress/sys/kern/kqueue/proc/proc1/Makefile | 7 +
regress/sys/kern/kqueue/proc/proc1/proc1.c | 146 ++++++
regress/sys/kern/kqueue/proc/proc2/Makefile | 7 +
regress/sys/kern/kqueue/proc/proc2/proc2.c | 132 +++++
regress/sys/kern/kqueue/read/Makefile | 10 +
regress/sys/kern/kqueue/read/Makefile.inc | 3 +
regress/sys/kern/kqueue/read/fifo/Makefile | 7 +
regress/sys/kern/kqueue/read/fifo/fifo.c | 128 +++++
regress/sys/kern/kqueue/read/file/Makefile | 14 +
regress/sys/kern/kqueue/read/file/file.c | 111 ++++
regress/sys/kern/kqueue/read/pipe1/Makefile | 7 +
regress/sys/kern/kqueue/read/pipe1/pipe1.c | 91 +++
regress/sys/kern/kqueue/read/pipe2/Makefile | 7 +
regress/sys/kern/kqueue/read/pipe2/pipe2.c | 78 +++
regress/sys/kern/kqueue/read/ttypty_master/Makefile | 9 +
regress/sys/kern/kqueue/read/ttypty_master/ttypty_master.c | 136 +++++
regress/sys/kern/kqueue/read/ttypty_slave/Makefile | 9 +
regress/sys/kern/kqueue/read/ttypty_slave/ttypty_slave.c | 108 ++++
regress/sys/kern/kqueue/sig/Makefile | 7 +
regress/sys/kern/kqueue/sig/sig.c | 125 +++++
regress/sys/kern/kqueue/vnode/Makefile | 7 +
regress/sys/kern/kqueue/vnode/revoke.c | 57 ++
regress/sys/kern/kqueue/vnode/vnode.c | 152 ++++++
regress/sys/kern/kqueue/vnode/write.c | 72 ++
regress/sys/kern/kqueue/write/Makefile | 10 +
regress/sys/kern/kqueue/write/Makefile.inc | 3 +
regress/sys/kern/kqueue/write/fifo/Makefile | 7 +
regress/sys/kern/kqueue/write/fifo/fifo.c | 134 +++++
regress/sys/kern/kqueue/write/inet/Makefile | 7 +
regress/sys/kern/kqueue/write/inet/inet.c | 290 ++++++++++++
regress/sys/kern/kqueue/write/pipe/Makefile | 7 +
regress/sys/kern/kqueue/write/pipe/pipe.c | 102 ++++
regress/sys/kern/kqueue/write/pipe2/Makefile | 7 +
regress/sys/kern/kqueue/write/pipe2/pipe2.c | 84 +++
regress/sys/kern/kqueue/write/ttypty_master/Makefile | 9 +
regress/sys/kern/kqueue/write/ttypty_master/ttypty_master.c | 118 ++++
regress/sys/kern/kqueue/write/ttypty_slave/Makefile | 9 +
regress/sys/kern/kqueue/write/ttypty_slave/ttypty_slave.c | 108 ++++
44 files changed, 2446 insertions(+), 0 deletions(-)
diffs (truncated from 2622 to 300 lines):
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/Makefile Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,10 @@
+# $NetBSD: Makefile,v 1.1.1.1 2002/10/03 07:46:02 jdolecek Exp $
+
+SUBDIR+= ioctl
+SUBDIR+= proc
+SUBDIR+= read
+SUBDIR+= write
+SUBDIR+= sig
+SUBDIR+= vnode
+
+.include <bsd.subdir.mk>
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/Makefile.inc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/Makefile.inc Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,7 @@
+# $NetBSD: Makefile.inc,v 1.1.1.1 2002/10/03 07:46:02 jdolecek Exp $
+
+WARNS=2
+NOMAN=
+PROG=${.CURDIR:T}
+
+# LDFLAGS=-static
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/ioctl/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/ioctl/Makefile Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,14 @@
+# $NetBSD: Makefile,v 1.1.1.1 2002/10/03 07:46:03 jdolecek Exp $
+
+.include <bsd.prog.mk>
+
+regress: ${PROG}
+ for i in 0 1 2 3 4 5; do \
+ ./${PROG} $$i; \
+ done
+ ./${PROG} 6 || true
+ for i in WRITE READ AIO VNODE PROC SIGNAL; do \
+ ./${PROG} EVFILT_$$i; \
+ done
+ ./${PROG} NOTREG_FILTER || true
+ @echo Test ended without apparent errors
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/ioctl/ioctl.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/ioctl/ioctl.c Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,81 @@
+/* $NetBSD: ioctl.c,v 1.1.1.1 2002/10/03 07:46:03 jdolecek Exp $ */
+
+/*-
+ * Copyright (c) 2002 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Luke Mewburn.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+#include <sys/param.h>
+#include <sys/event.h>
+#include <sys/ioctl.h>
+
+#include <err.h>
+#include <errno.h>
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+
+int
+main(int argc, char **argv)
+{
+ struct kfilter_mapping km;
+ int kq;
+ long filter;
+ char *ep, buf[100];
+
+ if (argc != 2)
+ errx(1, "Usage: %s filter", argv[0]);
+
+ kq = kqueue();
+ if (kq < 0)
+ err(1, "kqueue");
+
+ filter = strtol(argv[1], &ep, 10);
+ if (ep[0] == '\0') { /* do number -> name */
+ km.name = buf;
+ km.len = sizeof(buf) - 1;
+ km.filter = filter;
+ if (ioctl(kq, KFILTER_BYFILTER, &km) == -1)
+ err(1, "KFILTER_BYFILTER `%d'", km.filter);
+ printf("Map %d -> %s\n", km.filter, km.name);
+ } else { /* do name -> number */
+ km.name = argv[1];
+ if (ioctl(kq, KFILTER_BYNAME, &km) == -1)
+ err(1, "KFILTER_BYNAME `%s'", km.name);
+ printf("Map %s -> %d\n", km.name, km.filter);
+ }
+
+ return (0);
+}
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/proc/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/proc/Makefile Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,6 @@
+# $NetBSD: Makefile,v 1.1.1.1 2002/10/03 07:46:03 jdolecek Exp $
+
+SUBDIR+= proc1
+SUBDIR+= proc2
+
+.include <bsd.subdir.mk>
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/proc/Makefile.inc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/proc/Makefile.inc Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,3 @@
+# $NetBSD: Makefile.inc,v 1.1.1.1 2002/10/03 07:46:03 jdolecek Exp $
+
+.include "../Makefile.inc"
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/proc/proc1/Makefile
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/proc/proc1/Makefile Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,7 @@
+# $NetBSD: Makefile,v 1.1.1.1 2002/10/03 07:46:03 jdolecek Exp $
+
+.include <bsd.prog.mk>
+
+regress: ${PROG}
+ @./${PROG}
+ @echo EVFILT_PROC test done
diff -r fe24b5377778 -r fcdb857c2200 regress/sys/kern/kqueue/proc/proc1/proc1.c
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/regress/sys/kern/kqueue/proc/proc1/proc1.c Thu Oct 03 07:46:02 2002 +0000
@@ -0,0 +1,146 @@
+/* $NetBSD: proc1.c,v 1.1.1.1 2002/10/03 07:46:03 jdolecek Exp $ */
+
+/*-
+ * Copyright (c) 2002 The NetBSD Foundation, Inc.
+ * All rights reserved.
+ *
+ * This code is derived from software contributed to The NetBSD Foundation
+ * by Luke Mewburn and Jaromir Dolecek.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. All advertising materials mentioning features or use of this software
+ * must display the following acknowledgement:
+ * This product includes software developed by the NetBSD
+ * Foundation, Inc. and its contributors.
+ * 4. Neither the name of The NetBSD Foundation nor the names of its
+ * contributors may be used to endorse or promote products derived
+ * from this software without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
+ * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
+ * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
+ * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
+ * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
+ * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
+ * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
+ * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
+ * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
+ * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
+ * POSSIBILITY OF SUCH DAMAGE.
+ */
+
+/*
+ * test basic EVFILT_PROC functionality
+ * this used to trigger problem fixed in rev. 1.1.1.1.2.13 of
+ * sys/kern/kern_event.c, too
+ */
+
+#include <sys/param.h>
+#include <sys/event.h>
+#include <sys/wait.h>
+
+#include <err.h>
+#include <errno.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <unistd.h>
+#include <inttypes.h>
+
+static int doevents(void);
+
+static int
+doevents(void)
+{
+ pid_t ch;
+ int status;
+ char * const argv[] = { "true" };
+ char * const envp[] = { "FOO=BAZ" };
+
+ /* Ensure parent is ready */
+ sleep(1);
+
+ /* Do fork */
+ switch((ch = fork())) {
+ case 0:
+ exit(EXIT_SUCCESS);
+ default:
+ wait(&status);
+ break;
+ }
+
+ /* Exec */
+ execve("/usr/bin/true", argv, envp);
+
+ /* NOTREACHED */
+ return EXIT_SUCCESS;
+}
+
+int
+main(int argc, char **argv)
+{
+ int kq, n;
+ struct kevent event[1];
+ pid_t child;
+ int want;
+ int status;
+
+ kq = kqueue();
+ if (kq < 0)
+ err(1, "kqueue");
+
+ /* fork a child for doing the events */
+ switch((child = fork())) {
+ case 0:
+ return (doevents());
+ case -1:
+ err(EXIT_FAILURE, "fork");
+ /* NOTREACHED */
+ default:
+ break;
+ }
+
+ sleep(1); /* give child some time to come up */
+
+ event[0].ident = child;
+ event[0].filter = EVFILT_PROC;
+ event[0].flags = EV_ADD | EV_ENABLE;
+ event[0].fflags = NOTE_EXIT | NOTE_FORK | NOTE_EXEC; /* | NOTE_TRACK;*/
+ want = NOTE_EXIT | NOTE_FORK | NOTE_EXEC;
+ n = kevent(kq, event, 1, NULL, 0, NULL);
+ if (n < 0)
+ err(1, "kevent(1)");
+
+ /* wait until we get all events we want */
+ for (;want;) {
+ n = kevent(kq, NULL, 0, event, 1, NULL);
+ if (n < 0)
+ err(1, "kevent(2)");
+ printf("PID %5ld ", event[0].ident);
+ if (event[0].fflags & NOTE_EXIT) {
+ want &= ~NOTE_EXIT;
+ printf(" EXIT");
+ }
+ if (event[0].fflags & NOTE_EXEC) {
+ want &= ~NOTE_EXEC;
+ printf(" EXEC");
+ }
+ if (event[0].fflags & NOTE_FORK) {
+ want &= ~NOTE_FORK;
+ printf(" FORK");
+ }
+ if (event[0].fflags & NOTE_CHILD)
+ printf(" FORK, parent = %" PRId64, event[0].data);
+ printf("\n");
Home |
Main Index |
Thread Index |
Old Index