diff --git a/tests/ftw_test.cpp b/tests/ftw_test.cpp
index 7ffbfe0..38b3d49 100644
--- a/tests/ftw_test.cpp
+++ b/tests/ftw_test.cpp
@@ -14,27 +14,36 @@
  * limitations under the License.
  */
 
-#include <gtest/gtest.h>
-#include "TemporaryFile.h"
-
 #include <ftw.h>
+
 #include <stdlib.h>
 #include <sys/stat.h>
 
+#include <gtest/gtest.h>
+
 void sanity_check_ftw(const char* fpath, const struct stat* sb, int tflag) {
   ASSERT_TRUE(fpath != NULL);
   ASSERT_TRUE(sb != NULL);
-  bool is_dir = S_ISDIR(sb->st_mode);
-  ASSERT_TRUE((is_dir && tflag == FTW_D) || (!is_dir && tflag == FTW_F));
+  if (S_ISDIR(sb->st_mode)) {
+    ASSERT_TRUE(tflag == FTW_D || tflag == FTW_DNR || tflag == FTW_DP) << fpath;
+  } else if (S_ISLNK(sb->st_mode)) {
+    ASSERT_EQ(FTW_SL, tflag) << fpath;
+  } else {
+    ASSERT_EQ(FTW_F, tflag) << fpath;
+  }
 }
 
-void sanity_check_nftw(
-    const char* fpath, const struct stat* sb, int tflag, struct FTW* ftwbuf) {
+void sanity_check_nftw(const char* fpath, const struct stat* sb, int tflag, struct FTW* ftwbuf) {
   sanity_check_ftw(fpath, sb, tflag);
-  // either the parent dir or the file
-  bool is_dir = S_ISDIR(sb->st_mode);
-  ASSERT_TRUE(
-    (is_dir && ftwbuf->level == 0) || (!is_dir && ftwbuf->level == 1));
+
+  size_t slash_count = 0;
+  const char* p = fpath;
+  while ((p = strchr(p + 1, '/')) != NULL) {
+    ++slash_count;
+  }
+
+  ASSERT_EQ('/', fpath[ftwbuf->base - 1]) << fpath;
+  ASSERT_EQ(slash_count, static_cast<size_t>(ftwbuf->level)) << fpath;
 }
 
 int check_ftw(const char* fpath, const struct stat* sb, int tflag) {
@@ -47,39 +56,28 @@
   return 0;
 }
 
-int check_nftw(
-  const char* fpath, const struct stat* sb, int tflag, struct FTW* ftwbuf) {
+int check_nftw(const char* fpath, const struct stat* sb, int tflag, struct FTW* ftwbuf) {
   sanity_check_nftw(fpath, sb, tflag, ftwbuf);
   return 0;
 }
 
-int check_nftw64(
-  const char* fpath, const struct stat64* sb, int tflag, struct FTW* ftwbuf) {
-  sanity_check_nftw(fpath, reinterpret_cast<const struct stat*>(sb),
-    tflag, ftwbuf);
+int check_nftw64(const char* fpath, const struct stat64* sb, int tflag, struct FTW* ftwbuf) {
+  sanity_check_nftw(fpath, reinterpret_cast<const struct stat*>(sb), tflag, ftwbuf);
   return 0;
 }
 
 TEST(ftw, ftw) {
-  TemporaryDir td;
-  TemporaryFile tf(td.dirname);
-  ftw(td.dirname, check_ftw, 1);
+  ASSERT_EQ(0, ftw("/sys", check_ftw, 128));
 }
 
 TEST(ftw, ftw64) {
-  TemporaryDir td;
-  TemporaryFile tf(td.dirname, mkstemp64);
-  ftw64(td.dirname, check_ftw64, 1);
+  ASSERT_EQ(0, ftw64("/sys", check_ftw64, 128));
 }
 
 TEST(ftw, nftw) {
-  TemporaryDir td;
-  TemporaryFile tf(td.dirname);
-  nftw(td.dirname, check_nftw, 1, 0);
+  ASSERT_EQ(0, nftw("/sys", check_nftw, 128, 0));
 }
 
 TEST(ftw, nftw64) {
-  TemporaryDir td;
-  TemporaryFile tf(td.dirname, mkstemp64);
-  nftw64(td.dirname, check_nftw64, 1, 0);
+  ASSERT_EQ(0, nftw64("/sys", check_nftw64, 128, 0));
 }
