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