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