diff options
Diffstat (limited to 'tests/utils.h')
-rw-r--r-- | tests/utils.h | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/tests/utils.h b/tests/utils.h index 1f4cece19..cfc68c9a3 100644 --- a/tests/utils.h +++ b/tests/utils.h @@ -16,6 +16,7 @@ #pragma once +#include <dirent.h> #include <dlfcn.h> #include <fcntl.h> #include <inttypes.h> @@ -253,3 +254,29 @@ class ExecTestHelper { std::string output_; }; #endif + +class FdLeakChecker { + public: + FdLeakChecker() { + } + + ~FdLeakChecker() { + size_t end_count = CountOpenFds(); + EXPECT_EQ(start_count_, end_count); + } + + private: + static size_t CountOpenFds() { + auto fd_dir = std::unique_ptr<DIR, decltype(&closedir)>{ opendir("/proc/self/fd"), closedir }; + size_t count = 0; + dirent* de = nullptr; + while ((de = readdir(fd_dir.get())) != nullptr) { + if (de->d_type == DT_LNK) { + ++count; + } + } + return count; + } + + size_t start_count_ = CountOpenFds(); +}; |