summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJosh Gao <jmgao@google.com>2018-08-08 19:26:44 -0700
committerandroid-build-merger <android-build-merger@google.com>2018-08-08 19:26:44 -0700
commit8f23e90b1f2ea6dd98df5482022e81c0b198b009 (patch)
tree7acb0b683ec85d52a1aa622e06a6691375216215
parent978879fde6c39d46212c897eee5a0ab5c9c8550c (diff)
parentde8eb12517716566a519b8536b17e512b3b37dbd (diff)
Merge "Move unique_fd fdsan tests into bionic."
am: de8eb12517 Change-Id: Ib7379b2b272e949c917ea7d4fdb4ee6d9c0b5d24
-rw-r--r--tests/fdsan_test.cpp38
1 files changed, 36 insertions, 2 deletions
diff --git a/tests/fdsan_test.cpp b/tests/fdsan_test.cpp
index a57e7c7e2..fb3f73dc3 100644
--- a/tests/fdsan_test.cpp
+++ b/tests/fdsan_test.cpp
@@ -24,12 +24,14 @@
#include <stdlib.h>
#include <sys/types.h>
-#include <unordered_map>
-
#if defined(__BIONIC__)
#include <android/fdsan.h>
#endif
+#include <unordered_map>
+
+#include <android-base/unique_fd.h>
+
#define FDSAN_TEST(test_name) TEST_F(FdsanTest, test_name)
#define EXPECT_FDSAN_DEATH(expression, regex) \
EXPECT_DEATH((android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL), expression), \
@@ -158,3 +160,35 @@ TEST_F(FdsanTest, owner_value_low) {
"0x1");
#endif
}
+
+TEST_F(FdsanTest, unique_fd_unowned_close) {
+#if defined(__BIONIC__)
+ android::base::unique_fd fd(open("/dev/null", O_RDONLY));
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL);
+ EXPECT_FDSAN_DEATH(close(fd.get()), "expected to be unowned, actually owned by unique_fd");
+#endif
+}
+
+TEST_F(FdsanTest, unique_fd_untag_on_release) {
+ android::base::unique_fd fd(open("/dev/null", O_RDONLY));
+ close(fd.release());
+}
+
+TEST_F(FdsanTest, unique_fd_move) {
+ android::base::unique_fd fd(open("/dev/null", O_RDONLY));
+ android::base::unique_fd fd_moved = std::move(fd);
+ ASSERT_EQ(-1, fd.get());
+ ASSERT_GT(fd_moved.get(), -1);
+}
+
+TEST_F(FdsanTest, unique_fd_unowned_close_after_move) {
+#if defined(__BIONIC__)
+ android::base::unique_fd fd(open("/dev/null", O_RDONLY));
+ android::base::unique_fd fd_moved = std::move(fd);
+ ASSERT_EQ(-1, fd.get());
+ ASSERT_GT(fd_moved.get(), -1);
+
+ android_fdsan_set_error_level(ANDROID_FDSAN_ERROR_LEVEL_FATAL);
+ EXPECT_FDSAN_DEATH(close(fd_moved.get()), "expected to be unowned, actually owned by unique_fd");
+#endif
+}