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