summaryrefslogtreecommitdiff
path: root/tests/sys_stat_test.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'tests/sys_stat_test.cpp')
-rw-r--r--tests/sys_stat_test.cpp26
1 files changed, 26 insertions, 0 deletions
diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp
index 97bf58026..71591c0c2 100644
--- a/tests/sys_stat_test.cpp
+++ b/tests/sys_stat_test.cpp
@@ -22,6 +22,14 @@
#include <android-base/file.h>
#include <gtest/gtest.h>
+#if defined(__BIONIC__)
+#define HAVE_STATX
+#elif defined(__GLIBC_PREREQ)
+#if __GLIBC_PREREQ(2, 28)
+#define HAVE_STATX
+#endif
+#endif
+
TEST(sys_stat, futimens) {
FILE* fp = tmpfile();
ASSERT_TRUE(fp != nullptr);
@@ -95,6 +103,24 @@ TEST(sys_stat, stat64_lstat64_fstat64) {
close(fd);
}
+TEST(sys_stat, statx) {
+#if defined(HAVE_STATX)
+ struct statx sx;
+ int rc = statx(AT_FDCWD, "/proc/version", AT_STATX_SYNC_AS_STAT, STATX_ALL, &sx);
+ if (rc == -1 && errno == ENOSYS) {
+ GTEST_SKIP() << "statx returned ENOSYS";
+ return;
+ }
+ ASSERT_EQ(0, rc);
+ struct stat64 sb;
+ ASSERT_EQ(0, stat64("/proc/version", &sb));
+ EXPECT_EQ(sb.st_ino, sx.stx_ino);
+ EXPECT_EQ(sb.st_mode, sx.stx_mode);
+#else
+ GTEST_SKIP() << "statx not available";
+#endif
+}
+
TEST(sys_stat, fchmodat_EFAULT_file) {
ASSERT_EQ(-1, fchmodat(AT_FDCWD, (char *) 0x1, 0751, 0));
ASSERT_EQ(EFAULT, errno);