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));