Module Name: src Committed By: pooka Date: Sun Jan 2 12:58:18 UTC 2011
Modified Files: src/tests/fs/tmpfs: t_renamerace.c src/tests/fs/vfs: t_renamerace.c src/tests/rump/rumpkern: t_lwproc.c src/tests/rump/rumpvfs: t_p2kifs.c src/tests/syscall: t_cmsg.c Log Message: + rump_lwproc_newproc -> rump_lwproc_rfork() + add a tess for rump_lwproc_rfork() To generate a diff of this commit: cvs rdiff -u -r1.9 -r1.10 src/tests/fs/tmpfs/t_renamerace.c cvs rdiff -u -r1.14 -r1.15 src/tests/fs/vfs/t_renamerace.c cvs rdiff -u -r1.4 -r1.5 src/tests/rump/rumpkern/t_lwproc.c cvs rdiff -u -r1.2 -r1.3 src/tests/rump/rumpvfs/t_p2kifs.c cvs rdiff -u -r1.15 -r1.16 src/tests/syscall/t_cmsg.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/tests/fs/tmpfs/t_renamerace.c diff -u src/tests/fs/tmpfs/t_renamerace.c:1.9 src/tests/fs/tmpfs/t_renamerace.c:1.10 --- src/tests/fs/tmpfs/t_renamerace.c:1.9 Wed Sep 1 19:41:27 2010 +++ src/tests/fs/tmpfs/t_renamerace.c Sun Jan 2 12:58:17 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_renamerace.c,v 1.9 2010/09/01 19:41:27 pooka Exp $ */ +/* $NetBSD: t_renamerace.c,v 1.10 2011/01/02 12:58:17 pooka Exp $ */ /* * Modified for rump and atf from a program supplied @@ -105,7 +105,7 @@ if (rump_sys_mkdir("/dir", 0777) == -1) atf_tc_fail_errno("cannot create directory"); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); RL(wrkpid = rump_sys_getpid()); pthread_create(&pt[0], NULL, r2w1, NULL); pthread_create(&pt[1], NULL, r2w2, NULL); Index: src/tests/fs/vfs/t_renamerace.c diff -u src/tests/fs/vfs/t_renamerace.c:1.14 src/tests/fs/vfs/t_renamerace.c:1.15 --- src/tests/fs/vfs/t_renamerace.c:1.14 Thu Nov 11 17:44:44 2010 +++ src/tests/fs/vfs/t_renamerace.c Sun Jan 2 12:58:17 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_renamerace.c,v 1.14 2010/11/11 17:44:44 pooka Exp $ */ +/* $NetBSD: t_renamerace.c,v 1.15 2011/01/02 12:58:17 pooka Exp $ */ /* * Modified for rump and atf from a program supplied @@ -90,7 +90,7 @@ if (FSTYPE_RUMPFS(tc)) atf_tc_skip("rename not supported by fs"); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); RL(wrkpid = rump_sys_getpid()); RL(rump_sys_chdir(mp)); @@ -133,7 +133,7 @@ FSTYPE_MSDOS(tc)) atf_tc_expect_signal(-1, "PR kern/43626"); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); RL(wrkpid = rump_sys_getpid()); RL(rump_sys_chdir(mp)); Index: src/tests/rump/rumpkern/t_lwproc.c diff -u src/tests/rump/rumpkern/t_lwproc.c:1.4 src/tests/rump/rumpkern/t_lwproc.c:1.5 --- src/tests/rump/rumpkern/t_lwproc.c:1.4 Fri Oct 29 15:32:51 2010 +++ src/tests/rump/rumpkern/t_lwproc.c Sun Jan 2 12:58:17 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_lwproc.c,v 1.4 2010/10/29 15:32:51 pooka Exp $ */ +/* $NetBSD: t_lwproc.c,v 1.5 2011/01/02 12:58:17 pooka Exp $ */ /* * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -36,6 +36,7 @@ #include <atf-c.h> #include <err.h> #include <errno.h> +#include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> @@ -62,7 +63,7 @@ ATF_REQUIRE_EQ(rump_pub_lwproc_newlwp(37), ESRCH); l = rump_pub_lwproc_curlwp(); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); ATF_REQUIRE(rump_pub_lwproc_curlwp() != l); l = rump_pub_lwproc_curlwp(); @@ -85,10 +86,10 @@ struct lwp *l1, *l2; rump_init(); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); l1 = rump_pub_lwproc_curlwp(); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); l2 = rump_pub_lwproc_curlwp(); RL(rump_sys_setuid(22)); @@ -119,11 +120,11 @@ rump_init(); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); RL(rump_sys_setuid(66)); ATF_REQUIRE_EQ(rump_sys_getuid(), 66); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); ATF_REQUIRE_EQ(rump_sys_getuid(), 66); /* release lwp and proc */ @@ -149,7 +150,7 @@ rump_init(); - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); mypid = rump_sys_getpid(); RL(rump_sys_setuid(375)); @@ -240,6 +241,65 @@ rump_pub_lwproc_switch(l); } +ATF_TC(rfork); +ATF_TC_HEAD(rfork, tc) +{ + + atf_tc_set_md_var(tc, "descr", "check that fork shares fd's"); +} + +ATF_TC_BODY(rfork, tc) +{ + struct stat sb; + struct lwp *l, *l2; + int fd; + + RZ(rump_init()); + + ATF_REQUIRE_EQ(rump_pub_lwproc_rfork(RUMP_RFFDG|RUMP_RFCFDG), EINVAL); + + RZ(rump_pub_lwproc_rfork(0)); + l = rump_pub_lwproc_curlwp(); + + RL(fd = rump_sys_open("/file", O_RDWR | O_CREAT, 0777)); + + /* ok, first check rfork(RUMP_RFCFDG) does *not* preserve fd's */ + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); + ATF_REQUIRE_ERRNO(EBADF, rump_sys_write(fd, &fd, sizeof(fd)) == -1); + + /* then check that rfork(0) does */ + rump_pub_lwproc_switch(l); + RZ(rump_pub_lwproc_rfork(0)); + ATF_REQUIRE_EQ(rump_sys_write(fd, &fd, sizeof(fd)), sizeof(fd)); + RL(rump_sys_fstat(fd, &sb)); + l2 = rump_pub_lwproc_curlwp(); + + /* + * check that the shared fd table is really shared by + * closing fd in parent + */ + rump_pub_lwproc_switch(l); + RL(rump_sys_close(fd)); + rump_pub_lwproc_switch(l2); + ATF_REQUIRE_ERRNO(EBADF, rump_sys_fstat(fd, &sb) == -1); + + /* redo, this time copying the fd table instead of sharing it */ + rump_pub_lwproc_releaselwp(); + rump_pub_lwproc_switch(l); + RL(fd = rump_sys_open("/file", O_RDWR, 0777)); + RZ(rump_pub_lwproc_rfork(RUMP_RFFDG)); + ATF_REQUIRE_EQ(rump_sys_write(fd, &fd, sizeof(fd)), sizeof(fd)); + RL(rump_sys_fstat(fd, &sb)); + l2 = rump_pub_lwproc_curlwp(); + + /* check that the fd table is copied */ + rump_pub_lwproc_switch(l); + RL(rump_sys_close(fd)); + rump_pub_lwproc_switch(l2); + RL(rump_sys_fstat(fd, &sb)); + ATF_REQUIRE_EQ(sb.st_size, sizeof(fd)); +} + ATF_TP_ADD_TCS(tp) { @@ -250,6 +310,7 @@ ATF_TP_ADD_TC(tp, nolwprelease); ATF_TP_ADD_TC(tp, nolwp); ATF_TP_ADD_TC(tp, nullswitch); + ATF_TP_ADD_TC(tp, rfork); return atf_no_error(); } Index: src/tests/rump/rumpvfs/t_p2kifs.c diff -u src/tests/rump/rumpvfs/t_p2kifs.c:1.2 src/tests/rump/rumpvfs/t_p2kifs.c:1.3 --- src/tests/rump/rumpvfs/t_p2kifs.c:1.2 Tue Dec 14 20:09:43 2010 +++ src/tests/rump/rumpvfs/t_p2kifs.c Sun Jan 2 12:58:17 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_p2kifs.c,v 1.2 2010/12/14 20:09:43 pooka Exp $ */ +/* $NetBSD: t_p2kifs.c,v 1.3 2011/01/02 12:58:17 pooka Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -67,7 +67,7 @@ RL(rump_sys_mkdir("/" TESTFILE, 0777)); /* need stable lwp for componentname */ - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); /* try it once with the right path */ cn = rump_pub_makecn(RUMP_NAMEI_LOOKUP, 0, pathstr, strlen(pathstr), Index: src/tests/syscall/t_cmsg.c diff -u src/tests/syscall/t_cmsg.c:1.15 src/tests/syscall/t_cmsg.c:1.16 --- src/tests/syscall/t_cmsg.c:1.15 Wed Sep 1 19:41:28 2010 +++ src/tests/syscall/t_cmsg.c Sun Jan 2 12:58:17 2011 @@ -1,4 +1,4 @@ -/* $NetBSD: t_cmsg.c,v 1.15 2010/09/01 19:41:28 pooka Exp $ */ +/* $NetBSD: t_cmsg.c,v 1.16 2011/01/02 12:58:17 pooka Exp $ */ #include <sys/types.h> #include <sys/mount.h> @@ -91,8 +91,7 @@ rump_init(); - /* create first (non-proc0) process to be used in test */ - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); l1 = rump_pub_lwproc_curlwp(); /* create unix socket and bind it to a path */ @@ -109,7 +108,7 @@ atf_tc_fail_errno("socket 1 listen"); /* create second process for test */ - RZ(rump_pub_lwproc_newproc()); + RZ(rump_pub_lwproc_rfork(RUMP_RFCFDG)); l2 = rump_pub_lwproc_curlwp(); /* connect to unix domain socket */