Module Name: src Committed By: pgoyette Date: Fri Apr 29 22:17:50 UTC 2022
Modified Files: src/distrib/sets/lists/debug: mi src/distrib/sets/lists/tests: mi src/etc/mtree: NetBSD.dist.tests src/tests/lib/libc: Makefile Added Files: src/tests/lib/libc/kevent_nullmnt: Makefile h_nullmnt.c t_nullmnt.sh Log Message: Add a new test for PR kern/56713 and set to expected_failure for now. To generate a diff of this commit: cvs rdiff -u -r1.376 -r1.377 src/distrib/sets/lists/debug/mi cvs rdiff -u -r1.1200 -r1.1201 src/distrib/sets/lists/tests/mi cvs rdiff -u -r1.190 -r1.191 src/etc/mtree/NetBSD.dist.tests cvs rdiff -u -r1.51 -r1.52 src/tests/lib/libc/Makefile cvs rdiff -u -r0 -r1.1 src/tests/lib/libc/kevent_nullmnt/Makefile \ src/tests/lib/libc/kevent_nullmnt/h_nullmnt.c \ src/tests/lib/libc/kevent_nullmnt/t_nullmnt.sh 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/debug/mi diff -u src/distrib/sets/lists/debug/mi:1.376 src/distrib/sets/lists/debug/mi:1.377 --- src/distrib/sets/lists/debug/mi:1.376 Fri Apr 8 23:35:51 2022 +++ src/distrib/sets/lists/debug/mi Fri Apr 29 22:17:49 2022 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.376 2022/04/08 23:35:51 riastradh Exp $ +# $NetBSD: mi,v 1.377 2022/04/29 22:17:49 pgoyette Exp $ ./etc/mtree/set.debug comp-sys-root ./usr/lib comp-sys-usr compatdir ./usr/lib/i18n/libBIG5_g.a comp-c-debuglib debuglib,compatfile @@ -2041,6 +2041,7 @@ ./usr/libdata/debug/usr/tests/lib/libc/ieeefp/t_subnormal.debug tests-obsolete obsolete,compattestfile ./usr/libdata/debug/usr/tests/lib/libc/inet/t_inet_addr.debug tests-lib-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/lib/libc/inet/t_inet_network.debug tests-lib-debug debug,atf,compattestfile +./usr/libdata/debug/usr/tests/lib/libc/kevent_nullmnt/h_nullmnt.debug tests-lib-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/lib/libc/locale/t_btowc.debug tests-lib-debug debug,atf,compattestfile ./usr/libdata/debug/usr/tests/lib/libc/locale/t_ctype1.debug tests-obsolete obsolete,compattestfile ./usr/libdata/debug/usr/tests/lib/libc/locale/t_ctype2.debug tests-obsolete obsolete,compattestfile Index: src/distrib/sets/lists/tests/mi diff -u src/distrib/sets/lists/tests/mi:1.1200 src/distrib/sets/lists/tests/mi:1.1201 --- src/distrib/sets/lists/tests/mi:1.1200 Thu Apr 28 21:38:38 2022 +++ src/distrib/sets/lists/tests/mi Fri Apr 29 22:17:50 2022 @@ -1,4 +1,4 @@ -# $NetBSD: mi,v 1.1200 2022/04/28 21:38:38 rillig Exp $ +# $NetBSD: mi,v 1.1201 2022/04/29 22:17:50 pgoyette Exp $ # # Note: don't delete entries from here - mark them as "obsolete" instead. # @@ -103,6 +103,7 @@ ./usr/libdata/debug/usr/tests/lib/libc/hash tests-lib-debug compattestfile,atf ./usr/libdata/debug/usr/tests/lib/libc/ieeefp tests-obsolete obsolete ./usr/libdata/debug/usr/tests/lib/libc/inet tests-lib-debug compattestfile,atf +./usr/libdata/debug/usr/tests/lib/libc/kevent_nullmnt tests-lib-debug compattestfile,atf ./usr/libdata/debug/usr/tests/lib/libc/locale tests-lib-debug compattestfile,atf ./usr/libdata/debug/usr/tests/lib/libc/membar tests-lib-debug compattestfile,atf ./usr/libdata/debug/usr/tests/lib/libc/misc tests-lib-debug compattestfile,atf @@ -2932,6 +2933,11 @@ ./usr/tests/lib/libc/inet/Kyuafile tests-lib-tests compattestfile,atf,kyua ./usr/tests/lib/libc/inet/t_inet_addr tests-lib-tests compattestfile,atf ./usr/tests/lib/libc/inet/t_inet_network tests-lib-tests compattestfile,atf +./usr/tests/lib/libc/kevent_nullmnt tests-lib-tests compattestfile,atf +./usr/tests/lib/libc/kevent_nullmnt/Atffile tests-lib-tests compattestfile,atf +./usr/tests/lib/libc/kevent_nullmnt/Kyuafile tests-lib-tests compattestfile,atf,kyua +./usr/tests/lib/libc/kevent_nullmnt/h_nullmnt tests-lib-tests compattestfile,atf +./usr/tests/lib/libc/kevent_nullmnt/t_nullmnt tests-lib-tests compattestfile,atf ./usr/tests/lib/libc/locale tests-lib-tests compattestfile,atf ./usr/tests/lib/libc/locale/Atffile tests-lib-tests compattestfile,atf ./usr/tests/lib/libc/locale/Kyuafile tests-lib-tests compattestfile,atf,kyua Index: src/etc/mtree/NetBSD.dist.tests diff -u src/etc/mtree/NetBSD.dist.tests:1.190 src/etc/mtree/NetBSD.dist.tests:1.191 --- src/etc/mtree/NetBSD.dist.tests:1.190 Fri Apr 8 23:35:52 2022 +++ src/etc/mtree/NetBSD.dist.tests Fri Apr 29 22:17:50 2022 @@ -1,4 +1,4 @@ -# $NetBSD: NetBSD.dist.tests,v 1.190 2022/04/08 23:35:52 riastradh Exp $ +# $NetBSD: NetBSD.dist.tests,v 1.191 2022/04/29 22:17:50 pgoyette Exp $ ./usr/libdata/debug/usr/tests ./usr/libdata/debug/usr/tests/atf @@ -85,6 +85,7 @@ ./usr/libdata/debug/usr/tests/lib/libc/hash ./usr/libdata/debug/usr/tests/lib/libc/inet ./usr/libdata/debug/usr/tests/lib/libc/locale +./usr/libdata/debug/usr/tests/lib/libc/kevent_nullmnt ./usr/libdata/debug/usr/tests/lib/libc/membar ./usr/libdata/debug/usr/tests/lib/libc/misc ./usr/libdata/debug/usr/tests/lib/libc/net @@ -288,6 +289,7 @@ ./usr/tests/lib/libc/hash/data ./usr/tests/lib/libc/inet ./usr/tests/lib/libc/locale +./usr/tests/lib/libc/kevent_nullmnt ./usr/tests/lib/libc/membar ./usr/tests/lib/libc/misc ./usr/tests/lib/libc/net Index: src/tests/lib/libc/Makefile diff -u src/tests/lib/libc/Makefile:1.51 src/tests/lib/libc/Makefile:1.52 --- src/tests/lib/libc/Makefile:1.51 Fri Apr 8 23:35:52 2022 +++ src/tests/lib/libc/Makefile Fri Apr 29 22:17:49 2022 @@ -1,4 +1,4 @@ -# $NetBSD: Makefile,v 1.51 2022/04/08 23:35:52 riastradh Exp $ +# $NetBSD: Makefile,v 1.52 2022/04/29 22:17:49 pgoyette Exp $ .include "Makefile.inc" .include <bsd.own.mk> @@ -11,6 +11,7 @@ TESTS_SUBDIRS+= db TESTS_SUBDIRS+= gen TESTS_SUBDIRS+= hash TESTS_SUBDIRS+= inet +TESTS_SUBDIRS+= kevent_nullmnt TESTS_SUBDIRS+= locale TESTS_SUBDIRS+= membar TESTS_SUBDIRS+= misc Added files: Index: src/tests/lib/libc/kevent_nullmnt/Makefile diff -u /dev/null src/tests/lib/libc/kevent_nullmnt/Makefile:1.1 --- /dev/null Fri Apr 29 22:17:50 2022 +++ src/tests/lib/libc/kevent_nullmnt/Makefile Fri Apr 29 22:17:49 2022 @@ -0,0 +1,14 @@ +# $NetBSD: Makefile,v 1.1 2022/04/29 22:17:49 pgoyette Exp $ + +.include <bsd.own.mk> + +TESTSDIR= ${TESTSBASE}/lib/libc/kevent_nullmnt + +TESTS_SH+= t_nullmnt + +BINDIR= ${TESTSDIR} +MKMAN= no + +PROGS+= h_nullmnt + +.include <bsd.test.mk> Index: src/tests/lib/libc/kevent_nullmnt/h_nullmnt.c diff -u /dev/null src/tests/lib/libc/kevent_nullmnt/h_nullmnt.c:1.1 --- /dev/null Fri Apr 29 22:17:50 2022 +++ src/tests/lib/libc/kevent_nullmnt/h_nullmnt.c Fri Apr 29 22:17:49 2022 @@ -0,0 +1,77 @@ +#include <err.h> +#include <fcntl.h> +#include <stdlib.h> +#include <unistd.h> + +#include <sys/event.h> +#include <sys/time.h> + +/* + * External set-up code is expected to do the equivalent of + * cd $TOPDIR + * mkdir realdir + * mkdir nulldir + * mount -t null $TOPDIR/realdir $TOPDIR/nulldir + * rm -f $TOPDIR/realdir/afile + * touch $TOPDIR/realdir/afile + * then execute this test program: + * ./h_nullmnt $TOPDIR/realdir/afile $TOPDIR/nulldir/afile + * + * The expected result is that the write() to the nullfile will + * queue up a preexisting kevent which will then be detected by + * the (second) call to kevent(); the failure mode is that the + * write()'s extension to the file is not seen, and the kevent + * call times out after 5 seconds. + * + * Clean-up code should undo the null mount and delete everything + * in the test directory. + */ + +int main(int argc, char **argv) +{ + int realfile, nullfile; + int kq, nev, rsize; + struct timespec timeout; + struct kevent eventlist; + const char outbuf[] = "new\n"; + char inbuf[20]; + + if (argc <= 2) + errx(EXIT_FAILURE, "insufficient args %d", argc); + + realfile = open(argv[1], O_RDONLY); + if (realfile == -1) + err(EXIT_FAILURE, "failed to open realfile %s", + argv[1]); + + nullfile = open(argv[2], O_WRONLY, O_APPEND); + if (nullfile == -1) + err(EXIT_FAILURE, "failed to open nullfile %s", + argv[2]); + + if ((kq = kqueue()) == -1) + err(EXIT_FAILURE, "Cannot create kqueue"); + + timeout.tv_sec = 5; + timeout.tv_nsec = 0; + + EV_SET(&eventlist, realfile, + EVFILT_VNODE, EV_ADD | EV_ENABLE | EV_CLEAR, + NOTE_WRITE | NOTE_EXTEND, 0, 0); + if (kevent(kq, &eventlist, 1, NULL, 0, NULL) == -1) + err(EXIT_FAILURE, "Failed to set eventlist for fd %d", + realfile); + + rsize = read(realfile, &inbuf, sizeof(inbuf)); + if (rsize) + errx(EXIT_FAILURE, "Ooops we got %d bytes of data!\n", rsize); + + write(nullfile, &outbuf, sizeof(outbuf) - 1); + + nev = kevent(kq, NULL, 0, &eventlist, 1, &timeout); + if (nev == -1) + err(EXIT_FAILURE, "Failed to retrieve event"); + + errx((nev == 0) ? EXIT_FAILURE : EXIT_SUCCESS, + "Retrieved %d events, first 0x%x", nev, eventlist.flags); +} Index: src/tests/lib/libc/kevent_nullmnt/t_nullmnt.sh diff -u /dev/null src/tests/lib/libc/kevent_nullmnt/t_nullmnt.sh:1.1 --- /dev/null Fri Apr 29 22:17:50 2022 +++ src/tests/lib/libc/kevent_nullmnt/t_nullmnt.sh Fri Apr 29 22:17:49 2022 @@ -0,0 +1,35 @@ +atf_test_case nullmnt cleanup +nullmnt_head() +{ + atf_set "descr" "ensure file events traverse null-mounts" +} + +nullmnt_body() +{ + srcdir=$(atf_get_srcdir) + helper=${srcdir}/h_nullmnt + + mkdir ${srcdir}/realdir + mkdir ${srcdir}/nulldir + mount -t null ${srcdir}/realdir ${srcdir}/nulldir + rm -f ${srcdir}/realdir/afile + touch ${srcdir}/realdir/afile + + atf_expect_fail "PR kern/56713" + + atf_check -e ignore -o ignore -s exit:0 \ + ${helper} ${srcdir}/realdir/afile ${srcdir}/nulldir/afile + +} + +nullmnt_cleanup() +{ + srcdir=$(atf_get_srcdir) + umount ${srcdir}/nulldir + rm -rf ${srcdir}/realdir ${srcdir}/nulldir +} + +atf_init_test_cases() +{ + atf_add_test_case nullmnt +}