| // Copyright 2018 The Chromium Authors. All rights reserved. |
| // Use of this source code is governed by a BSD-style license that can be |
| // found in the LICENSE file. |
| |
| #include "chrome/chrome_cleaner/pup_data/pup_disk_util.h" |
| |
| #include "base/files/file_path.h" |
| #include "base/files/file_util.h" |
| #include "base/files/scoped_temp_dir.h" |
| #include "chrome/chrome_cleaner/os/disk_util.h" |
| #include "chrome/chrome_cleaner/os/file_path_set.h" |
| #include "chrome/chrome_cleaner/pup_data/pup_cleaner_util.h" |
| #include "chrome/chrome_cleaner/test/test_file_util.h" |
| #include "chrome/chrome_cleaner/test/test_pup_data.h" |
| #include "chrome/chrome_cleaner/test/test_registry_util.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| #include "testing/gtest/include/gtest/gtest.h" |
| |
| namespace chrome_cleaner { |
| |
| namespace { |
| |
| const wchar_t kFileName1[] = L"Filename one"; |
| const wchar_t kFileName2[] = L"Filename two"; |
| const wchar_t kFileName3[] = L"Third filename"; |
| const wchar_t kSubFolder[] = L"folder"; |
| const char kFileContent1[] = "This is the file content."; |
| const char kFileContent2[] = "Hi!"; |
| const char kFileContent3[] = "Hello World!"; |
| |
| } // namespace |
| |
| class PUPDiskUtilTests : public testing::Test { |
| public: |
| void SetUp() override { |
| ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
| ASSERT_TRUE(base::CreateTemporaryDirInDir( |
| temp_dir_.GetPath(), kSubFolder, &subfolder_path_)); |
| } |
| |
| base::FilePath CreateFileInTopDir(const base::FilePath& basename, |
| const char* content, |
| size_t content_length) { |
| base::FilePath file_path = temp_dir_.GetPath().Append(basename); |
| CreateFileWithContent(file_path, content, content_length); |
| return file_path; |
| } |
| |
| base::FilePath CreateFileInSubfolder(const base::FilePath& basename, |
| const char* content, |
| size_t content_length) { |
| base::FilePath file_path = subfolder_path_.Append(basename); |
| CreateFileWithContent(file_path, content, content_length); |
| return file_path; |
| } |
| |
| protected: |
| base::ScopedTempDir temp_dir_; |
| base::FilePath subfolder_path_; |
| }; |
| |
| TEST_F(PUPDiskUtilTests, CollectPathsRecursively) { |
| base::FilePath file_path1 = CreateFileInTopDir( |
| base::FilePath(kFileName1), kFileContent1, sizeof(kFileContent1)); |
| base::FilePath file_path2 = CreateFileInTopDir( |
| base::FilePath(kFileName2), kFileContent2, sizeof(kFileContent2)); |
| base::FilePath file_path3 = CreateFileInSubfolder( |
| base::FilePath(kFileName3), kFileContent3, sizeof(kFileContent3)); |
| |
| SimpleTestPUP pup; |
| CollectPathsRecursively(temp_dir_.GetPath(), &pup); |
| |
| // Adding the same path twice, should not add it again. |
| CollectPathsRecursively(temp_dir_.GetPath(), &pup); |
| FilePathSet expected_file_paths; |
| expected_file_paths.Insert(temp_dir_.GetPath()); |
| expected_file_paths.Insert(file_path1); |
| expected_file_paths.Insert(file_path2); |
| expected_file_paths.Insert(subfolder_path_); |
| expected_file_paths.Insert(file_path3); |
| |
| EXPECT_EQ(expected_file_paths, pup.expanded_disk_footprints); |
| } |
| |
| TEST_F(PUPDiskUtilTests, CollectPathsRecursivelyWithLimits) { |
| base::FilePath file_path1 = CreateFileInTopDir( |
| base::FilePath(kFileName1), kFileContent1, sizeof(kFileContent1)); |
| base::FilePath file_path2 = CreateFileInTopDir( |
| base::FilePath(kFileName2), kFileContent2, sizeof(kFileContent2)); |
| base::FilePath file_path3 = CreateFileInSubfolder( |
| base::FilePath(kFileName3), kFileContent3, sizeof(kFileContent3)); |
| |
| static const bool kAllowFolders = true; |
| static const bool kForbidFolders = false; |
| static const size_t kSmallFileSizes = 5; |
| static const size_t kLargeFileSizes = 50000; |
| // Collect only 1 file: must fail because there is more than 1 file. |
| SimpleTestPUP pup; |
| EXPECT_FALSE(CollectPathsRecursivelyWithLimits( |
| temp_dir_.GetPath(), 1, kLargeFileSizes, kAllowFolders, &pup)); |
| EXPECT_TRUE(pup.expanded_disk_footprints.empty()); |
| |
| // Collect files with a small file limit: must fail. |
| pup.ClearDiskFootprints(); |
| EXPECT_FALSE(CollectPathsRecursivelyWithLimits( |
| temp_dir_.GetPath(), 5, kSmallFileSizes, kAllowFolders, &pup)); |
| EXPECT_TRUE(pup.expanded_disk_footprints.empty()); |
| |
| // Collect a folder: must fail with |kForbidFolders|. |
| pup.ClearDiskFootprints(); |
| EXPECT_FALSE(CollectPathsRecursivelyWithLimits( |
| temp_dir_.GetPath(), 5, kLargeFileSizes, kForbidFolders, &pup)); |
| EXPECT_TRUE(pup.expanded_disk_footprints.empty()); |
| |
| // Collect 5 files: must pass. |
| pup.ClearDiskFootprints(); |
| EXPECT_TRUE(CollectPathsRecursivelyWithLimits( |
| temp_dir_.GetPath(), 5, kLargeFileSizes, kAllowFolders, &pup)); |
| FilePathSet expected_file_paths; |
| expected_file_paths.Insert(temp_dir_.GetPath()); |
| expected_file_paths.Insert(file_path1); |
| expected_file_paths.Insert(file_path2); |
| expected_file_paths.Insert(file_path3); |
| expected_file_paths.Insert(subfolder_path_); |
| EXPECT_EQ(expected_file_paths, pup.expanded_disk_footprints); |
| } |
| |
| } // namespace chrome_cleaner |