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