static void do_child(void (*start)(void *), void *v, const stream_prepare_t *outsp, const stream_prepare_t *errsp) { atf_error_t err; err = child_connect(outsp, STDOUT_FILENO); if (atf_is_error(err)) goto out; err = child_connect(errsp, STDERR_FILENO); if (atf_is_error(err)) goto out; start(v); UNREACHABLE; out: if (atf_is_error(err)) { char buf[1024]; atf_error_format(err, buf, sizeof(buf)); fprintf(stderr, "Unhandled error: %s\n", buf); atf_error_free(err); exit(EXIT_FAILURE); } else exit(EXIT_SUCCESS); }
ATF_TC_BODY(no_memory_format, tc) { atf_error_t err; char buf[1024]; err = atf_no_memory_error(); atf_error_format(err, buf, sizeof(buf)); ATF_REQUIRE(strcmp(buf, "Not enough memory") == 0); atf_error_free(err); }
ATF_TC_BODY(format, tc) { atf_error_t err; char buf[1024]; printf("Testing default formatting function\n"); err = atf_error_new("test_error", NULL, 0, NULL); atf_error_format(err, buf, sizeof(buf)); printf("Error string is: %s\n", buf); ATF_REQUIRE(strcmp(buf, "Error 'test_error'") == 0); atf_error_free(err); printf("Testing custom formatting function\n"); err = atf_error_new("test_error", NULL, 0, test_format); atf_error_format(err, buf, sizeof(buf)); printf("Error string is: %s\n", buf); ATF_REQUIRE(strcmp(buf, "Test formatting function") == 0); atf_error_free(err); }
ATF_TC_BODY(libc_format, tc) { atf_error_t err; char buf[1024]; err = atf_libc_error(ENOMEM, "Test message 1"); atf_error_format(err, buf, sizeof(buf)); ATF_REQUIRE(strstr(buf, strerror(ENOMEM)) != NULL); ATF_REQUIRE(strstr(buf, "Test message 1") != NULL); atf_error_free(err); err = atf_libc_error(EPERM, "Test message 2"); atf_error_format(err, buf, sizeof(buf)); ATF_REQUIRE(strstr(buf, strerror(EPERM)) != NULL); ATF_REQUIRE(strstr(buf, "Test message 2") != NULL); atf_error_free(err); err = atf_libc_error(EPERM, "%s message %d", "Test", 3); atf_error_format(err, buf, sizeof(buf)); ATF_REQUIRE(strstr(buf, strerror(EPERM)) != NULL); ATF_REQUIRE(strstr(buf, "Test message 3") != NULL); atf_error_free(err); }
static void print_error(const atf_error_t err) { char buf[4096]; PRE(atf_is_error(err)); atf_error_format(err, buf, sizeof(buf)); fprintf(stderr, "%s: ERROR: %s\n", progname, buf); if (atf_error_is(err, "usage")) fprintf(stderr, "%s: See atf-test-program(1) for usage details.\n", progname); }
static void do_umask_check(atf_error_t (*const mk_func)(atf_fs_path_t *), atf_fs_path_t *path, const mode_t test_mask, const char *str_mask, const char *exp_name) { char buf[1024]; int old_umask; atf_error_t err; printf("Creating temporary %s with umask %s\n", exp_name, str_mask); old_umask = umask(test_mask); err = mk_func(path); (void)umask(old_umask); ATF_REQUIRE(atf_is_error(err)); ATF_REQUIRE(atf_error_is(err, "invalid_umask")); atf_error_format(err, buf, sizeof(buf)); ATF_CHECK(strstr(buf, exp_name) != NULL); ATF_CHECK(strstr(buf, str_mask) != NULL); atf_error_free(err); }