cpp_helpers.cpp revision 275988
1// Copyright (c) 2007 The NetBSD Foundation, Inc. 2// All rights reserved. 3// 4// Redistribution and use in source and binary forms, with or without 5// modification, are permitted provided that the following conditions 6// are met: 7// 1. Redistributions of source code must retain the above copyright 8// notice, this list of conditions and the following disclaimer. 9// 2. Redistributions in binary form must reproduce the above copyright 10// notice, this list of conditions and the following disclaimer in the 11// documentation and/or other materials provided with the distribution. 12// 13// THIS SOFTWARE IS PROVIDED BY THE NETBSD FOUNDATION, INC. AND 14// CONTRIBUTORS ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, 15// INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF 16// MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. 17// IN NO EVENT SHALL THE FOUNDATION OR CONTRIBUTORS BE LIABLE FOR ANY 18// DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 19// DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE 20// GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS 21// INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER 22// IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR 23// OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN 24// IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. 25 26extern "C" { 27#include <signal.h> 28#include <unistd.h> 29} 30 31#include <cstdlib> 32#include <fstream> 33#include <iostream> 34 35#include <atf-c++.hpp> 36 37#include "atf-c++/detail/fs.hpp" 38 39// ------------------------------------------------------------------------ 40// Helper tests for "t_config". 41// ------------------------------------------------------------------------ 42 43ATF_TEST_CASE(config_unset); 44ATF_TEST_CASE_HEAD(config_unset) 45{ 46 set_md_var("descr", "Helper test case for the t_config test program"); 47} 48ATF_TEST_CASE_BODY(config_unset) 49{ 50 ATF_REQUIRE(!has_config_var("test")); 51} 52 53ATF_TEST_CASE(config_empty); 54ATF_TEST_CASE_HEAD(config_empty) 55{ 56 set_md_var("descr", "Helper test case for the t_config test program"); 57} 58ATF_TEST_CASE_BODY(config_empty) 59{ 60 ATF_REQUIRE_EQ(get_config_var("test"), ""); 61} 62 63ATF_TEST_CASE(config_value); 64ATF_TEST_CASE_HEAD(config_value) 65{ 66 set_md_var("descr", "Helper test case for the t_config test program"); 67} 68ATF_TEST_CASE_BODY(config_value) 69{ 70 ATF_REQUIRE_EQ(get_config_var("test"), "foo"); 71} 72 73ATF_TEST_CASE(config_multi_value); 74ATF_TEST_CASE_HEAD(config_multi_value) 75{ 76 set_md_var("descr", "Helper test case for the t_config test program"); 77} 78ATF_TEST_CASE_BODY(config_multi_value) 79{ 80 ATF_REQUIRE_EQ(get_config_var("test"), "foo bar"); 81} 82 83// ------------------------------------------------------------------------ 84// Helper tests for "t_expect". 85// ------------------------------------------------------------------------ 86 87ATF_TEST_CASE_WITHOUT_HEAD(expect_pass_and_pass); 88ATF_TEST_CASE_BODY(expect_pass_and_pass) 89{ 90 expect_pass(); 91} 92 93ATF_TEST_CASE_WITHOUT_HEAD(expect_pass_but_fail_requirement); 94ATF_TEST_CASE_BODY(expect_pass_but_fail_requirement) 95{ 96 expect_pass(); 97 fail("Some reason"); 98} 99 100ATF_TEST_CASE_WITHOUT_HEAD(expect_pass_but_fail_check); 101ATF_TEST_CASE_BODY(expect_pass_but_fail_check) 102{ 103 expect_pass(); 104 fail_nonfatal("Some reason"); 105} 106 107ATF_TEST_CASE_WITHOUT_HEAD(expect_fail_and_fail_requirement); 108ATF_TEST_CASE_BODY(expect_fail_and_fail_requirement) 109{ 110 expect_fail("Fail reason"); 111 fail("The failure"); 112 expect_pass(); 113} 114 115ATF_TEST_CASE_WITHOUT_HEAD(expect_fail_and_fail_check); 116ATF_TEST_CASE_BODY(expect_fail_and_fail_check) 117{ 118 expect_fail("Fail first"); 119 fail_nonfatal("abc"); 120 expect_pass(); 121 122 expect_fail("And fail again"); 123 fail_nonfatal("def"); 124 expect_pass(); 125} 126 127ATF_TEST_CASE_WITHOUT_HEAD(expect_fail_but_pass); 128ATF_TEST_CASE_BODY(expect_fail_but_pass) 129{ 130 expect_fail("Fail first"); 131 fail_nonfatal("abc"); 132 expect_pass(); 133 134 expect_fail("Will not fail"); 135 expect_pass(); 136 137 expect_fail("And fail again"); 138 fail_nonfatal("def"); 139 expect_pass(); 140} 141 142ATF_TEST_CASE_WITHOUT_HEAD(expect_exit_any_and_exit); 143ATF_TEST_CASE_BODY(expect_exit_any_and_exit) 144{ 145 expect_exit(-1, "Call will exit"); 146 std::exit(EXIT_SUCCESS); 147} 148 149ATF_TEST_CASE_WITHOUT_HEAD(expect_exit_code_and_exit); 150ATF_TEST_CASE_BODY(expect_exit_code_and_exit) 151{ 152 expect_exit(123, "Call will exit"); 153 std::exit(123); 154} 155 156ATF_TEST_CASE_WITHOUT_HEAD(expect_exit_but_pass); 157ATF_TEST_CASE_BODY(expect_exit_but_pass) 158{ 159 expect_exit(-1, "Call won't exit"); 160} 161 162ATF_TEST_CASE_WITHOUT_HEAD(expect_signal_any_and_signal); 163ATF_TEST_CASE_BODY(expect_signal_any_and_signal) 164{ 165 expect_signal(-1, "Call will signal"); 166 ::kill(getpid(), SIGKILL); 167} 168 169ATF_TEST_CASE_WITHOUT_HEAD(expect_signal_no_and_signal); 170ATF_TEST_CASE_BODY(expect_signal_no_and_signal) 171{ 172 expect_signal(SIGHUP, "Call will signal"); 173 ::kill(getpid(), SIGHUP); 174} 175 176ATF_TEST_CASE_WITHOUT_HEAD(expect_signal_but_pass); 177ATF_TEST_CASE_BODY(expect_signal_but_pass) 178{ 179 expect_signal(-1, "Call won't signal"); 180} 181 182ATF_TEST_CASE_WITHOUT_HEAD(expect_death_and_exit); 183ATF_TEST_CASE_BODY(expect_death_and_exit) 184{ 185 expect_death("Exit case"); 186 std::exit(123); 187} 188 189ATF_TEST_CASE_WITHOUT_HEAD(expect_death_and_signal); 190ATF_TEST_CASE_BODY(expect_death_and_signal) 191{ 192 expect_death("Signal case"); 193 kill(getpid(), SIGKILL); 194} 195 196ATF_TEST_CASE_WITHOUT_HEAD(expect_death_but_pass); 197ATF_TEST_CASE_BODY(expect_death_but_pass) 198{ 199 expect_death("Call won't die"); 200} 201 202ATF_TEST_CASE(expect_timeout_and_hang); 203ATF_TEST_CASE_HEAD(expect_timeout_and_hang) 204{ 205 set_md_var("timeout", "1"); 206} 207ATF_TEST_CASE_BODY(expect_timeout_and_hang) 208{ 209 expect_timeout("Will overrun"); 210 ::sleep(5); 211} 212 213ATF_TEST_CASE(expect_timeout_but_pass); 214ATF_TEST_CASE_HEAD(expect_timeout_but_pass) 215{ 216 set_md_var("timeout", "1"); 217} 218ATF_TEST_CASE_BODY(expect_timeout_but_pass) 219{ 220 expect_timeout("Will just exit"); 221} 222 223// ------------------------------------------------------------------------ 224// Helper tests for "t_meta_data". 225// ------------------------------------------------------------------------ 226 227ATF_TEST_CASE(metadata_no_descr); 228ATF_TEST_CASE_HEAD(metadata_no_descr) 229{ 230} 231ATF_TEST_CASE_BODY(metadata_no_descr) 232{ 233} 234 235ATF_TEST_CASE_WITHOUT_HEAD(metadata_no_head); 236ATF_TEST_CASE_BODY(metadata_no_head) 237{ 238} 239 240// ------------------------------------------------------------------------ 241// Helper tests for "t_srcdir". 242// ------------------------------------------------------------------------ 243 244ATF_TEST_CASE(srcdir_exists); 245ATF_TEST_CASE_HEAD(srcdir_exists) 246{ 247 set_md_var("descr", "Helper test case for the t_srcdir test program"); 248} 249ATF_TEST_CASE_BODY(srcdir_exists) 250{ 251 if (!atf::fs::exists(atf::fs::path(get_config_var("srcdir")) / 252 "datafile")) 253 ATF_FAIL("Cannot find datafile"); 254} 255 256// ------------------------------------------------------------------------ 257// Helper tests for "t_result". 258// ------------------------------------------------------------------------ 259 260ATF_TEST_CASE(result_pass); 261ATF_TEST_CASE_HEAD(result_pass) { } 262ATF_TEST_CASE_BODY(result_pass) 263{ 264 std::cout << "msg\n"; 265} 266 267ATF_TEST_CASE(result_fail); 268ATF_TEST_CASE_HEAD(result_fail) { } 269ATF_TEST_CASE_BODY(result_fail) 270{ 271 std::cout << "msg\n"; 272 ATF_FAIL("Failure reason"); 273} 274 275ATF_TEST_CASE(result_skip); 276ATF_TEST_CASE_HEAD(result_skip) { } 277ATF_TEST_CASE_BODY(result_skip) 278{ 279 std::cout << "msg\n"; 280 ATF_SKIP("Skipped reason"); 281} 282 283ATF_TEST_CASE(result_newlines_fail); 284ATF_TEST_CASE_HEAD(result_newlines_fail) 285{ 286 set_md_var("descr", "Helper test case for the t_result test program"); 287} 288ATF_TEST_CASE_BODY(result_newlines_fail) 289{ 290 ATF_FAIL("First line\nSecond line"); 291} 292 293ATF_TEST_CASE(result_newlines_skip); 294ATF_TEST_CASE_HEAD(result_newlines_skip) 295{ 296 set_md_var("descr", "Helper test case for the t_result test program"); 297} 298ATF_TEST_CASE_BODY(result_newlines_skip) 299{ 300 ATF_SKIP("First line\nSecond line"); 301} 302 303ATF_TEST_CASE(result_exception); 304ATF_TEST_CASE_HEAD(result_exception) { } 305ATF_TEST_CASE_BODY(result_exception) 306{ 307 throw std::runtime_error("This is unhandled"); 308} 309 310// ------------------------------------------------------------------------ 311// Main. 312// ------------------------------------------------------------------------ 313 314ATF_INIT_TEST_CASES(tcs) 315{ 316 // Add helper tests for t_config. 317 ATF_ADD_TEST_CASE(tcs, config_unset); 318 ATF_ADD_TEST_CASE(tcs, config_empty); 319 ATF_ADD_TEST_CASE(tcs, config_value); 320 ATF_ADD_TEST_CASE(tcs, config_multi_value); 321 322 // Add helper tests for t_expect. 323 ATF_ADD_TEST_CASE(tcs, expect_pass_and_pass); 324 ATF_ADD_TEST_CASE(tcs, expect_pass_but_fail_requirement); 325 ATF_ADD_TEST_CASE(tcs, expect_pass_but_fail_check); 326 ATF_ADD_TEST_CASE(tcs, expect_fail_and_fail_requirement); 327 ATF_ADD_TEST_CASE(tcs, expect_fail_and_fail_check); 328 ATF_ADD_TEST_CASE(tcs, expect_fail_but_pass); 329 ATF_ADD_TEST_CASE(tcs, expect_exit_any_and_exit); 330 ATF_ADD_TEST_CASE(tcs, expect_exit_code_and_exit); 331 ATF_ADD_TEST_CASE(tcs, expect_exit_but_pass); 332 ATF_ADD_TEST_CASE(tcs, expect_signal_any_and_signal); 333 ATF_ADD_TEST_CASE(tcs, expect_signal_no_and_signal); 334 ATF_ADD_TEST_CASE(tcs, expect_signal_but_pass); 335 ATF_ADD_TEST_CASE(tcs, expect_death_and_exit); 336 ATF_ADD_TEST_CASE(tcs, expect_death_and_signal); 337 ATF_ADD_TEST_CASE(tcs, expect_death_but_pass); 338 ATF_ADD_TEST_CASE(tcs, expect_timeout_and_hang); 339 ATF_ADD_TEST_CASE(tcs, expect_timeout_but_pass); 340 341 // Add helper tests for t_meta_data. 342 ATF_ADD_TEST_CASE(tcs, metadata_no_descr); 343 ATF_ADD_TEST_CASE(tcs, metadata_no_head); 344 345 // Add helper tests for t_srcdir. 346 ATF_ADD_TEST_CASE(tcs, srcdir_exists); 347 348 // Add helper tests for t_result. 349 ATF_ADD_TEST_CASE(tcs, result_pass); 350 ATF_ADD_TEST_CASE(tcs, result_fail); 351 ATF_ADD_TEST_CASE(tcs, result_skip); 352 ATF_ADD_TEST_CASE(tcs, result_newlines_fail); 353 ATF_ADD_TEST_CASE(tcs, result_newlines_skip); 354 ATF_ADD_TEST_CASE(tcs, result_exception); 355} 356