xref: /aosp_15_r20/external/cronet/base/files/block_tests_writing_to_special_dirs_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2023 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/block_tests_writing_to_special_dirs.h"
6 
7 #include "base/files/file_path.h"
8 #include "base/path_service.h"
9 #include "testing/gtest/include/gtest/gtest.h"
10 
11 namespace base {
12 
13 class BlockTestsWritingToSpecialDirsTest : public testing::Test {
14  public:
BlockTestsWritingToSpecialDirsTest()15   BlockTestsWritingToSpecialDirsTest() {
16     auto& prev_block_tests = Get();
17     if (prev_block_tests.has_value()) {
18       save_block_tests_.emplace(std::move(prev_block_tests->blocked_dirs_),
19                                 prev_block_tests->failure_callback_);
20       prev_block_tests.reset();
21     }
22   }
23 
~BlockTestsWritingToSpecialDirsTest()24   ~BlockTestsWritingToSpecialDirsTest() override {
25     if (save_block_tests_.has_value()) {
26       Get().emplace(std::move(save_block_tests_->blocked_dirs_),
27                     save_block_tests_->failure_callback_);
28     }
29   }
30 
31  protected:
Get()32   std::optional<BlockTestsWritingToSpecialDirs>& Get() {
33     return BlockTestsWritingToSpecialDirs::Get();
34   }
35   std::optional<BlockTestsWritingToSpecialDirs> save_block_tests_;
36 };
37 
38 // Test that with no special dirs blocked,
39 // BlockTestsWritingToSpecialDirs::CanWriteToPath returns true.
TEST_F(BlockTestsWritingToSpecialDirsTest,NoSpecialDirWriteBlocker)40 TEST_F(BlockTestsWritingToSpecialDirsTest, NoSpecialDirWriteBlocker) {
41   EXPECT_TRUE(BlockTestsWritingToSpecialDirs::CanWriteToPath(
42       PathService::CheckedGet(DIR_SRC_TEST_DATA_ROOT).AppendASCII("file")));
43 }
44 
TEST_F(BlockTestsWritingToSpecialDirsTest,SpecialDirWriteBlocker)45 TEST_F(BlockTestsWritingToSpecialDirsTest, SpecialDirWriteBlocker) {
46   std::vector<int> dirs_to_block = {DIR_SRC_TEST_DATA_ROOT};
47   if (PathService::IsOverriddenForTesting(dirs_to_block[0])) {
48     GTEST_SKIP() << "DIR_SRC_TEST_DATA_ROOT is already overridden";
49   }
50   Get().emplace(std::move(dirs_to_block), ([](const FilePath& path) {}));
51 
52   EXPECT_FALSE(BlockTestsWritingToSpecialDirs::CanWriteToPath(
53       PathService::CheckedGet(DIR_SRC_TEST_DATA_ROOT).AppendASCII("file")));
54 }
55 
56 }  // namespace base
57