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(libc_error_errno, tc) { kyua_error_t error = kyua_libc_error_new(EPERM, "Doesn't matter"); ATF_REQUIRE_EQ(EPERM, kyua_libc_error_errno(error)); kyua_error_free(error); }