diff options
Diffstat (limited to 'tests/sys_stat_test.cpp')
-rw-r--r-- | tests/sys_stat_test.cpp | 40 |
1 files changed, 40 insertions, 0 deletions
diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp index 7bbb7c665..28c7c5262 100644 --- a/tests/sys_stat_test.cpp +++ b/tests/sys_stat_test.cpp @@ -219,3 +219,43 @@ TEST(sys_stat, fchmodat_AT_SYMLINK_NOFOLLOW_with_dangling_symlink) { ASSERT_EQ(ENOTSUP, errno); unlink(linkname); } + +TEST(sys_stat, faccessat_EINVAL) { + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", F_OK, ~AT_SYMLINK_NOFOLLOW)); + ASSERT_EQ(EINVAL, errno); +#if defined(__BIONIC__) + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", ~(R_OK | W_OK | X_OK), 0)); + ASSERT_EQ(EINVAL, errno); +#else + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", ~(R_OK | W_OK | X_OK), AT_SYMLINK_NOFOLLOW)); + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", ~(R_OK | W_OK | X_OK), 0)); + ASSERT_EQ(EINVAL, errno); +#endif +} + +TEST(sys_stat, faccessat_AT_SYMLINK_NOFOLLOW_EINVAL) { +#if defined(__BIONIC__) + // Android doesn't support AT_SYMLINK_NOFOLLOW + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/dev/null", F_OK, AT_SYMLINK_NOFOLLOW)); + ASSERT_EQ(EINVAL, errno); +#else + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", F_OK, AT_SYMLINK_NOFOLLOW)); +#endif +} + +TEST(sys_stat, faccessat_dev_null) { + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", F_OK, 0)); + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", R_OK, 0)); + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", W_OK, 0)); + ASSERT_EQ(0, faccessat(AT_FDCWD, "/dev/null", R_OK|W_OK, 0)); +} + +TEST(sys_stat, faccessat_nonexistant) { + ASSERT_EQ(-1, faccessat(AT_FDCWD, "/blah", F_OK, AT_SYMLINK_NOFOLLOW)); +#if defined(__BIONIC__) + // Android doesn't support AT_SYMLINK_NOFOLLOW + ASSERT_EQ(EINVAL, errno); +#else + ASSERT_EQ(ENOENT, errno); +#endif +} |