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