ATF_TC_BODY(error_is_type__not_match, tc) { kyua_error_t error = kyua_error_new("test_error", NULL, 0, NULL); ATF_REQUIRE(!kyua_error_is_type(error, "test_erro")); ATF_REQUIRE(!kyua_error_is_type(error, "test_error2")); ATF_REQUIRE(!kyua_error_is_type(error, "foo")); kyua_error_free(error); }
/// Error-specific formatting function for testing purposes. static int test_format(const kyua_error_t error, char* const output_buffer, const size_t output_size) { ATF_REQUIRE(kyua_error_is_type(error, "test_error")); return snprintf(output_buffer, output_size, "Test formatting function"); }
ATF_TC_BODY(oom_error_reuse, tc) { { kyua_error_t error = kyua_oom_error_new(); ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type)); ATF_REQUIRE(kyua_error_data(error) == NULL); kyua_error_free(error); } { kyua_error_t error = kyua_oom_error_new(); ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type)); ATF_REQUIRE(kyua_error_data(error) == NULL); kyua_error_free(error); } }
ATF_TC_BODY(error_subsume__secondary, tc) { kyua_error_t primary = kyua_error_ok(); kyua_error_t secondary = kyua_error_new("secondary_error", NULL, 0, NULL); kyua_error_t error = kyua_error_subsume(primary, secondary); ATF_REQUIRE(kyua_error_is_type(error, "secondary_error")); kyua_error_free(error); }
ATF_TC_BODY(error_new__oom, tc) { void* invalid = (void*)1; kyua_error_t error = kyua_error_new("test_error", invalid, SIZE_MAX, NULL); ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type)); ATF_REQUIRE(kyua_error_data(error) == NULL); kyua_error_free(error); }
ATF_TC_BODY(sanitize__fail, tc) { char* sane; kyua_error_t error = kyua_fs_sanitize("non-existent/path", &sane); ATF_REQUIRE(kyua_error_is_set(error)); ATF_REQUIRE(kyua_error_is_type(error, "libc")); ATF_REQUIRE_EQ(ENOENT, kyua_libc_error_errno(error)); kyua_error_free(error); }
ATF_TC_BODY(fork_exec_wait__enoent, tc) { const char* const args[] = {"foo", NULL}; int unused_exitstatus; const kyua_error_t error = exec_check("./foo", args, &unused_exitstatus); ATF_REQUIRE(kyua_error_is_set(error)); ATF_REQUIRE(kyua_error_is_type(error, "libc")); ATF_REQUIRE_EQ(ENOENT, kyua_libc_error_errno(error)); }
ATF_TC_BODY(fork_exec_wait__eacces, tc) { ATF_REQUIRE(mkdir("dir", 0000) != -1); const char* const args[] = {"foo", NULL}; int unused_exitstatus; const kyua_error_t error = exec_check("./dir/foo", args, &unused_exitstatus); ATF_REQUIRE(kyua_error_is_set(error)); ATF_REQUIRE(kyua_error_is_type(error, "libc")); ATF_REQUIRE_EQ(EACCES, kyua_libc_error_errno(error)); }
ATF_TC_BODY(current_path__enoent, tc) { char* previous; ATF_REQUIRE(!kyua_error_is_set(kyua_fs_current_path(&previous))); ATF_REQUIRE(mkdir("root", 0755) != -1); ATF_REQUIRE(chdir("root") != -1); ATF_REQUIRE(rmdir("../root") != -1); char* cwd = (char*)0xdeadbeef; kyua_error_t error = kyua_fs_current_path(&cwd); ATF_REQUIRE(kyua_error_is_set(error)); ATF_REQUIRE(kyua_error_is_type(error, "libc")); ATF_REQUIRE_EQ(ENOENT, kyua_libc_error_errno(error)); ATF_REQUIRE_EQ((char*)0xdeadbeef, cwd); kyua_error_free(error); free(previous); }
ATF_TC_BODY(work_directory__permissions_error, tc) { char* tmpdir; RE(kyua_fs_make_absolute("worktest", &tmpdir)); ATF_REQUIRE(mkdir(tmpdir, 0755) != -1); RE(kyua_env_set("TMPDIR", tmpdir)); char* work_directory; const kyua_error_t error = kyua_run_work_directory_enter( "template.XXXXXX", getuid() + 1, getgid(), &work_directory); ATF_REQUIRE(kyua_error_is_set(error)); ATF_REQUIRE(kyua_error_is_type(error, "libc")); ATF_REQUIRE_EQ(EPERM, kyua_libc_error_errno(error)); kyua_error_free(error); ATF_REQUIRE(rmdir(tmpdir) != -1); // Empty; subdirectory not created. free(tmpdir); }
ATF_TC_BODY(usage_error_type, tc) { kyua_error_t error = kyua_usage_error_new("Nothing"); ATF_REQUIRE(kyua_error_is_type(error, kyua_usage_error_type)); kyua_error_free(error); }
ATF_TC_BODY(oom_error_type, tc) { kyua_error_t error = kyua_oom_error_new(); ATF_REQUIRE(kyua_error_is_type(error, kyua_oom_error_type)); kyua_error_free(error); }
ATF_TC_BODY(libc_error_type, tc) { kyua_error_t error = kyua_libc_error_new(ENOMEM, "Nothing"); ATF_REQUIRE(kyua_error_is_type(error, kyua_libc_error_type)); kyua_error_free(error); }