xref: /freebsd-src/contrib/netbsd-tests/lib/libc/sys/t_wait_noproc.c (revision 1a36faad54665288ed4eb839d2a4699ae2ead45e)
1*cdebaff8SEnji Cooper /* $NetBSD: t_wait_noproc.c,v 1.5 2016/11/09 17:50:19 kamil Exp $ */
2*cdebaff8SEnji Cooper 
3*cdebaff8SEnji Cooper /*-
4*cdebaff8SEnji Cooper  * Copyright (c) 2016 The NetBSD Foundation, Inc.
5*cdebaff8SEnji Cooper  * All rights reserved.
6*cdebaff8SEnji Cooper  *
7*cdebaff8SEnji Cooper  * Redistribution and use in source and binary forms, with or without
8*cdebaff8SEnji Cooper  * modification, are permitted provided that the following conditions
9*cdebaff8SEnji Cooper  * are met:
10*cdebaff8SEnji Cooper  * 1. Redistributions of source code must retain the above copyright
11*cdebaff8SEnji Cooper  *    notice, this list of conditions and the following disclaimer.
12*cdebaff8SEnji Cooper  * 2. Redistributions in binary form must reproduce the above copyright
13*cdebaff8SEnji Cooper  *    notice, this list of conditions and the following disclaimer in the
14*cdebaff8SEnji Cooper  *    documentation and/or other materials provided with the distribution.
15*cdebaff8SEnji Cooper  *
16*cdebaff8SEnji Cooper  * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND CONTRIBUTORS
17*cdebaff8SEnji Cooper  * ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED
18*cdebaff8SEnji Cooper  * TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
19*cdebaff8SEnji Cooper  * PURPOSE ARE DISCLAIMED.  IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS
20*cdebaff8SEnji Cooper  * BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR
21*cdebaff8SEnji Cooper  * CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF
22*cdebaff8SEnji Cooper  * SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
23*cdebaff8SEnji Cooper  * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN
24*cdebaff8SEnji Cooper  * CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE)
25*cdebaff8SEnji Cooper  * ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
26*cdebaff8SEnji Cooper  * POSSIBILITY OF SUCH DAMAGE.
27*cdebaff8SEnji Cooper  */
28*cdebaff8SEnji Cooper 
29*cdebaff8SEnji Cooper #include <sys/cdefs.h>
30*cdebaff8SEnji Cooper __RCSID("$NetBSD: t_wait_noproc.c,v 1.5 2016/11/09 17:50:19 kamil Exp $");
31*cdebaff8SEnji Cooper 
32*cdebaff8SEnji Cooper #include <sys/wait.h>
33*cdebaff8SEnji Cooper #include <sys/resource.h>
34*cdebaff8SEnji Cooper 
35*cdebaff8SEnji Cooper #include <errno.h>
36*cdebaff8SEnji Cooper #include <stdio.h>
37*cdebaff8SEnji Cooper 
38*cdebaff8SEnji Cooper #include <atf-c.h>
39*cdebaff8SEnji Cooper 
40*cdebaff8SEnji Cooper #ifndef TWAIT_OPTION
41*cdebaff8SEnji Cooper #define TWAIT_OPTION 0
42*cdebaff8SEnji Cooper #endif
43*cdebaff8SEnji Cooper 
44*cdebaff8SEnji Cooper #if TWAIT_OPTION == 0
45*cdebaff8SEnji Cooper ATF_TC(wait);
ATF_TC_HEAD(wait,tc)46*cdebaff8SEnji Cooper ATF_TC_HEAD(wait, tc)
47*cdebaff8SEnji Cooper {
48*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
49*cdebaff8SEnji Cooper 	    "Test that wait(2) returns ECHILD for no child");
50*cdebaff8SEnji Cooper }
51*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait,tc)52*cdebaff8SEnji Cooper ATF_TC_BODY(wait, tc)
53*cdebaff8SEnji Cooper {
54*cdebaff8SEnji Cooper 	ATF_REQUIRE_ERRNO(ECHILD, wait(NULL) == -1);
55*cdebaff8SEnji Cooper }
56*cdebaff8SEnji Cooper #endif
57*cdebaff8SEnji Cooper 
58*cdebaff8SEnji Cooper ATF_TC(waitpid);
ATF_TC_HEAD(waitpid,tc)59*cdebaff8SEnji Cooper ATF_TC_HEAD(waitpid, tc)
60*cdebaff8SEnji Cooper {
61*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
62*cdebaff8SEnji Cooper 	    "Test that waitpid(2) returns ECHILD for WAIT_ANY and option %s",
63*cdebaff8SEnji Cooper 	    ___STRING(TWAIT_OPTION));
64*cdebaff8SEnji Cooper }
65*cdebaff8SEnji Cooper 
ATF_TC_BODY(waitpid,tc)66*cdebaff8SEnji Cooper ATF_TC_BODY(waitpid, tc)
67*cdebaff8SEnji Cooper {
68*cdebaff8SEnji Cooper 	ATF_REQUIRE_ERRNO(ECHILD, waitpid(WAIT_ANY, NULL, TWAIT_OPTION) == -1);
69*cdebaff8SEnji Cooper }
70*cdebaff8SEnji Cooper 
71*cdebaff8SEnji Cooper ATF_TC(waitid);
ATF_TC_HEAD(waitid,tc)72*cdebaff8SEnji Cooper ATF_TC_HEAD(waitid, tc)
73*cdebaff8SEnji Cooper {
74*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
75*cdebaff8SEnji Cooper 	    "Test that waitid(2) returns ECHILD for P_ALL and option %s",
76*cdebaff8SEnji Cooper 	    ___STRING(TWAIT_OPTION));
77*cdebaff8SEnji Cooper }
78*cdebaff8SEnji Cooper 
ATF_TC_BODY(waitid,tc)79*cdebaff8SEnji Cooper ATF_TC_BODY(waitid, tc)
80*cdebaff8SEnji Cooper {
81*cdebaff8SEnji Cooper 	ATF_REQUIRE_ERRNO(ECHILD,
82*cdebaff8SEnji Cooper 	    waitid(P_ALL, 0, NULL,
83*cdebaff8SEnji Cooper 	        WTRAPPED | WEXITED | TWAIT_OPTION) == -1);
84*cdebaff8SEnji Cooper }
85*cdebaff8SEnji Cooper 
86*cdebaff8SEnji Cooper ATF_TC(wait3);
ATF_TC_HEAD(wait3,tc)87*cdebaff8SEnji Cooper ATF_TC_HEAD(wait3, tc)
88*cdebaff8SEnji Cooper {
89*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
90*cdebaff8SEnji Cooper 	    "Test that wait3(2) returns ECHILD for no child");
91*cdebaff8SEnji Cooper }
92*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait3,tc)93*cdebaff8SEnji Cooper ATF_TC_BODY(wait3, tc)
94*cdebaff8SEnji Cooper {
95*cdebaff8SEnji Cooper 	ATF_REQUIRE_ERRNO(ECHILD, wait3(NULL, TWAIT_OPTION, NULL) == -1);
96*cdebaff8SEnji Cooper }
97*cdebaff8SEnji Cooper 
98*cdebaff8SEnji Cooper ATF_TC(wait4);
ATF_TC_HEAD(wait4,tc)99*cdebaff8SEnji Cooper ATF_TC_HEAD(wait4, tc)
100*cdebaff8SEnji Cooper {
101*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
102*cdebaff8SEnji Cooper 	    "Test that wait4(2) returns ECHILD for WAIT_ANY and option %s",
103*cdebaff8SEnji Cooper 	    ___STRING(TWAIT_OPTION));
104*cdebaff8SEnji Cooper }
105*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait4,tc)106*cdebaff8SEnji Cooper ATF_TC_BODY(wait4, tc)
107*cdebaff8SEnji Cooper {
108*cdebaff8SEnji Cooper 	ATF_REQUIRE_ERRNO(ECHILD,
109*cdebaff8SEnji Cooper 	    wait4(WAIT_ANY, NULL, TWAIT_OPTION, NULL) == -1);
110*cdebaff8SEnji Cooper }
111*cdebaff8SEnji Cooper 
112*cdebaff8SEnji Cooper ATF_TC(wait6);
ATF_TC_HEAD(wait6,tc)113*cdebaff8SEnji Cooper ATF_TC_HEAD(wait6, tc)
114*cdebaff8SEnji Cooper {
115*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
116*cdebaff8SEnji Cooper 	    "Test that wait6(2) returns ECHILD for P_ALL and option %s",
117*cdebaff8SEnji Cooper 	    ___STRING(TWAIT_OPTION));
118*cdebaff8SEnji Cooper }
119*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait6,tc)120*cdebaff8SEnji Cooper ATF_TC_BODY(wait6, tc)
121*cdebaff8SEnji Cooper {
122*cdebaff8SEnji Cooper 	ATF_REQUIRE_ERRNO(ECHILD,
123*cdebaff8SEnji Cooper 	    wait6(P_ALL, 0, NULL,
124*cdebaff8SEnji Cooper 	        WTRAPPED | WEXITED | TWAIT_OPTION, NULL, NULL) == -1);
125*cdebaff8SEnji Cooper }
126*cdebaff8SEnji Cooper 
127*cdebaff8SEnji Cooper /*
128*cdebaff8SEnji Cooper  * Generator of valid combinations of options
129*cdebaff8SEnji Cooper  * Usage: i = 0; while ((o = get_options_wait6(i++)) != -1) {}
130*cdebaff8SEnji Cooper  */
131*cdebaff8SEnji Cooper static int
get_options6(size_t pos)132*cdebaff8SEnji Cooper get_options6(size_t pos)
133*cdebaff8SEnji Cooper {
134*cdebaff8SEnji Cooper 	int rv = 0;
135*cdebaff8SEnji Cooper 	size_t n;
136*cdebaff8SEnji Cooper 
137*cdebaff8SEnji Cooper 	/*
138*cdebaff8SEnji Cooper 	 * waitid(2) must specify at least one of WEXITED, WUNTRACED,
139*cdebaff8SEnji Cooper 	 * WSTOPPED, WTRAPPED or WCONTINUED. Single option WNOWAIT
140*cdebaff8SEnji Cooper 	 * isn't valid.
141*cdebaff8SEnji Cooper 	 */
142*cdebaff8SEnji Cooper 
143*cdebaff8SEnji Cooper 	const int matrix[] = {
144*cdebaff8SEnji Cooper 		WNOWAIT,	/* First in order to blacklist it easily */
145*cdebaff8SEnji Cooper 		WEXITED,
146*cdebaff8SEnji Cooper 		WUNTRACED,
147*cdebaff8SEnji Cooper 		WSTOPPED,	/* SUS compatibility, equal to WUNTRACED */
148*cdebaff8SEnji Cooper 		WTRAPPED,
149*cdebaff8SEnji Cooper 		WCONTINUED
150*cdebaff8SEnji Cooper 	};
151*cdebaff8SEnji Cooper 
152*cdebaff8SEnji Cooper 	const size_t M = (1 << __arraycount(matrix)) - 1;
153*cdebaff8SEnji Cooper 
154*cdebaff8SEnji Cooper 	/* Skip empty and sole WNOWAIT option */
155*cdebaff8SEnji Cooper 	pos+=2;
156*cdebaff8SEnji Cooper 
157*cdebaff8SEnji Cooper 	if (pos > M)
158*cdebaff8SEnji Cooper 		return -1;
159*cdebaff8SEnji Cooper 
160*cdebaff8SEnji Cooper 	for (n = 0; n < __arraycount(matrix); n++) {
161*cdebaff8SEnji Cooper 		if (pos & __BIT(n))
162*cdebaff8SEnji Cooper 			rv |= matrix[n];
163*cdebaff8SEnji Cooper 	}
164*cdebaff8SEnji Cooper 
165*cdebaff8SEnji Cooper 	return rv;
166*cdebaff8SEnji Cooper }
167*cdebaff8SEnji Cooper 
168*cdebaff8SEnji Cooper /*
169*cdebaff8SEnji Cooper  * Generator of valid combinations of options
170*cdebaff8SEnji Cooper  * Usage: i = 0; while ((o = get_options_wait4(i++)) != -1) {}
171*cdebaff8SEnji Cooper  */
172*cdebaff8SEnji Cooper static int
get_options4(size_t pos)173*cdebaff8SEnji Cooper get_options4(size_t pos)
174*cdebaff8SEnji Cooper {
175*cdebaff8SEnji Cooper 	int rv = 0;
176*cdebaff8SEnji Cooper 	size_t n;
177*cdebaff8SEnji Cooper 
178*cdebaff8SEnji Cooper 	const int special[] = {
179*cdebaff8SEnji Cooper 		0,
180*cdebaff8SEnji Cooper #ifdef	__NetBSD__
181*cdebaff8SEnji Cooper 		WALLSIG,
182*cdebaff8SEnji Cooper 		WALTSIG,
183*cdebaff8SEnji Cooper 		__WALL,		/* Linux compatibility, equal to WALLSIG */
184*cdebaff8SEnji Cooper 		__WCLONE	/* Linux compatibility, equal to WALTSIG */
185*cdebaff8SEnji Cooper #endif
186*cdebaff8SEnji Cooper 	};
187*cdebaff8SEnji Cooper 
188*cdebaff8SEnji Cooper 	const int matrix[] = {
189*cdebaff8SEnji Cooper 		WNOWAIT,
190*cdebaff8SEnji Cooper 		WEXITED,
191*cdebaff8SEnji Cooper 		WUNTRACED,
192*cdebaff8SEnji Cooper 		WSTOPPED,	/* SUS compatibility, equal to WUNTRACED */
193*cdebaff8SEnji Cooper 		WTRAPPED,
194*cdebaff8SEnji Cooper 		WCONTINUED
195*cdebaff8SEnji Cooper 	};
196*cdebaff8SEnji Cooper 
197*cdebaff8SEnji Cooper 	const size_t M = (1 << __arraycount(special)) - 1;
198*cdebaff8SEnji Cooper 
199*cdebaff8SEnji Cooper 	if (pos < __arraycount(special))
200*cdebaff8SEnji Cooper 		return special[pos];
201*cdebaff8SEnji Cooper 
202*cdebaff8SEnji Cooper 	pos -= __arraycount(special);
203*cdebaff8SEnji Cooper 
204*cdebaff8SEnji Cooper 	++pos; /* Don't start with empty mask */
205*cdebaff8SEnji Cooper 
206*cdebaff8SEnji Cooper 	if (pos > M)
207*cdebaff8SEnji Cooper 		return -1;
208*cdebaff8SEnji Cooper 
209*cdebaff8SEnji Cooper 	for (n = 0; n < __arraycount(special); n++) {
210*cdebaff8SEnji Cooper 		if (pos & __BIT(n))
211*cdebaff8SEnji Cooper 			rv |= matrix[n];
212*cdebaff8SEnji Cooper 	}
213*cdebaff8SEnji Cooper 
214*cdebaff8SEnji Cooper 	return rv;
215*cdebaff8SEnji Cooper }
216*cdebaff8SEnji Cooper 
217*cdebaff8SEnji Cooper ATF_TC(waitpid_options);
ATF_TC_HEAD(waitpid_options,tc)218*cdebaff8SEnji Cooper ATF_TC_HEAD(waitpid_options, tc)
219*cdebaff8SEnji Cooper {
220*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
221*cdebaff8SEnji Cooper 	    "Test that waitpid(2) returns ECHILD for WAIT_ANY and valid "
222*cdebaff8SEnji Cooper 	    "combination of options with%s WNOHANG",
223*cdebaff8SEnji Cooper 	    TWAIT_OPTION == 0 ? "out" : "");
224*cdebaff8SEnji Cooper }
225*cdebaff8SEnji Cooper 
ATF_TC_BODY(waitpid_options,tc)226*cdebaff8SEnji Cooper ATF_TC_BODY(waitpid_options, tc)
227*cdebaff8SEnji Cooper {
228*cdebaff8SEnji Cooper 	size_t i = 0;
229*cdebaff8SEnji Cooper 	int o;
230*cdebaff8SEnji Cooper 
231*cdebaff8SEnji Cooper 	while((o = get_options4(i++)) != -1) {
232*cdebaff8SEnji Cooper 		printf("Testing waitpid(2) with options %x\n", o);
233*cdebaff8SEnji Cooper 
234*cdebaff8SEnji Cooper 		ATF_REQUIRE_ERRNO(ECHILD,
235*cdebaff8SEnji Cooper 		    waitpid(WAIT_ANY, NULL, o | TWAIT_OPTION) == -1);
236*cdebaff8SEnji Cooper 	}
237*cdebaff8SEnji Cooper }
238*cdebaff8SEnji Cooper 
239*cdebaff8SEnji Cooper ATF_TC(waitid_options);
ATF_TC_HEAD(waitid_options,tc)240*cdebaff8SEnji Cooper ATF_TC_HEAD(waitid_options, tc)
241*cdebaff8SEnji Cooper {
242*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
243*cdebaff8SEnji Cooper 	    "Test that waitid(2) returns ECHILD for P_ALL and valid "
244*cdebaff8SEnji Cooper 	    "combination of options with%s WNOHANG",
245*cdebaff8SEnji Cooper 	    TWAIT_OPTION == 0 ? "out" : "");
246*cdebaff8SEnji Cooper }
247*cdebaff8SEnji Cooper 
ATF_TC_BODY(waitid_options,tc)248*cdebaff8SEnji Cooper ATF_TC_BODY(waitid_options, tc)
249*cdebaff8SEnji Cooper {
250*cdebaff8SEnji Cooper 	size_t i = 0;
251*cdebaff8SEnji Cooper 	int o;
252*cdebaff8SEnji Cooper 
253*cdebaff8SEnji Cooper 	while((o = get_options6(i++)) != -1) {
254*cdebaff8SEnji Cooper 		printf("Testing waitid(2) with options %x\n", o);
255*cdebaff8SEnji Cooper 
256*cdebaff8SEnji Cooper 		ATF_REQUIRE_ERRNO(ECHILD,
257*cdebaff8SEnji Cooper 		    waitid(P_ALL, 0, NULL, o | TWAIT_OPTION) == -1);
258*cdebaff8SEnji Cooper 	}
259*cdebaff8SEnji Cooper }
260*cdebaff8SEnji Cooper 
261*cdebaff8SEnji Cooper ATF_TC(wait3_options);
ATF_TC_HEAD(wait3_options,tc)262*cdebaff8SEnji Cooper ATF_TC_HEAD(wait3_options, tc)
263*cdebaff8SEnji Cooper {
264*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
265*cdebaff8SEnji Cooper 	    "Test that wait3(2) returns ECHILD for no child");
266*cdebaff8SEnji Cooper }
267*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait3_options,tc)268*cdebaff8SEnji Cooper ATF_TC_BODY(wait3_options, tc)
269*cdebaff8SEnji Cooper {
270*cdebaff8SEnji Cooper 	size_t i = 0;
271*cdebaff8SEnji Cooper 	int o;
272*cdebaff8SEnji Cooper 
273*cdebaff8SEnji Cooper 	while((o = get_options4(i++)) != -1) {
274*cdebaff8SEnji Cooper 		printf("Testing wait3(2) with options %x\n", o);
275*cdebaff8SEnji Cooper 
276*cdebaff8SEnji Cooper 		ATF_REQUIRE_ERRNO(ECHILD,
277*cdebaff8SEnji Cooper 		    wait3(NULL, o | TWAIT_OPTION, NULL) == -1);
278*cdebaff8SEnji Cooper 	}
279*cdebaff8SEnji Cooper }
280*cdebaff8SEnji Cooper 
281*cdebaff8SEnji Cooper ATF_TC(wait4_options);
ATF_TC_HEAD(wait4_options,tc)282*cdebaff8SEnji Cooper ATF_TC_HEAD(wait4_options, tc)
283*cdebaff8SEnji Cooper {
284*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
285*cdebaff8SEnji Cooper 	    "Test that wait4(2) returns ECHILD for WAIT_ANY and option %s",
286*cdebaff8SEnji Cooper 	    ___STRING(TWAIT_OPTION));
287*cdebaff8SEnji Cooper }
288*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait4_options,tc)289*cdebaff8SEnji Cooper ATF_TC_BODY(wait4_options, tc)
290*cdebaff8SEnji Cooper {
291*cdebaff8SEnji Cooper 	size_t i = 0;
292*cdebaff8SEnji Cooper 	int o;
293*cdebaff8SEnji Cooper 
294*cdebaff8SEnji Cooper 	while((o = get_options4(i++)) != -1) {
295*cdebaff8SEnji Cooper 		printf("Testing wait4(2) with options %x\n", o);
296*cdebaff8SEnji Cooper 
297*cdebaff8SEnji Cooper 		ATF_REQUIRE_ERRNO(ECHILD,
298*cdebaff8SEnji Cooper 		    wait4(WAIT_ANY, NULL, o | TWAIT_OPTION, NULL) == -1);
299*cdebaff8SEnji Cooper 	}
300*cdebaff8SEnji Cooper }
301*cdebaff8SEnji Cooper 
302*cdebaff8SEnji Cooper ATF_TC(wait6_options);
ATF_TC_HEAD(wait6_options,tc)303*cdebaff8SEnji Cooper ATF_TC_HEAD(wait6_options, tc)
304*cdebaff8SEnji Cooper {
305*cdebaff8SEnji Cooper 	atf_tc_set_md_var(tc, "descr",
306*cdebaff8SEnji Cooper 	    "Test that wait6(2) returns ECHILD for P_ALL and option %s",
307*cdebaff8SEnji Cooper 	    ___STRING(TWAIT_OPTION));
308*cdebaff8SEnji Cooper }
309*cdebaff8SEnji Cooper 
ATF_TC_BODY(wait6_options,tc)310*cdebaff8SEnji Cooper ATF_TC_BODY(wait6_options, tc)
311*cdebaff8SEnji Cooper {
312*cdebaff8SEnji Cooper 	size_t i = 0;
313*cdebaff8SEnji Cooper 	int o;
314*cdebaff8SEnji Cooper 
315*cdebaff8SEnji Cooper 	while((o = get_options6(i++)) != -1) {
316*cdebaff8SEnji Cooper 		printf("Testing wait6(2) with options %x\n", o);
317*cdebaff8SEnji Cooper 
318*cdebaff8SEnji Cooper 		ATF_REQUIRE_ERRNO(ECHILD,
319*cdebaff8SEnji Cooper 		    wait6(P_ALL, 0, NULL, o | TWAIT_OPTION, NULL, NULL) == -1);
320*cdebaff8SEnji Cooper 	}
321*cdebaff8SEnji Cooper }
322*cdebaff8SEnji Cooper 
ATF_TP_ADD_TCS(tp)323*cdebaff8SEnji Cooper ATF_TP_ADD_TCS(tp)
324*cdebaff8SEnji Cooper {
325*cdebaff8SEnji Cooper 
326*cdebaff8SEnji Cooper #if TWAIT_OPTION == 0
327*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait);
328*cdebaff8SEnji Cooper #endif
329*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, waitpid);
330*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, waitid);
331*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait3);
332*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait4);
333*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait6);
334*cdebaff8SEnji Cooper 
335*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, waitpid_options);
336*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, waitid_options);
337*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait3_options);
338*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait4_options);
339*cdebaff8SEnji Cooper 	ATF_TP_ADD_TC(tp, wait6_options);
340*cdebaff8SEnji Cooper 
341*cdebaff8SEnji Cooper 	return atf_no_error();
342*cdebaff8SEnji Cooper }
343