Check that __system_property_set() doesn't leak FDs
Bug: 143936364
Test: fail when b/143936364 repros
Test: pass when b/143936364 is fixed
Change-Id: I01d061c4fb4f37b0300ef418a19c88003038092c
diff --git a/tests/utils.h b/tests/utils.h
index 1f4cece..cfc68c9 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 @@
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();
+};