1240116Smarcel// Copyright (c) 2007 The NetBSD Foundation, Inc.
2240116Smarcel// All rights reserved.
3240116Smarcel//
4240116Smarcel// Redistribution and use in source and binary forms, with or without
5240116Smarcel// modification, are permitted provided that the following conditions
6240116Smarcel// are met:
7240116Smarcel// 1. Redistributions of source code must retain the above copyright
8240116Smarcel//    notice, this list of conditions and the following disclaimer.
9240116Smarcel// 2. Redistributions in binary form must reproduce the above copyright
10240116Smarcel//    notice, this list of conditions and the following disclaimer in the
11240116Smarcel//    documentation and/or other materials provided with the distribution.
12240116Smarcel//
13240116Smarcel// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND
14240116Smarcel// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES,
15240116Smarcel// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
16240116Smarcel// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED.
17240116Smarcel// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY
18240116Smarcel// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19240116Smarcel// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
20240116Smarcel// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS
21240116Smarcel// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER
22240116Smarcel// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR
23240116Smarcel// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN
24240116Smarcel// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25240116Smarcel
26240116Smarcelextern "C" {
27240116Smarcel#include <signal.h>
28240116Smarcel#include <unistd.h>
29240116Smarcel}
30240116Smarcel
31240116Smarcel#include <cstdlib>
32240116Smarcel#include <fstream>
33240116Smarcel#include <iostream>
34240116Smarcel
35260029Sjmmv#include <atf-c++.hpp>
36240116Smarcel
37240116Smarcel#include "atf-c++/detail/fs.hpp"
38240116Smarcel
39240116Smarcel// ------------------------------------------------------------------------
40240116Smarcel// Helper tests for "t_config".
41240116Smarcel// ------------------------------------------------------------------------
42240116Smarcel
43240116SmarcelATF_TEST_CASE(config_unset);
44240116SmarcelATF_TEST_CASE_HEAD(config_unset)
45240116Smarcel{
46240116Smarcel    set_md_var("descr", "Helper test case for the t_config test program");
47240116Smarcel}
48240116SmarcelATF_TEST_CASE_BODY(config_unset)
49240116Smarcel{
50240116Smarcel    ATF_REQUIRE(!has_config_var("test"));
51240116Smarcel}
52240116Smarcel
53240116SmarcelATF_TEST_CASE(config_empty);
54240116SmarcelATF_TEST_CASE_HEAD(config_empty)
55240116Smarcel{
56240116Smarcel    set_md_var("descr", "Helper test case for the t_config test program");
57240116Smarcel}
58240116SmarcelATF_TEST_CASE_BODY(config_empty)
59240116Smarcel{
60240116Smarcel    ATF_REQUIRE_EQ(get_config_var("test"), "");
61240116Smarcel}
62240116Smarcel
63240116SmarcelATF_TEST_CASE(config_value);
64240116SmarcelATF_TEST_CASE_HEAD(config_value)
65240116Smarcel{
66240116Smarcel    set_md_var("descr", "Helper test case for the t_config test program");
67240116Smarcel}
68240116SmarcelATF_TEST_CASE_BODY(config_value)
69240116Smarcel{
70240116Smarcel    ATF_REQUIRE_EQ(get_config_var("test"), "foo");
71240116Smarcel}
72240116Smarcel
73240116SmarcelATF_TEST_CASE(config_multi_value);
74240116SmarcelATF_TEST_CASE_HEAD(config_multi_value)
75240116Smarcel{
76240116Smarcel    set_md_var("descr", "Helper test case for the t_config test program");
77240116Smarcel}
78240116SmarcelATF_TEST_CASE_BODY(config_multi_value)
79240116Smarcel{
80240116Smarcel    ATF_REQUIRE_EQ(get_config_var("test"), "foo bar");
81240116Smarcel}
82240116Smarcel
83240116Smarcel// ------------------------------------------------------------------------
84240116Smarcel// Helper tests for "t_expect".
85240116Smarcel// ------------------------------------------------------------------------
86240116Smarcel
87240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_pass_and_pass);
88240116SmarcelATF_TEST_CASE_BODY(expect_pass_and_pass)
89240116Smarcel{
90240116Smarcel    expect_pass();
91240116Smarcel}
92240116Smarcel
93240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_pass_but_fail_requirement);
94240116SmarcelATF_TEST_CASE_BODY(expect_pass_but_fail_requirement)
95240116Smarcel{
96240116Smarcel    expect_pass();
97240116Smarcel    fail("Some reason");
98240116Smarcel}
99240116Smarcel
100240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_pass_but_fail_check);
101240116SmarcelATF_TEST_CASE_BODY(expect_pass_but_fail_check)
102240116Smarcel{
103240116Smarcel    expect_pass();
104240116Smarcel    fail_nonfatal("Some reason");
105240116Smarcel}
106240116Smarcel
107240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_fail_and_fail_requirement);
108240116SmarcelATF_TEST_CASE_BODY(expect_fail_and_fail_requirement)
109240116Smarcel{
110240116Smarcel    expect_fail("Fail reason");
111240116Smarcel    fail("The failure");
112240116Smarcel    expect_pass();
113240116Smarcel}
114240116Smarcel
115240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_fail_and_fail_check);
116240116SmarcelATF_TEST_CASE_BODY(expect_fail_and_fail_check)
117240116Smarcel{
118240116Smarcel    expect_fail("Fail first");
119240116Smarcel    fail_nonfatal("abc");
120240116Smarcel    expect_pass();
121240116Smarcel
122240116Smarcel    expect_fail("And fail again");
123240116Smarcel    fail_nonfatal("def");
124240116Smarcel    expect_pass();
125240116Smarcel}
126240116Smarcel
127240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_fail_but_pass);
128240116SmarcelATF_TEST_CASE_BODY(expect_fail_but_pass)
129240116Smarcel{
130240116Smarcel    expect_fail("Fail first");
131240116Smarcel    fail_nonfatal("abc");
132240116Smarcel    expect_pass();
133240116Smarcel
134240116Smarcel    expect_fail("Will not fail");
135240116Smarcel    expect_pass();
136240116Smarcel
137240116Smarcel    expect_fail("And fail again");
138240116Smarcel    fail_nonfatal("def");
139240116Smarcel    expect_pass();
140240116Smarcel}
141240116Smarcel
142240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_exit_any_and_exit);
143240116SmarcelATF_TEST_CASE_BODY(expect_exit_any_and_exit)
144240116Smarcel{
145240116Smarcel    expect_exit(-1, "Call will exit");
146240116Smarcel    std::exit(EXIT_SUCCESS);
147240116Smarcel}
148240116Smarcel
149240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_exit_code_and_exit);
150240116SmarcelATF_TEST_CASE_BODY(expect_exit_code_and_exit)
151240116Smarcel{
152240116Smarcel    expect_exit(123, "Call will exit");
153240116Smarcel    std::exit(123);
154240116Smarcel}
155240116Smarcel
156240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_exit_but_pass);
157240116SmarcelATF_TEST_CASE_BODY(expect_exit_but_pass)
158240116Smarcel{
159240116Smarcel    expect_exit(-1, "Call won't exit");
160240116Smarcel}
161240116Smarcel
162240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_signal_any_and_signal);
163240116SmarcelATF_TEST_CASE_BODY(expect_signal_any_and_signal)
164240116Smarcel{
165240116Smarcel    expect_signal(-1, "Call will signal");
166240116Smarcel    ::kill(getpid(), SIGKILL);
167240116Smarcel}
168240116Smarcel
169240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_signal_no_and_signal);
170240116SmarcelATF_TEST_CASE_BODY(expect_signal_no_and_signal)
171240116Smarcel{
172240116Smarcel    expect_signal(SIGHUP, "Call will signal");
173240116Smarcel    ::kill(getpid(), SIGHUP);
174240116Smarcel}
175240116Smarcel
176240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_signal_but_pass);
177240116SmarcelATF_TEST_CASE_BODY(expect_signal_but_pass)
178240116Smarcel{
179240116Smarcel    expect_signal(-1, "Call won't signal");
180240116Smarcel}
181240116Smarcel
182240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_death_and_exit);
183240116SmarcelATF_TEST_CASE_BODY(expect_death_and_exit)
184240116Smarcel{
185240116Smarcel    expect_death("Exit case");
186240116Smarcel    std::exit(123);
187240116Smarcel}
188240116Smarcel
189240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_death_and_signal);
190240116SmarcelATF_TEST_CASE_BODY(expect_death_and_signal)
191240116Smarcel{
192240116Smarcel    expect_death("Signal case");
193240116Smarcel    kill(getpid(), SIGKILL);
194240116Smarcel}
195240116Smarcel
196240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(expect_death_but_pass);
197240116SmarcelATF_TEST_CASE_BODY(expect_death_but_pass)
198240116Smarcel{
199240116Smarcel    expect_death("Call won't die");
200240116Smarcel}
201240116Smarcel
202240116SmarcelATF_TEST_CASE(expect_timeout_and_hang);
203240116SmarcelATF_TEST_CASE_HEAD(expect_timeout_and_hang)
204240116Smarcel{
205240116Smarcel    set_md_var("timeout", "1");
206240116Smarcel}
207240116SmarcelATF_TEST_CASE_BODY(expect_timeout_and_hang)
208240116Smarcel{
209240116Smarcel    expect_timeout("Will overrun");
210240116Smarcel    ::sleep(5);
211240116Smarcel}
212240116Smarcel
213240116SmarcelATF_TEST_CASE(expect_timeout_but_pass);
214240116SmarcelATF_TEST_CASE_HEAD(expect_timeout_but_pass)
215240116Smarcel{
216240116Smarcel    set_md_var("timeout", "1");
217240116Smarcel}
218240116SmarcelATF_TEST_CASE_BODY(expect_timeout_but_pass)
219240116Smarcel{
220240116Smarcel    expect_timeout("Will just exit");
221240116Smarcel}
222240116Smarcel
223240116Smarcel// ------------------------------------------------------------------------
224240116Smarcel// Helper tests for "t_meta_data".
225240116Smarcel// ------------------------------------------------------------------------
226240116Smarcel
227240116SmarcelATF_TEST_CASE(metadata_no_descr);
228240116SmarcelATF_TEST_CASE_HEAD(metadata_no_descr)
229240116Smarcel{
230240116Smarcel}
231240116SmarcelATF_TEST_CASE_BODY(metadata_no_descr)
232240116Smarcel{
233240116Smarcel}
234240116Smarcel
235240116SmarcelATF_TEST_CASE_WITHOUT_HEAD(metadata_no_head);
236240116SmarcelATF_TEST_CASE_BODY(metadata_no_head)
237240116Smarcel{
238240116Smarcel}
239240116Smarcel
240240116Smarcel// ------------------------------------------------------------------------
241240116Smarcel// Helper tests for "t_srcdir".
242240116Smarcel// ------------------------------------------------------------------------
243240116Smarcel
244240116SmarcelATF_TEST_CASE(srcdir_exists);
245240116SmarcelATF_TEST_CASE_HEAD(srcdir_exists)
246240116Smarcel{
247240116Smarcel    set_md_var("descr", "Helper test case for the t_srcdir test program");
248240116Smarcel}
249240116SmarcelATF_TEST_CASE_BODY(srcdir_exists)
250240116Smarcel{
251240116Smarcel    if (!atf::fs::exists(atf::fs::path(get_config_var("srcdir")) /
252240116Smarcel        "datafile"))
253240116Smarcel        ATF_FAIL("Cannot find datafile");
254240116Smarcel}
255240116Smarcel
256240116Smarcel// ------------------------------------------------------------------------
257240116Smarcel// Helper tests for "t_result".
258240116Smarcel// ------------------------------------------------------------------------
259240116Smarcel
260240116SmarcelATF_TEST_CASE(result_pass);
261240116SmarcelATF_TEST_CASE_HEAD(result_pass) { }
262240116SmarcelATF_TEST_CASE_BODY(result_pass)
263240116Smarcel{
264240116Smarcel    std::cout << "msg\n";
265240116Smarcel}
266240116Smarcel
267240116SmarcelATF_TEST_CASE(result_fail);
268240116SmarcelATF_TEST_CASE_HEAD(result_fail) { }
269240116SmarcelATF_TEST_CASE_BODY(result_fail)
270240116Smarcel{
271240116Smarcel    std::cout << "msg\n";
272240116Smarcel    ATF_FAIL("Failure reason");
273240116Smarcel}
274240116Smarcel
275240116SmarcelATF_TEST_CASE(result_skip);
276240116SmarcelATF_TEST_CASE_HEAD(result_skip) { }
277240116SmarcelATF_TEST_CASE_BODY(result_skip)
278240116Smarcel{
279240116Smarcel    std::cout << "msg\n";
280240116Smarcel    ATF_SKIP("Skipped reason");
281240116Smarcel}
282240116Smarcel
283240116SmarcelATF_TEST_CASE(result_newlines_fail);
284240116SmarcelATF_TEST_CASE_HEAD(result_newlines_fail)
285240116Smarcel{
286240116Smarcel    set_md_var("descr", "Helper test case for the t_result test program");
287240116Smarcel}
288240116SmarcelATF_TEST_CASE_BODY(result_newlines_fail)
289240116Smarcel{
290240116Smarcel    ATF_FAIL("First line\nSecond line");
291240116Smarcel}
292240116Smarcel
293240116SmarcelATF_TEST_CASE(result_newlines_skip);
294240116SmarcelATF_TEST_CASE_HEAD(result_newlines_skip)
295240116Smarcel{
296240116Smarcel    set_md_var("descr", "Helper test case for the t_result test program");
297240116Smarcel}
298240116SmarcelATF_TEST_CASE_BODY(result_newlines_skip)
299240116Smarcel{
300240116Smarcel    ATF_SKIP("First line\nSecond line");
301240116Smarcel}
302240116Smarcel
303240116SmarcelATF_TEST_CASE(result_exception);
304240116SmarcelATF_TEST_CASE_HEAD(result_exception) { }
305240116SmarcelATF_TEST_CASE_BODY(result_exception)
306240116Smarcel{
307240116Smarcel    throw std::runtime_error("This is unhandled");
308240116Smarcel}
309240116Smarcel
310240116Smarcel// ------------------------------------------------------------------------
311240116Smarcel// Main.
312240116Smarcel// ------------------------------------------------------------------------
313240116Smarcel
314240116SmarcelATF_INIT_TEST_CASES(tcs)
315240116Smarcel{
316240116Smarcel    // Add helper tests for t_config.
317240116Smarcel    ATF_ADD_TEST_CASE(tcs, config_unset);
318240116Smarcel    ATF_ADD_TEST_CASE(tcs, config_empty);
319240116Smarcel    ATF_ADD_TEST_CASE(tcs, config_value);
320240116Smarcel    ATF_ADD_TEST_CASE(tcs, config_multi_value);
321240116Smarcel
322240116Smarcel    // Add helper tests for t_expect.
323240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_pass_and_pass);
324240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_pass_but_fail_requirement);
325240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_pass_but_fail_check);
326240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_fail_and_fail_requirement);
327240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_fail_and_fail_check);
328240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_fail_but_pass);
329240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_exit_any_and_exit);
330240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_exit_code_and_exit);
331240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_exit_but_pass);
332240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_signal_any_and_signal);
333240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_signal_no_and_signal);
334240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_signal_but_pass);
335240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_death_and_exit);
336240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_death_and_signal);
337240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_death_but_pass);
338240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_timeout_and_hang);
339240116Smarcel    ATF_ADD_TEST_CASE(tcs, expect_timeout_but_pass);
340240116Smarcel
341240116Smarcel    // Add helper tests for t_meta_data.
342240116Smarcel    ATF_ADD_TEST_CASE(tcs, metadata_no_descr);
343240116Smarcel    ATF_ADD_TEST_CASE(tcs, metadata_no_head);
344240116Smarcel
345240116Smarcel    // Add helper tests for t_srcdir.
346240116Smarcel    ATF_ADD_TEST_CASE(tcs, srcdir_exists);
347240116Smarcel
348240116Smarcel    // Add helper tests for t_result.
349240116Smarcel    ATF_ADD_TEST_CASE(tcs, result_pass);
350240116Smarcel    ATF_ADD_TEST_CASE(tcs, result_fail);
351240116Smarcel    ATF_ADD_TEST_CASE(tcs, result_skip);
352240116Smarcel    ATF_ADD_TEST_CASE(tcs, result_newlines_fail);
353240116Smarcel    ATF_ADD_TEST_CASE(tcs, result_newlines_skip);
354240116Smarcel    ATF_ADD_TEST_CASE(tcs, result_exception);
355240116Smarcel}
356