Fri Oct 29 15:32:51 2010 UTC ()
implicit pid is 1 instead of 0 now


(pooka)
diff -r1.3 -r1.4 src/tests/rump/rumpkern/t_lwproc.c

cvs diff -r1.3 -r1.4 src/tests/rump/rumpkern/t_lwproc.c (switch to unified diff)

--- src/tests/rump/rumpkern/t_lwproc.c 2010/09/07 17:09:28 1.3
+++ src/tests/rump/rumpkern/t_lwproc.c 2010/10/29 15:32:51 1.4
@@ -1,255 +1,255 @@ @@ -1,255 +1,255 @@
1/* $NetBSD: t_lwproc.c,v 1.3 2010/09/07 17:09:28 pooka Exp $ */ 1/* $NetBSD: t_lwproc.c,v 1.4 2010/10/29 15:32:51 pooka Exp $ */
2 2
3/* 3/*
4 * Copyright (c) 2010 The NetBSD Foundation, Inc. 4 * Copyright (c) 2010 The NetBSD Foundation, Inc.
5 * All rights reserved. 5 * All rights reserved.
6 * 6 *
7 * Redistribution and use in source and binary forms, with or without 7 * Redistribution and use in source and binary forms, with or without
8 * modification, are permitted provided that the following conditions 8 * modification, are permitted provided that the following conditions
9 * are met: 9 * are met:
10 * 1. Redistributions of source code must retain the above copyright 10 * 1. Redistributions of source code must retain the above copyright
11 * notice, this list of conditions and the following disclaimer. 11 * notice, this list of conditions and the following disclaimer.
12 * 2. Redistributions in binary form must reproduce the above copyright 12 * 2. Redistributions in binary form must reproduce the above copyright
13 * notice, this list of conditions and the following disclaimer in the 13 * notice, this list of conditions and the following disclaimer in the
14 * documentation and/or other materials provided with the distribution. 14 * documentation and/or other materials provided with the distribution.
15 * 15 *
16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 16 * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17 * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 17 * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 18 * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 19 * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20 * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 20 * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 21 * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 22 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 23 * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 24 * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 25 * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 26 * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 27 * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28 */ 28 */
29 29
30#include <sys/types.h> 30#include <sys/types.h>
31#include <sys/wait.h> 31#include <sys/wait.h>
32 32
33#include <rump/rump.h> 33#include <rump/rump.h>
34#include <rump/rump_syscalls.h> 34#include <rump/rump_syscalls.h>
35 35
36#include <atf-c.h> 36#include <atf-c.h>
37#include <err.h> 37#include <err.h>
38#include <errno.h> 38#include <errno.h>
39#include <stdio.h> 39#include <stdio.h>
40#include <stdlib.h> 40#include <stdlib.h>
41#include <string.h> 41#include <string.h>
42#include <unistd.h> 42#include <unistd.h>
43#include <util.h> 43#include <util.h>
44 44
45#include "../../h_macros.h" 45#include "../../h_macros.h"
46 46
47ATF_TC(makelwp); 47ATF_TC(makelwp);
48ATF_TC_HEAD(makelwp, tc) 48ATF_TC_HEAD(makelwp, tc)
49{ 49{
50 50
51 atf_tc_set_md_var(tc, "descr", "tests that lwps can be attached to " 51 atf_tc_set_md_var(tc, "descr", "tests that lwps can be attached to "
52 "processes"); 52 "processes");
53} 53}
54 54
55ATF_TC_BODY(makelwp, tc) 55ATF_TC_BODY(makelwp, tc)
56{ 56{
57 struct lwp *l; 57 struct lwp *l;
58 pid_t pid; 58 pid_t pid;
59 59
60 rump_init(); 60 rump_init();
61 RZ(rump_pub_lwproc_newlwp(0)); 61 RZ(rump_pub_lwproc_newlwp(0));
62 ATF_REQUIRE_EQ(rump_pub_lwproc_newlwp(37), ESRCH); 62 ATF_REQUIRE_EQ(rump_pub_lwproc_newlwp(37), ESRCH);
63 l = rump_pub_lwproc_curlwp(); 63 l = rump_pub_lwproc_curlwp();
64 64
65 RZ(rump_pub_lwproc_newproc()); 65 RZ(rump_pub_lwproc_newproc());
66 ATF_REQUIRE(rump_pub_lwproc_curlwp() != l); 66 ATF_REQUIRE(rump_pub_lwproc_curlwp() != l);
67 l = rump_pub_lwproc_curlwp(); 67 l = rump_pub_lwproc_curlwp();
68 68
69 RZ(rump_pub_lwproc_newlwp(rump_sys_getpid())); 69 RZ(rump_pub_lwproc_newlwp(rump_sys_getpid()));
70 ATF_REQUIRE(rump_pub_lwproc_curlwp() != l); 70 ATF_REQUIRE(rump_pub_lwproc_curlwp() != l);
71 71
72 pid = rump_sys_getpid(); 72 pid = rump_sys_getpid();
73 ATF_REQUIRE(pid != -1 && pid != 0); 73 ATF_REQUIRE(pid != -1 && pid != 0);
74} 74}
75 75
76ATF_TC(proccreds); 76ATF_TC(proccreds);
77ATF_TC_HEAD(proccreds, tc) 77ATF_TC_HEAD(proccreds, tc)
78{ 78{
79 79
80 atf_tc_set_md_var(tc, "descr", "check that procs have different creds"); 80 atf_tc_set_md_var(tc, "descr", "check that procs have different creds");
81} 81}
82 82
83ATF_TC_BODY(proccreds, tc) 83ATF_TC_BODY(proccreds, tc)
84{ 84{
85 struct lwp *l1, *l2; 85 struct lwp *l1, *l2;
86 86
87 rump_init(); 87 rump_init();
88 RZ(rump_pub_lwproc_newproc()); 88 RZ(rump_pub_lwproc_newproc());
89 l1 = rump_pub_lwproc_curlwp(); 89 l1 = rump_pub_lwproc_curlwp();
90 90
91 RZ(rump_pub_lwproc_newproc()); 91 RZ(rump_pub_lwproc_newproc());
92 l2 = rump_pub_lwproc_curlwp(); 92 l2 = rump_pub_lwproc_curlwp();
93 93
94 RL(rump_sys_setuid(22)); 94 RL(rump_sys_setuid(22));
95 ATF_REQUIRE_EQ(rump_sys_getuid(), 22); 95 ATF_REQUIRE_EQ(rump_sys_getuid(), 22);
96 96
97 rump_pub_lwproc_switch(l1); 97 rump_pub_lwproc_switch(l1);
98 ATF_REQUIRE_EQ(rump_sys_getuid(), 0); /* from parent, proc0 */ 98 ATF_REQUIRE_EQ(rump_sys_getuid(), 0); /* from parent, proc0 */
99 RL(rump_sys_setuid(11)); 99 RL(rump_sys_setuid(11));
100 ATF_REQUIRE_EQ(rump_sys_getuid(), 11); 100 ATF_REQUIRE_EQ(rump_sys_getuid(), 11);
101 101
102 rump_pub_lwproc_switch(l2); 102 rump_pub_lwproc_switch(l2);
103 ATF_REQUIRE_EQ(rump_sys_getuid(), 22); 103 ATF_REQUIRE_EQ(rump_sys_getuid(), 22);
104 rump_pub_lwproc_newlwp(rump_sys_getpid()); 104 rump_pub_lwproc_newlwp(rump_sys_getpid());
105 ATF_REQUIRE_EQ(rump_sys_getuid(), 22); 105 ATF_REQUIRE_EQ(rump_sys_getuid(), 22);
106} 106}
107 107
108 108
109ATF_TC(inherit); 109ATF_TC(inherit);
110ATF_TC_HEAD(inherit, tc) 110ATF_TC_HEAD(inherit, tc)
111{ 111{
112 112
113 atf_tc_set_md_var(tc, "descr", "new processes inherit creds from " 113 atf_tc_set_md_var(tc, "descr", "new processes inherit creds from "
114 "parents"); 114 "parents");
115} 115}
116 116
117ATF_TC_BODY(inherit, tc) 117ATF_TC_BODY(inherit, tc)
118{ 118{
119 119
120 rump_init(); 120 rump_init();
121 121
122 RZ(rump_pub_lwproc_newproc()); 122 RZ(rump_pub_lwproc_newproc());
123 RL(rump_sys_setuid(66)); 123 RL(rump_sys_setuid(66));
124 ATF_REQUIRE_EQ(rump_sys_getuid(), 66); 124 ATF_REQUIRE_EQ(rump_sys_getuid(), 66);
125 125
126 RZ(rump_pub_lwproc_newproc()); 126 RZ(rump_pub_lwproc_newproc());
127 ATF_REQUIRE_EQ(rump_sys_getuid(), 66); 127 ATF_REQUIRE_EQ(rump_sys_getuid(), 66);
128 128
129 /* release lwp and proc */ 129 /* release lwp and proc */
130 rump_pub_lwproc_releaselwp(); 130 rump_pub_lwproc_releaselwp();
131 ATF_REQUIRE_EQ(rump_sys_getuid(), 0); 131 ATF_REQUIRE_EQ(rump_sys_getuid(), 0);
132} 132}
133 133
134ATF_TC(lwps); 134ATF_TC(lwps);
135ATF_TC_HEAD(lwps, tc) 135ATF_TC_HEAD(lwps, tc)
136{ 136{
137 137
138 atf_tc_set_md_var(tc, "descr", "proc can hold many lwps and is " 138 atf_tc_set_md_var(tc, "descr", "proc can hold many lwps and is "
139 "automatically g/c'd when the last one exits"); 139 "automatically g/c'd when the last one exits");
140} 140}
141 141
142#define LOOPS 128 142#define LOOPS 128
143ATF_TC_BODY(lwps, tc) 143ATF_TC_BODY(lwps, tc)
144{ 144{
145 struct lwp *l[LOOPS]; 145 struct lwp *l[LOOPS];
146 pid_t mypid; 146 pid_t mypid;
147 struct lwp *l_orig; 147 struct lwp *l_orig;
148 int i; 148 int i;
149 149
150 rump_init(); 150 rump_init();
151 151
152 RZ(rump_pub_lwproc_newproc()); 152 RZ(rump_pub_lwproc_newproc());
153 mypid = rump_sys_getpid(); 153 mypid = rump_sys_getpid();
154 RL(rump_sys_setuid(375)); 154 RL(rump_sys_setuid(375));
155 155
156 l_orig = rump_pub_lwproc_curlwp(); 156 l_orig = rump_pub_lwproc_curlwp();
157 for (i = 0; i < LOOPS; i++) { 157 for (i = 0; i < LOOPS; i++) {
158 mypid = rump_sys_getpid(); 158 mypid = rump_sys_getpid();
159 ATF_REQUIRE(mypid != -1 && mypid != 0); 159 ATF_REQUIRE(mypid != -1 && mypid != 0);
160 RZ(rump_pub_lwproc_newlwp(mypid)); 160 RZ(rump_pub_lwproc_newlwp(mypid));
161 l[i] = rump_pub_lwproc_curlwp(); 161 l[i] = rump_pub_lwproc_curlwp();
162 ATF_REQUIRE_EQ(rump_sys_getuid(), 375); 162 ATF_REQUIRE_EQ(rump_sys_getuid(), 375);
163 } 163 }
164 164
165 rump_pub_lwproc_switch(l_orig); 165 rump_pub_lwproc_switch(l_orig);
166 rump_pub_lwproc_releaselwp(); 166 rump_pub_lwproc_releaselwp();
167 for (i = 0; i < LOOPS; i++) { 167 for (i = 0; i < LOOPS; i++) {
168 rump_pub_lwproc_switch(l[i]); 168 rump_pub_lwproc_switch(l[i]);
169 ATF_REQUIRE_EQ(rump_sys_getpid(), mypid); 169 ATF_REQUIRE_EQ(rump_sys_getpid(), mypid);
170 ATF_REQUIRE_EQ(rump_sys_getuid(), 375); 170 ATF_REQUIRE_EQ(rump_sys_getuid(), 375);
171 rump_pub_lwproc_releaselwp(); 171 rump_pub_lwproc_releaselwp();
172 ATF_REQUIRE_EQ(rump_sys_getpid(), 0); 172 ATF_REQUIRE_EQ(rump_sys_getpid(), 1);
173 ATF_REQUIRE_EQ(rump_sys_getuid(), 0); 173 ATF_REQUIRE_EQ(rump_sys_getuid(), 0);
174 } 174 }
175 175
176 ATF_REQUIRE_EQ(rump_pub_lwproc_newlwp(mypid), ESRCH); 176 ATF_REQUIRE_EQ(rump_pub_lwproc_newlwp(mypid), ESRCH);
177} 177}
178 178
179ATF_TC(nolwprelease); 179ATF_TC(nolwprelease);
180ATF_TC_HEAD(nolwprelease, tc) 180ATF_TC_HEAD(nolwprelease, tc)
181{ 181{
182 182
183 atf_tc_set_md_var(tc, "descr", "check that lwp context is required " 183 atf_tc_set_md_var(tc, "descr", "check that lwp context is required "
184 "for lwproc_releaselwp()"); 184 "for lwproc_releaselwp()");
185} 185}
186 186
187ATF_TC_BODY(nolwprelease, tc) 187ATF_TC_BODY(nolwprelease, tc)
188{ 188{
189 int status; 189 int status;
190 190
191 switch (fork()) { 191 switch (fork()) {
192 case 0: 192 case 0:
193 rump_init(); 193 rump_init();
194 rump_pub_lwproc_releaselwp(); 194 rump_pub_lwproc_releaselwp();
195 atf_tc_fail("survived"); 195 atf_tc_fail("survived");
196 break; 196 break;
197 case -1: 197 case -1:
198 atf_tc_fail_errno("fork"); 198 atf_tc_fail_errno("fork");
199 break; 199 break;
200 default: 200 default:
201 wait(&status); 201 wait(&status);
202 ATF_REQUIRE(WIFSIGNALED(status)); 202 ATF_REQUIRE(WIFSIGNALED(status));
203 ATF_REQUIRE_EQ(WTERMSIG(status), SIGABRT); 203 ATF_REQUIRE_EQ(WTERMSIG(status), SIGABRT);
204 204
205 } 205 }
206} 206}
207 207
208ATF_TC(nolwp); 208ATF_TC(nolwp);
209ATF_TC_HEAD(nolwp, tc) 209ATF_TC_HEAD(nolwp, tc)
210{ 210{
211 211
212 atf_tc_set_md_var(tc, "descr", "check that curlwp for an implicit " 212 atf_tc_set_md_var(tc, "descr", "check that curlwp for an implicit "
213 "context is NULL"); 213 "context is NULL");
214} 214}
215 215
216ATF_TC_BODY(nolwp, tc) 216ATF_TC_BODY(nolwp, tc)
217{ 217{
218 218
219 rump_init(); 219 rump_init();
220 ATF_REQUIRE_EQ(rump_pub_lwproc_curlwp(), NULL); 220 ATF_REQUIRE_EQ(rump_pub_lwproc_curlwp(), NULL);
221} 221}
222 222
223ATF_TC(nullswitch); 223ATF_TC(nullswitch);
224ATF_TC_HEAD(nullswitch, tc) 224ATF_TC_HEAD(nullswitch, tc)
225{ 225{
226 226
227 atf_tc_set_md_var(tc, "descr", "check that switching to NULL marks " 227 atf_tc_set_md_var(tc, "descr", "check that switching to NULL marks "
228 "current lwp as not running"); 228 "current lwp as not running");
229} 229}
230 230
231ATF_TC_BODY(nullswitch, tc) 231ATF_TC_BODY(nullswitch, tc)
232{ 232{
233 struct lwp *l; 233 struct lwp *l;
234 234
235 rump_init(); 235 rump_init();
236 RZ(rump_pub_lwproc_newlwp(0)); 236 RZ(rump_pub_lwproc_newlwp(0));
237 l = rump_pub_lwproc_curlwp(); 237 l = rump_pub_lwproc_curlwp();
238 rump_pub_lwproc_switch(NULL); 238 rump_pub_lwproc_switch(NULL);
239 /* if remains LP_RUNNING, next call will panic */ 239 /* if remains LP_RUNNING, next call will panic */
240 rump_pub_lwproc_switch(l); 240 rump_pub_lwproc_switch(l);
241} 241}
242 242
243ATF_TP_ADD_TCS(tp) 243ATF_TP_ADD_TCS(tp)
244{ 244{
245 245
246 ATF_TP_ADD_TC(tp, makelwp); 246 ATF_TP_ADD_TC(tp, makelwp);
247 ATF_TP_ADD_TC(tp, proccreds); 247 ATF_TP_ADD_TC(tp, proccreds);
248 ATF_TP_ADD_TC(tp, inherit); 248 ATF_TP_ADD_TC(tp, inherit);
249 ATF_TP_ADD_TC(tp, lwps); 249 ATF_TP_ADD_TC(tp, lwps);
250 ATF_TP_ADD_TC(tp, nolwprelease); 250 ATF_TP_ADD_TC(tp, nolwprelease);
251 ATF_TP_ADD_TC(tp, nolwp); 251 ATF_TP_ADD_TC(tp, nolwp);
252 ATF_TP_ADD_TC(tp, nullswitch); 252 ATF_TP_ADD_TC(tp, nullswitch);
253 253
254 return atf_no_error(); 254 return atf_no_error();
255} 255}