Module Name:    src
Committed By:   jruoho
Date:           Sat Oct 15 06:33:46 UTC 2011

Modified Files:
        src/distrib/sets/lists/tests: mi
        src/tests/kernel: Makefile
        src/tests/lib/libc/sys: t_poll.c
Removed Files:
        src/tests/kernel: t_poll3w.c

Log Message:
Follow the design principles of tests(7) by merging 't_poll3w' to 't_poll'
as a test case instead of separate file.


To generate a diff of this commit:
cvs rdiff -u -r1.404 -r1.405 src/distrib/sets/lists/tests/mi
cvs rdiff -u -r1.16 -r1.17 src/tests/kernel/Makefile
cvs rdiff -u -r1.1 -r0 src/tests/kernel/t_poll3w.c
cvs rdiff -u -r1.1 -r1.2 src/tests/lib/libc/sys/t_poll.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/distrib/sets/lists/tests/mi
diff -u src/distrib/sets/lists/tests/mi:1.404 src/distrib/sets/lists/tests/mi:1.405
--- src/distrib/sets/lists/tests/mi:1.404	Sat Oct 15 06:26:34 2011
+++ src/distrib/sets/lists/tests/mi	Sat Oct 15 06:33:46 2011
@@ -1,4 +1,4 @@
-# $NetBSD: mi,v 1.404 2011/10/15 06:26:34 jruoho Exp $
+# $NetBSD: mi,v 1.405 2011/10/15 06:33:46 jruoho Exp $
 #
 # Note: don't delete entries from here - mark them as "obsolete" instead.
 #
@@ -326,7 +326,7 @@
 ./usr/libdata/debug/usr/tests/kernel/t_lwpctl.debug			tests-kernel-tests	debug,atf
 ./usr/libdata/debug/usr/tests/kernel/t_mkdir.debug			tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/kernel/t_pipe.debug			tests-obsolete		obsolete
-./usr/libdata/debug/usr/tests/kernel/t_poll3w.debug			tests-kernel-tests	debug,atf
+./usr/libdata/debug/usr/tests/kernel/t_poll3w.debug			tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/kernel/t_pollts.debug			tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/kernel/t_posix_fadvise.debug		tests-obsolete		obsolete
 ./usr/libdata/debug/usr/tests/kernel/t_pty.debug			tests-kernel-tests	debug,atf
@@ -1852,7 +1852,7 @@
 ./usr/tests/kernel/t_lwpctl			tests-kernel-tests		atf
 ./usr/tests/kernel/t_mkdir			tests-obsolete			obsolete
 ./usr/tests/kernel/t_pipe			tests-obsolete			obsolete
-./usr/tests/kernel/t_poll3w			tests-kernel-tests		atf
+./usr/tests/kernel/t_poll3w			tests-obsolete			obsolete
 ./usr/tests/kernel/t_pollts			tests-obsolete			obsolete
 ./usr/tests/kernel/t_posix_fadvise		tests-obsolete			obsolete
 ./usr/tests/kernel/t_ps_strings			tests-kernel-tests		atf

Index: src/tests/kernel/Makefile
diff -u src/tests/kernel/Makefile:1.16 src/tests/kernel/Makefile:1.17
--- src/tests/kernel/Makefile:1.16	Sat Oct 15 06:26:33 2011
+++ src/tests/kernel/Makefile	Sat Oct 15 06:33:45 2011
@@ -1,4 +1,4 @@
-# $NetBSD: Makefile,v 1.16 2011/10/15 06:26:33 jruoho Exp $
+# $NetBSD: Makefile,v 1.17 2011/10/15 06:33:45 jruoho Exp $
 
 NOMAN=		# defined
 
@@ -10,7 +10,6 @@ TESTS_SUBDIRS=		kqueue tty
 
 TESTS_C=	t_lock
 TESTS_C+=	t_lwpctl
-TESTS_C+=	t_poll3w
 TESTS_C+=	t_pty
 TESTS_C+=	t_rnd
 TESTS_C+=	t_time

