Improve fs time setter testing. Specifically: basic tests for utimensat(), and the missing null test for futimens(). Change-Id: I7c24a7ee3fc7f8306f7f8228a461938ebfa97492
diff --git a/tests/sys_stat_test.cpp b/tests/sys_stat_test.cpp index 50c50df..d504e3c 100644 --- a/tests/sys_stat_test.cpp +++ b/tests/sys_stat_test.cpp
@@ -33,25 +33,24 @@ #endif TEST(sys_stat, futimens) { - FILE* fp = tmpfile(); - ASSERT_TRUE(fp != nullptr); - - int fd = fileno(fp); - ASSERT_NE(fd, -1); + TemporaryFile tf; timespec times[2]; times[0].tv_sec = 123; times[0].tv_nsec = 0; times[1].tv_sec = 456; times[1].tv_nsec = 0; - ASSERT_EQ(0, futimens(fd, times)) << strerror(errno); + ASSERT_EQ(0, futimens(tf.fd, times)) << strerror(errno); struct stat sb; - ASSERT_EQ(0, fstat(fd, &sb)); + ASSERT_EQ(0, fstat(tf.fd, &sb)); ASSERT_EQ(times[0].tv_sec, static_cast<long>(sb.st_atime)); ASSERT_EQ(times[1].tv_sec, static_cast<long>(sb.st_mtime)); +} - fclose(fp); +TEST(sys_stat, futimens_null) { + TemporaryFile tf; + ASSERT_EQ(0, futimens(tf.fd, nullptr)); } TEST(sys_stat, futimens_EBADF) { @@ -64,6 +63,27 @@ ASSERT_ERRNO(EBADF); } +TEST(sys_stat, utimensat) { + TemporaryFile tf; + + timespec times[2]; + times[0].tv_sec = 123; + times[0].tv_nsec = 0; + times[1].tv_sec = 456; + times[1].tv_nsec = 0; + ASSERT_EQ(0, utimensat(AT_FDCWD, tf.path, times, 0)) << strerror(errno); + + struct stat sb; + ASSERT_EQ(0, fstat(tf.fd, &sb)); + ASSERT_EQ(times[0].tv_sec, static_cast<long>(sb.st_atime)); + ASSERT_EQ(times[1].tv_sec, static_cast<long>(sb.st_mtime)); +} + +TEST(sys_stat, utimensat_null) { + TemporaryFile tf; + ASSERT_EQ(0, utimensat(AT_FDCWD, tf.path, nullptr, 0)); +} + TEST(sys_stat, mkfifo_failure) { errno = 0; ASSERT_EQ(-1, mkfifo("/", 0666));