1edebbb8eSjmmv /*
2edebbb8eSjmmv * Automated Testing Framework (atf)
3edebbb8eSjmmv *
4*a551a20fSjmmv * Copyright (c) 2007 The NetBSD Foundation, Inc.
5edebbb8eSjmmv * All rights reserved.
6edebbb8eSjmmv *
7edebbb8eSjmmv * Redistribution and use in source and binary forms, with or without
8edebbb8eSjmmv * modification, are permitted provided that the following conditions
9edebbb8eSjmmv * are met:
10edebbb8eSjmmv * 1. Redistributions of source code must retain the above copyright
11edebbb8eSjmmv * notice, this list of conditions and the following disclaimer.
12edebbb8eSjmmv * 2. Redistributions in binary form must reproduce the above copyright
13edebbb8eSjmmv * notice, this list of conditions and the following disclaimer in the
14edebbb8eSjmmv * documentation and/or other materials provided with the distribution.
15edebbb8eSjmmv *
16edebbb8eSjmmv * THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
17edebbb8eSjmmv * CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
18edebbb8eSjmmv * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
19edebbb8eSjmmv * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
20edebbb8eSjmmv * IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
21edebbb8eSjmmv * DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
22edebbb8eSjmmv * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
23edebbb8eSjmmv * GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
24edebbb8eSjmmv * INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
25edebbb8eSjmmv * IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
26edebbb8eSjmmv * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
27edebbb8eSjmmv * IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
28edebbb8eSjmmv */
29edebbb8eSjmmv
30edebbb8eSjmmv #include <sys/types.h>
31edebbb8eSjmmv #include <sys/wait.h>
32edebbb8eSjmmv #include <fcntl.h>
33edebbb8eSjmmv #include <unistd.h>
34edebbb8eSjmmv
35edebbb8eSjmmv #include <signal.h>
36edebbb8eSjmmv #include <stdio.h>
37edebbb8eSjmmv #include <stdlib.h>
38edebbb8eSjmmv #include <string.h>
39edebbb8eSjmmv
40edebbb8eSjmmv #include <atf-c.h>
41edebbb8eSjmmv
42edebbb8eSjmmv #include "atf-c/error.h"
43edebbb8eSjmmv
44895f502bSjmmv #include "atf-c/detail/env.h"
45895f502bSjmmv #include "atf-c/detail/fs.h"
46895f502bSjmmv #include "atf-c/detail/test_helpers.h"
47895f502bSjmmv #include "atf-c/detail/text.h"
48edebbb8eSjmmv
49edebbb8eSjmmv /* ---------------------------------------------------------------------
50edebbb8eSjmmv * Auxiliary functions.
51edebbb8eSjmmv * --------------------------------------------------------------------- */
52edebbb8eSjmmv
53edebbb8eSjmmv static
54edebbb8eSjmmv void
safe_remove(const char * path)55edebbb8eSjmmv safe_remove(const char* path)
56edebbb8eSjmmv {
57edebbb8eSjmmv if (unlink(path) == -1)
58edebbb8eSjmmv atf_tc_fail("unlink(2) of %s failed", path);
59edebbb8eSjmmv }
60edebbb8eSjmmv
61edebbb8eSjmmv static
62edebbb8eSjmmv void
touch(const char * path)63edebbb8eSjmmv touch(const char *path)
64edebbb8eSjmmv {
65edebbb8eSjmmv int fd;
66edebbb8eSjmmv fd = open(path, O_WRONLY | O_TRUNC | O_CREAT, 0644);
67edebbb8eSjmmv if (fd == -1)
68edebbb8eSjmmv atf_tc_fail("Could not create file %s", path);
69edebbb8eSjmmv close(fd);
70edebbb8eSjmmv }
71edebbb8eSjmmv
72edebbb8eSjmmv /* ---------------------------------------------------------------------
73edebbb8eSjmmv * Helper tests for "t_cleanup".
74edebbb8eSjmmv * --------------------------------------------------------------------- */
75edebbb8eSjmmv
76edebbb8eSjmmv ATF_TC_WITH_CLEANUP(cleanup_pass);
ATF_TC_HEAD(cleanup_pass,tc)77edebbb8eSjmmv ATF_TC_HEAD(cleanup_pass, tc)
78edebbb8eSjmmv {
79edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test "
80edebbb8eSjmmv "program");
81edebbb8eSjmmv }
ATF_TC_BODY(cleanup_pass,tc)82edebbb8eSjmmv ATF_TC_BODY(cleanup_pass, tc)
83edebbb8eSjmmv {
84edebbb8eSjmmv touch(atf_tc_get_config_var(tc, "tmpfile"));
85edebbb8eSjmmv }
ATF_TC_CLEANUP(cleanup_pass,tc)86edebbb8eSjmmv ATF_TC_CLEANUP(cleanup_pass, tc)
87edebbb8eSjmmv {
880ebb519dSjmmv if (atf_tc_get_config_var_as_bool(tc, "cleanup"))
89edebbb8eSjmmv safe_remove(atf_tc_get_config_var(tc, "tmpfile"));
90edebbb8eSjmmv }
91edebbb8eSjmmv
92edebbb8eSjmmv ATF_TC_WITH_CLEANUP(cleanup_fail);
ATF_TC_HEAD(cleanup_fail,tc)93edebbb8eSjmmv ATF_TC_HEAD(cleanup_fail, tc)
94edebbb8eSjmmv {
95edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test "
96edebbb8eSjmmv "program");
97edebbb8eSjmmv }
ATF_TC_BODY(cleanup_fail,tc)98edebbb8eSjmmv ATF_TC_BODY(cleanup_fail, tc)
99edebbb8eSjmmv {
100edebbb8eSjmmv touch(atf_tc_get_config_var(tc, "tmpfile"));
101edebbb8eSjmmv atf_tc_fail("On purpose");
102edebbb8eSjmmv }
ATF_TC_CLEANUP(cleanup_fail,tc)103edebbb8eSjmmv ATF_TC_CLEANUP(cleanup_fail, tc)
104edebbb8eSjmmv {
1050ebb519dSjmmv if (atf_tc_get_config_var_as_bool(tc, "cleanup"))
106edebbb8eSjmmv safe_remove(atf_tc_get_config_var(tc, "tmpfile"));
107edebbb8eSjmmv }
108edebbb8eSjmmv
109edebbb8eSjmmv ATF_TC_WITH_CLEANUP(cleanup_skip);
ATF_TC_HEAD(cleanup_skip,tc)110edebbb8eSjmmv ATF_TC_HEAD(cleanup_skip, tc)
111edebbb8eSjmmv {
112edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test "
113edebbb8eSjmmv "program");
114edebbb8eSjmmv }
ATF_TC_BODY(cleanup_skip,tc)115edebbb8eSjmmv ATF_TC_BODY(cleanup_skip, tc)
116edebbb8eSjmmv {
117edebbb8eSjmmv touch(atf_tc_get_config_var(tc, "tmpfile"));
118edebbb8eSjmmv atf_tc_skip("On purpose");
119edebbb8eSjmmv }
ATF_TC_CLEANUP(cleanup_skip,tc)120edebbb8eSjmmv ATF_TC_CLEANUP(cleanup_skip, tc)
121edebbb8eSjmmv {
1220ebb519dSjmmv if (atf_tc_get_config_var_as_bool(tc, "cleanup"))
123edebbb8eSjmmv safe_remove(atf_tc_get_config_var(tc, "tmpfile"));
124edebbb8eSjmmv }
125edebbb8eSjmmv
126edebbb8eSjmmv ATF_TC_WITH_CLEANUP(cleanup_curdir);
ATF_TC_HEAD(cleanup_curdir,tc)127edebbb8eSjmmv ATF_TC_HEAD(cleanup_curdir, tc)
128edebbb8eSjmmv {
129edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test "
130edebbb8eSjmmv "program");
131edebbb8eSjmmv }
ATF_TC_BODY(cleanup_curdir,tc)132edebbb8eSjmmv ATF_TC_BODY(cleanup_curdir, tc)
133edebbb8eSjmmv {
134edebbb8eSjmmv FILE *f;
135edebbb8eSjmmv
136edebbb8eSjmmv f = fopen("oldvalue", "w");
137edebbb8eSjmmv if (f == NULL)
138edebbb8eSjmmv atf_tc_fail("Failed to create oldvalue file");
139edebbb8eSjmmv fprintf(f, "1234");
140edebbb8eSjmmv fclose(f);
141edebbb8eSjmmv }
ATF_TC_CLEANUP(cleanup_curdir,tc)142edebbb8eSjmmv ATF_TC_CLEANUP(cleanup_curdir, tc)
143edebbb8eSjmmv {
144edebbb8eSjmmv FILE *f;
145edebbb8eSjmmv
146edebbb8eSjmmv f = fopen("oldvalue", "r");
147edebbb8eSjmmv if (f != NULL) {
148edebbb8eSjmmv int i;
149edebbb8eSjmmv if (fscanf(f, "%d", &i) != 1)
150edebbb8eSjmmv fprintf(stderr, "Failed to read old value\n");
151edebbb8eSjmmv else
152edebbb8eSjmmv printf("Old value: %d", i);
153edebbb8eSjmmv fclose(f);
154edebbb8eSjmmv }
155edebbb8eSjmmv }
156edebbb8eSjmmv
157edebbb8eSjmmv ATF_TC_WITH_CLEANUP(cleanup_sigterm);
ATF_TC_HEAD(cleanup_sigterm,tc)158edebbb8eSjmmv ATF_TC_HEAD(cleanup_sigterm, tc)
159edebbb8eSjmmv {
160edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_cleanup test "
161edebbb8eSjmmv "program");
162edebbb8eSjmmv }
ATF_TC_BODY(cleanup_sigterm,tc)163edebbb8eSjmmv ATF_TC_BODY(cleanup_sigterm, tc)
164edebbb8eSjmmv {
165edebbb8eSjmmv char *nofile;
166edebbb8eSjmmv
167edebbb8eSjmmv touch(atf_tc_get_config_var(tc, "tmpfile"));
168edebbb8eSjmmv kill(getpid(), SIGTERM);
169edebbb8eSjmmv
170edebbb8eSjmmv RE(atf_text_format(&nofile, "%s.no",
171edebbb8eSjmmv atf_tc_get_config_var(tc, "tmpfile")));
172edebbb8eSjmmv touch(nofile);
173edebbb8eSjmmv free(nofile);
174edebbb8eSjmmv }
ATF_TC_CLEANUP(cleanup_sigterm,tc)175edebbb8eSjmmv ATF_TC_CLEANUP(cleanup_sigterm, tc)
176edebbb8eSjmmv {
177edebbb8eSjmmv safe_remove(atf_tc_get_config_var(tc, "tmpfile"));
178edebbb8eSjmmv }
179edebbb8eSjmmv
180edebbb8eSjmmv /* ---------------------------------------------------------------------
181edebbb8eSjmmv * Helper tests for "t_config".
182edebbb8eSjmmv * --------------------------------------------------------------------- */
183edebbb8eSjmmv
184edebbb8eSjmmv ATF_TC(config_unset);
ATF_TC_HEAD(config_unset,tc)185edebbb8eSjmmv ATF_TC_HEAD(config_unset, tc)
186edebbb8eSjmmv {
187edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test "
188edebbb8eSjmmv "program");
189edebbb8eSjmmv }
ATF_TC_BODY(config_unset,tc)190edebbb8eSjmmv ATF_TC_BODY(config_unset, tc)
191edebbb8eSjmmv {
192edebbb8eSjmmv ATF_REQUIRE(!atf_tc_has_config_var(tc, "test"));
193edebbb8eSjmmv }
194edebbb8eSjmmv
195edebbb8eSjmmv ATF_TC(config_empty);
ATF_TC_HEAD(config_empty,tc)196edebbb8eSjmmv ATF_TC_HEAD(config_empty, tc)
197edebbb8eSjmmv {
198edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test "
199edebbb8eSjmmv "program");
200edebbb8eSjmmv }
ATF_TC_BODY(config_empty,tc)201edebbb8eSjmmv ATF_TC_BODY(config_empty, tc)
202edebbb8eSjmmv {
203edebbb8eSjmmv ATF_REQUIRE(atf_tc_has_config_var(tc, "test"));
204edebbb8eSjmmv ATF_REQUIRE(strlen(atf_tc_get_config_var(tc, "test")) == 0);
205edebbb8eSjmmv }
206edebbb8eSjmmv
207edebbb8eSjmmv ATF_TC(config_value);
ATF_TC_HEAD(config_value,tc)208edebbb8eSjmmv ATF_TC_HEAD(config_value, tc)
209edebbb8eSjmmv {
210edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test "
211edebbb8eSjmmv "program");
212edebbb8eSjmmv }
ATF_TC_BODY(config_value,tc)213edebbb8eSjmmv ATF_TC_BODY(config_value, tc)
214edebbb8eSjmmv {
215edebbb8eSjmmv ATF_REQUIRE(atf_tc_has_config_var(tc, "test"));
216edebbb8eSjmmv ATF_REQUIRE(strcmp(atf_tc_get_config_var(tc, "test"), "foo") == 0);
217edebbb8eSjmmv }
218edebbb8eSjmmv
219edebbb8eSjmmv ATF_TC(config_multi_value);
ATF_TC_HEAD(config_multi_value,tc)220edebbb8eSjmmv ATF_TC_HEAD(config_multi_value, tc)
221edebbb8eSjmmv {
222edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_config test "
223edebbb8eSjmmv "program");
224edebbb8eSjmmv }
ATF_TC_BODY(config_multi_value,tc)225edebbb8eSjmmv ATF_TC_BODY(config_multi_value, tc)
226edebbb8eSjmmv {
227edebbb8eSjmmv ATF_REQUIRE(atf_tc_has_config_var(tc, "test"));
228edebbb8eSjmmv ATF_REQUIRE(strcmp(atf_tc_get_config_var(tc, "test"), "foo bar") == 0);
229edebbb8eSjmmv }
230edebbb8eSjmmv
231edebbb8eSjmmv /* ---------------------------------------------------------------------
232edebbb8eSjmmv * Helper tests for "t_expect".
233edebbb8eSjmmv * --------------------------------------------------------------------- */
234edebbb8eSjmmv
235edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_pass_and_pass);
ATF_TC_BODY(expect_pass_and_pass,tc)236edebbb8eSjmmv ATF_TC_BODY(expect_pass_and_pass, tc)
237edebbb8eSjmmv {
238edebbb8eSjmmv atf_tc_expect_pass();
239edebbb8eSjmmv
240edebbb8eSjmmv }
241edebbb8eSjmmv
242edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_pass_but_fail_requirement);
ATF_TC_BODY(expect_pass_but_fail_requirement,tc)243edebbb8eSjmmv ATF_TC_BODY(expect_pass_but_fail_requirement, tc)
244edebbb8eSjmmv {
245edebbb8eSjmmv atf_tc_expect_pass();
246edebbb8eSjmmv atf_tc_fail("Some reason");
247edebbb8eSjmmv }
248edebbb8eSjmmv
249edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_pass_but_fail_check);
ATF_TC_BODY(expect_pass_but_fail_check,tc)250edebbb8eSjmmv ATF_TC_BODY(expect_pass_but_fail_check, tc)
251edebbb8eSjmmv {
252edebbb8eSjmmv atf_tc_expect_pass();
253edebbb8eSjmmv atf_tc_fail_nonfatal("Some reason");
254edebbb8eSjmmv }
255edebbb8eSjmmv
256edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_fail_and_fail_requirement);
ATF_TC_BODY(expect_fail_and_fail_requirement,tc)257edebbb8eSjmmv ATF_TC_BODY(expect_fail_and_fail_requirement, tc)
258edebbb8eSjmmv {
259edebbb8eSjmmv atf_tc_expect_fail("Fail %s", "reason");
260edebbb8eSjmmv atf_tc_fail("The failure");
261edebbb8eSjmmv atf_tc_expect_pass();
262edebbb8eSjmmv }
263edebbb8eSjmmv
264edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_fail_and_fail_check);
ATF_TC_BODY(expect_fail_and_fail_check,tc)265edebbb8eSjmmv ATF_TC_BODY(expect_fail_and_fail_check, tc)
266edebbb8eSjmmv {
267edebbb8eSjmmv atf_tc_expect_fail("Fail first");
268edebbb8eSjmmv atf_tc_fail_nonfatal("abc");
269edebbb8eSjmmv atf_tc_expect_pass();
270edebbb8eSjmmv
271edebbb8eSjmmv atf_tc_expect_fail("And fail again");
272edebbb8eSjmmv atf_tc_fail_nonfatal("def");
273edebbb8eSjmmv atf_tc_expect_pass();
274edebbb8eSjmmv }
275edebbb8eSjmmv
276edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_fail_but_pass);
ATF_TC_BODY(expect_fail_but_pass,tc)277edebbb8eSjmmv ATF_TC_BODY(expect_fail_but_pass, tc)
278edebbb8eSjmmv {
279edebbb8eSjmmv atf_tc_expect_fail("Fail first");
280edebbb8eSjmmv atf_tc_fail_nonfatal("abc");
281edebbb8eSjmmv atf_tc_expect_pass();
282edebbb8eSjmmv
283edebbb8eSjmmv atf_tc_expect_fail("Will not fail");
284edebbb8eSjmmv atf_tc_expect_pass();
285edebbb8eSjmmv
286edebbb8eSjmmv atf_tc_expect_fail("And fail again");
287edebbb8eSjmmv atf_tc_fail_nonfatal("def");
288edebbb8eSjmmv atf_tc_expect_pass();
289edebbb8eSjmmv }
290edebbb8eSjmmv
291edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_exit_any_and_exit);
ATF_TC_BODY(expect_exit_any_and_exit,tc)292edebbb8eSjmmv ATF_TC_BODY(expect_exit_any_and_exit, tc)
293edebbb8eSjmmv {
294edebbb8eSjmmv atf_tc_expect_exit(-1, "Call will exit");
295edebbb8eSjmmv exit(EXIT_SUCCESS);
296edebbb8eSjmmv }
297edebbb8eSjmmv
298edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_exit_code_and_exit);
ATF_TC_BODY(expect_exit_code_and_exit,tc)299edebbb8eSjmmv ATF_TC_BODY(expect_exit_code_and_exit, tc)
300edebbb8eSjmmv {
301edebbb8eSjmmv atf_tc_expect_exit(123, "Call will exit");
302edebbb8eSjmmv exit(123);
303edebbb8eSjmmv }
304edebbb8eSjmmv
305edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_exit_but_pass);
ATF_TC_BODY(expect_exit_but_pass,tc)306edebbb8eSjmmv ATF_TC_BODY(expect_exit_but_pass, tc)
307edebbb8eSjmmv {
308edebbb8eSjmmv atf_tc_expect_exit(-1, "Call won't exit");
309edebbb8eSjmmv }
310edebbb8eSjmmv
311edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_signal_any_and_signal);
ATF_TC_BODY(expect_signal_any_and_signal,tc)312edebbb8eSjmmv ATF_TC_BODY(expect_signal_any_and_signal, tc)
313edebbb8eSjmmv {
314edebbb8eSjmmv atf_tc_expect_signal(-1, "Call will signal");
315edebbb8eSjmmv kill(getpid(), SIGKILL);
316edebbb8eSjmmv }
317edebbb8eSjmmv
318edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_signal_no_and_signal);
ATF_TC_BODY(expect_signal_no_and_signal,tc)319edebbb8eSjmmv ATF_TC_BODY(expect_signal_no_and_signal, tc)
320edebbb8eSjmmv {
321edebbb8eSjmmv atf_tc_expect_signal(SIGHUP, "Call will signal");
322edebbb8eSjmmv kill(getpid(), SIGHUP);
323edebbb8eSjmmv }
324edebbb8eSjmmv
325edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_signal_but_pass);
ATF_TC_BODY(expect_signal_but_pass,tc)326edebbb8eSjmmv ATF_TC_BODY(expect_signal_but_pass, tc)
327edebbb8eSjmmv {
328edebbb8eSjmmv atf_tc_expect_signal(-1, "Call won't signal");
329edebbb8eSjmmv }
330edebbb8eSjmmv
331edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_death_and_exit);
ATF_TC_BODY(expect_death_and_exit,tc)332edebbb8eSjmmv ATF_TC_BODY(expect_death_and_exit, tc)
333edebbb8eSjmmv {
334edebbb8eSjmmv atf_tc_expect_death("Exit case");
335edebbb8eSjmmv exit(123);
336edebbb8eSjmmv }
337edebbb8eSjmmv
338edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_death_and_signal);
ATF_TC_BODY(expect_death_and_signal,tc)339edebbb8eSjmmv ATF_TC_BODY(expect_death_and_signal, tc)
340edebbb8eSjmmv {
341edebbb8eSjmmv atf_tc_expect_death("Signal case");
342edebbb8eSjmmv kill(getpid(), SIGKILL);
343edebbb8eSjmmv }
344edebbb8eSjmmv
345edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(expect_death_but_pass);
ATF_TC_BODY(expect_death_but_pass,tc)346edebbb8eSjmmv ATF_TC_BODY(expect_death_but_pass, tc)
347edebbb8eSjmmv {
348edebbb8eSjmmv atf_tc_expect_death("Call won't die");
349edebbb8eSjmmv }
350edebbb8eSjmmv
351edebbb8eSjmmv ATF_TC(expect_timeout_and_hang);
ATF_TC_HEAD(expect_timeout_and_hang,tc)352edebbb8eSjmmv ATF_TC_HEAD(expect_timeout_and_hang, tc)
353edebbb8eSjmmv {
354edebbb8eSjmmv atf_tc_set_md_var(tc, "timeout", "1");
355edebbb8eSjmmv }
ATF_TC_BODY(expect_timeout_and_hang,tc)356edebbb8eSjmmv ATF_TC_BODY(expect_timeout_and_hang, tc)
357edebbb8eSjmmv {
358edebbb8eSjmmv atf_tc_expect_timeout("Will overrun");
359edebbb8eSjmmv sleep(5);
360edebbb8eSjmmv }
361edebbb8eSjmmv
362edebbb8eSjmmv ATF_TC(expect_timeout_but_pass);
ATF_TC_HEAD(expect_timeout_but_pass,tc)363edebbb8eSjmmv ATF_TC_HEAD(expect_timeout_but_pass, tc)
364edebbb8eSjmmv {
365edebbb8eSjmmv atf_tc_set_md_var(tc, "timeout", "1");
366edebbb8eSjmmv }
ATF_TC_BODY(expect_timeout_but_pass,tc)367edebbb8eSjmmv ATF_TC_BODY(expect_timeout_but_pass, tc)
368edebbb8eSjmmv {
369edebbb8eSjmmv atf_tc_expect_timeout("Will just exit");
370edebbb8eSjmmv }
371edebbb8eSjmmv
372edebbb8eSjmmv /* ---------------------------------------------------------------------
373edebbb8eSjmmv * Helper tests for "t_meta_data".
374edebbb8eSjmmv * --------------------------------------------------------------------- */
375edebbb8eSjmmv
376*a551a20fSjmmv ATF_TC_WITHOUT_HEAD(metadata_no_descr);
ATF_TC_BODY(metadata_no_descr,tc)377edebbb8eSjmmv ATF_TC_BODY(metadata_no_descr, tc)
378edebbb8eSjmmv {
379edebbb8eSjmmv }
380edebbb8eSjmmv
381edebbb8eSjmmv ATF_TC_WITHOUT_HEAD(metadata_no_head);
ATF_TC_BODY(metadata_no_head,tc)382edebbb8eSjmmv ATF_TC_BODY(metadata_no_head, tc)
383edebbb8eSjmmv {
384edebbb8eSjmmv }
385edebbb8eSjmmv
386edebbb8eSjmmv /* ---------------------------------------------------------------------
387edebbb8eSjmmv * Helper tests for "t_srcdir".
388edebbb8eSjmmv * --------------------------------------------------------------------- */
389edebbb8eSjmmv
390edebbb8eSjmmv ATF_TC(srcdir_exists);
ATF_TC_HEAD(srcdir_exists,tc)391edebbb8eSjmmv ATF_TC_HEAD(srcdir_exists, tc)
392edebbb8eSjmmv {
393edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_srcdir test "
394edebbb8eSjmmv "program");
395edebbb8eSjmmv }
ATF_TC_BODY(srcdir_exists,tc)396edebbb8eSjmmv ATF_TC_BODY(srcdir_exists, tc)
397edebbb8eSjmmv {
398edebbb8eSjmmv atf_fs_path_t p;
399edebbb8eSjmmv bool b;
400edebbb8eSjmmv
401edebbb8eSjmmv RE(atf_fs_path_init_fmt(&p, "%s/datafile",
402edebbb8eSjmmv atf_tc_get_config_var(tc, "srcdir")));
403edebbb8eSjmmv RE(atf_fs_exists(&p, &b));
404edebbb8eSjmmv atf_fs_path_fini(&p);
405edebbb8eSjmmv if (!b)
406edebbb8eSjmmv atf_tc_fail("Cannot find datafile");
407edebbb8eSjmmv }
408edebbb8eSjmmv
409edebbb8eSjmmv /* ---------------------------------------------------------------------
410edebbb8eSjmmv * Helper tests for "t_result".
411edebbb8eSjmmv * --------------------------------------------------------------------- */
412edebbb8eSjmmv
413*a551a20fSjmmv ATF_TC_WITHOUT_HEAD(result_pass);
ATF_TC_BODY(result_pass,tc)414edebbb8eSjmmv ATF_TC_BODY(result_pass, tc)
415edebbb8eSjmmv {
416edebbb8eSjmmv printf("msg\n");
417edebbb8eSjmmv }
418edebbb8eSjmmv
419*a551a20fSjmmv ATF_TC_WITHOUT_HEAD(result_fail);
ATF_TC_BODY(result_fail,tc)420edebbb8eSjmmv ATF_TC_BODY(result_fail, tc)
421edebbb8eSjmmv {
422edebbb8eSjmmv printf("msg\n");
423edebbb8eSjmmv atf_tc_fail("Failure reason");
424edebbb8eSjmmv }
425edebbb8eSjmmv
426*a551a20fSjmmv ATF_TC_WITHOUT_HEAD(result_skip);
ATF_TC_BODY(result_skip,tc)427edebbb8eSjmmv ATF_TC_BODY(result_skip, tc)
428edebbb8eSjmmv {
429edebbb8eSjmmv printf("msg\n");
430edebbb8eSjmmv atf_tc_skip("Skipped reason");
431edebbb8eSjmmv }
432edebbb8eSjmmv
433edebbb8eSjmmv ATF_TC(result_newlines_fail);
ATF_TC_HEAD(result_newlines_fail,tc)434edebbb8eSjmmv ATF_TC_HEAD(result_newlines_fail, tc)
435edebbb8eSjmmv {
436edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_result test "
437edebbb8eSjmmv "program");
438edebbb8eSjmmv }
ATF_TC_BODY(result_newlines_fail,tc)439edebbb8eSjmmv ATF_TC_BODY(result_newlines_fail, tc)
440edebbb8eSjmmv {
441edebbb8eSjmmv atf_tc_fail("First line\nSecond line");
442edebbb8eSjmmv }
443edebbb8eSjmmv
444edebbb8eSjmmv ATF_TC(result_newlines_skip);
ATF_TC_HEAD(result_newlines_skip,tc)445edebbb8eSjmmv ATF_TC_HEAD(result_newlines_skip, tc)
446edebbb8eSjmmv {
447edebbb8eSjmmv atf_tc_set_md_var(tc, "descr", "Helper test case for the t_result test "
448edebbb8eSjmmv "program");
449edebbb8eSjmmv }
ATF_TC_BODY(result_newlines_skip,tc)450edebbb8eSjmmv ATF_TC_BODY(result_newlines_skip, tc)
451edebbb8eSjmmv {
452edebbb8eSjmmv atf_tc_skip("First line\nSecond line");
453edebbb8eSjmmv }
454edebbb8eSjmmv
455edebbb8eSjmmv /* ---------------------------------------------------------------------
456edebbb8eSjmmv * Main.
457edebbb8eSjmmv * --------------------------------------------------------------------- */
458edebbb8eSjmmv
ATF_TP_ADD_TCS(tp)459edebbb8eSjmmv ATF_TP_ADD_TCS(tp)
460edebbb8eSjmmv {
461edebbb8eSjmmv /* Add helper tests for t_cleanup. */
462edebbb8eSjmmv ATF_TP_ADD_TC(tp, cleanup_pass);
463edebbb8eSjmmv ATF_TP_ADD_TC(tp, cleanup_fail);
464edebbb8eSjmmv ATF_TP_ADD_TC(tp, cleanup_skip);
465edebbb8eSjmmv ATF_TP_ADD_TC(tp, cleanup_curdir);
466edebbb8eSjmmv ATF_TP_ADD_TC(tp, cleanup_sigterm);
467edebbb8eSjmmv
468edebbb8eSjmmv /* Add helper tests for t_config. */
469edebbb8eSjmmv ATF_TP_ADD_TC(tp, config_unset);
470edebbb8eSjmmv ATF_TP_ADD_TC(tp, config_empty);
471edebbb8eSjmmv ATF_TP_ADD_TC(tp, config_value);
472edebbb8eSjmmv ATF_TP_ADD_TC(tp, config_multi_value);
473edebbb8eSjmmv
474edebbb8eSjmmv /* Add helper tests for t_expect. */
475edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_pass_and_pass);
476edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_pass_but_fail_requirement);
477edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_pass_but_fail_check);
478edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_fail_and_fail_requirement);
479edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_fail_and_fail_check);
480edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_fail_but_pass);
481edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_exit_any_and_exit);
482edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_exit_code_and_exit);
483edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_exit_but_pass);
484edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_signal_any_and_signal);
485edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_signal_no_and_signal);
486edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_signal_but_pass);
487edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_death_and_exit);
488edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_death_and_signal);
489edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_death_but_pass);
490edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_timeout_and_hang);
491edebbb8eSjmmv ATF_TP_ADD_TC(tp, expect_timeout_but_pass);
492edebbb8eSjmmv
493edebbb8eSjmmv /* Add helper tests for t_meta_data. */
494edebbb8eSjmmv ATF_TP_ADD_TC(tp, metadata_no_descr);
495edebbb8eSjmmv ATF_TP_ADD_TC(tp, metadata_no_head);
496edebbb8eSjmmv
497edebbb8eSjmmv /* Add helper tests for t_srcdir. */
498edebbb8eSjmmv ATF_TP_ADD_TC(tp, srcdir_exists);
499edebbb8eSjmmv
500edebbb8eSjmmv /* Add helper tests for t_result. */
501edebbb8eSjmmv ATF_TP_ADD_TC(tp, result_pass);
502edebbb8eSjmmv ATF_TP_ADD_TC(tp, result_fail);
503edebbb8eSjmmv ATF_TP_ADD_TC(tp, result_skip);
504edebbb8eSjmmv ATF_TP_ADD_TC(tp, result_newlines_fail);
505edebbb8eSjmmv ATF_TP_ADD_TC(tp, result_newlines_skip);
506edebbb8eSjmmv
507edebbb8eSjmmv return atf_no_error();
508edebbb8eSjmmv }
509