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