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