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);