scoped_file_linux_unittest.cc 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. // Copyright 2021 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "base/files/scoped_file.h"
  5. #include "base/files/file_util.h"
  6. #include "base/files/scoped_temp_dir.h"
  7. #include "testing/gtest/include/gtest/gtest.h"
  8. namespace base {
  9. namespace {
  10. class ScopedFDOwnershipTrackingTest : public testing::Test {
  11. public:
  12. void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); }
  13. void TearDown() override { ASSERT_TRUE(temp_dir_.Delete()); }
  14. ScopedFD OpenFD() {
  15. FilePath dont_care;
  16. return CreateAndOpenFdForTemporaryFileInDir(temp_dir_.GetPath(),
  17. &dont_care);
  18. }
  19. private:
  20. ScopedTempDir temp_dir_;
  21. };
  22. TEST_F(ScopedFDOwnershipTrackingTest, BasicTracking) {
  23. ScopedFD fd = OpenFD();
  24. EXPECT_TRUE(IsFDOwned(fd.get()));
  25. int fd_value = fd.get();
  26. fd.reset();
  27. EXPECT_FALSE(IsFDOwned(fd_value));
  28. }
  29. #if defined(GTEST_HAS_DEATH_TEST)
  30. TEST_F(ScopedFDOwnershipTrackingTest, NoDoubleOwnership) {
  31. ScopedFD fd = OpenFD();
  32. subtle::EnableFDOwnershipEnforcement(true);
  33. EXPECT_DEATH(ScopedFD(fd.get()), "");
  34. }
  35. TEST_F(ScopedFDOwnershipTrackingTest, CrashOnUnownedClose) {
  36. ScopedFD fd = OpenFD();
  37. subtle::EnableFDOwnershipEnforcement(true);
  38. EXPECT_DEATH(close(fd.get()), "");
  39. }
  40. #endif // defined(GTEST_HAS_DEATH_TEST)
  41. } // namespace
  42. } // namespace base