Index: src/tests/lib/libc/sys/t_poll.c
diff -u src/tests/lib/libc/sys/t_poll.c:1.1 src/tests/lib/libc/sys/t_poll.c:1.2
--- src/tests/lib/libc/sys/t_poll.c:1.1	Thu Jul  7 06:57:54 2011
+++ src/tests/lib/libc/sys/t_poll.c	Sat Oct 15 06:33:45 2011
@@ -1,4 +1,4 @@
-/*	$NetBSD: t_poll.c,v 1.1 2011/07/07 06:57:54 jruoho Exp $	*/
+/*	$NetBSD: t_poll.c,v 1.2 2011/10/15 06:33:45 jruoho Exp $	*/
 
 /*-
  * Copyright (c) 2011 The NetBSD Foundation, Inc.
@@ -30,15 +30,121 @@
  */
 
 #include <sys/time.h>
+#include <sys/wait.h>
 
 #include <atf-c.h>
 #include <errno.h>
 #include <fcntl.h>
 #include <paths.h>
 #include <poll.h>
+#include <stdio.h>
 #include <signal.h>
 #include <unistd.h>
 
+static int desc;
+
+static void
+child1(void)
+{
+	struct pollfd pfd;
+
+	pfd.fd = desc;
+	pfd.events = POLLIN | POLLHUP | POLLOUT;
+
+	(void)poll(&pfd, 1, 2000);
+	(void)printf("child1 exit\n");
+}
+
+static void
+child2(void)
+{
+	struct pollfd pfd;
+
+	pfd.fd = desc;
+	pfd.events = POLLIN | POLLHUP | POLLOUT;
+
+	(void)sleep(1);
+	(void)poll(&pfd, 1, INFTIM);
+	(void)printf("child2 exit\n");
+}
+
+static void
+child3(void)
+{
+	struct pollfd pfd;
+
+	(void)sleep(5);
+
+	pfd.fd = desc;
+	pfd.events = POLLIN | POLLHUP | POLLOUT;
+
+	(void)poll(&pfd, 1, INFTIM);
+	(void)printf("child3 exit\n");
+}
+
+ATF_TC(poll_3way);
+ATF_TC_HEAD(poll_3way, tc)
+{
+	atf_tc_set_md_var(tc, "timeout", "15");
+	atf_tc_set_md_var(tc, "descr",
+	    "Check for 3-way collision for descriptor. First child comes "
+	    "and polls on descriptor, second child comes and polls, first "
+	    "child times out and exits, third child comes and polls. When "
+	    "the wakeup event happens, the two remaining children should "
+	    "both be awaken. (kern/17517)");
+}
+
+ATF_TC_BODY(poll_3way, tc)
+{
+	int pf[2];
+	int status, i;
+	pid_t pid;
+
+	pipe(pf);
+	desc = pf[0];
+
+	pid = fork();
+	ATF_REQUIRE(pid >= 0);
+
+	if (pid == 0) {
+		(void)close(pf[1]);
+		child1();
+		_exit(0);
+		/* NOTREACHED */
+	}
+
+	pid = fork();
+	ATF_REQUIRE(pid >= 0);
+
+	if (pid == 0) {
+		(void)close(pf[1]);
+		child2();
+		_exit(0);
+		/* NOTREACHED */
+	}
+
+	pid = fork();
+	ATF_REQUIRE( pid >= 0);
+
+	if (pid == 0) {
+		(void)close(pf[1]);
+		child3();
+		_exit(0);
+		/* NOTREACHED */
+	}
+
+	(void)sleep(10);
+
+	(void)printf("parent write\n");
+
+	ATF_REQUIRE(write(pf[1], "konec\n", 6) == 6);
+
+	for(i = 0; i < 3; ++i)
+		(void)wait(&status);
+
+	(void)printf("parent terminated\n");
+}
+
 ATF_TC(poll_basic);
 ATF_TC_HEAD(poll_basic, tc)
 {
@@ -277,6 +383,7 @@ ATF_TC_BODY(pollts_sigmask, tc)
 ATF_TP_ADD_TCS(tp)
 {
 
+	ATF_TP_ADD_TC(tp, poll_3way);
 	ATF_TP_ADD_TC(tp, poll_basic);
 	ATF_TP_ADD_TC(tp, poll_err);
 	ATF_TP_ADD_TC(tp, pollts_basic);

Reply via email to