blob: 14054a32520c2687eef730e9ddc8e1e736a070c6 [file] [log] [blame]
// Copyright 2019 The Chromium OS 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 "arc/apk-cache/cache_cleaner_utils.h"
#include <base/files/file_enumerator.h>
#include <base/files/file_path.h>
#include <base/files/file_util.h>
#include <base/files/scoped_temp_dir.h>
#include <gtest/gtest.h>
namespace apk_cache {
namespace {
constexpr char kTestFileContent[] = "test file content";
} // namespace
class CacheCleanerUtilsTest : public testing::Test {
public:
const base::FilePath& temp_path() const { return temp_dir_.GetPath(); }
protected:
CacheCleanerUtilsTest() = default;
// Not copyable or movable.
CacheCleanerUtilsTest(const CacheCleanerUtilsTest&) = delete;
CacheCleanerUtilsTest& operator=(const CacheCleanerUtilsTest&) = delete;
void SetUp() override { ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); }
void TearDown() override { ASSERT_TRUE(temp_dir_.Delete()); }
private:
base::ScopedTempDir temp_dir_;
};
// Files under root directory should be removed if FILES is passed. Directories
// should not be removed.
TEST_F(CacheCleanerUtilsTest, RemoveFile) {
base::FilePath file_path = temp_path().Append("test_file");
base::WriteFile(file_path, kTestFileContent, strlen(kTestFileContent));
base::FilePath dir_path = temp_path().Append("test_dir");
base::CreateDirectory(dir_path);
EXPECT_TRUE(base::PathExists(file_path));
EXPECT_TRUE(base::PathExists(dir_path));
EXPECT_TRUE(RemoveUnexpectedItemsFromDir(
temp_path(), base::FileEnumerator::FileType::FILES, {}));
EXPECT_FALSE(base::PathExists(file_path));
EXPECT_TRUE(base::PathExists(dir_path));
}
// Directories under root directory should be removed if DIRECTORIES is passed.
// Files should not be removed.
TEST_F(CacheCleanerUtilsTest, RemoveDirectory) {
base::FilePath file_path = temp_path().Append("test_file");
base::WriteFile(file_path, kTestFileContent, strlen(kTestFileContent));
base::FilePath dir_path = temp_path().Append("test_dir");
base::CreateDirectory(dir_path);
EXPECT_TRUE(base::PathExists(file_path));
EXPECT_TRUE(base::PathExists(dir_path));
EXPECT_TRUE(RemoveUnexpectedItemsFromDir(
temp_path(), base::FileEnumerator::FileType::DIRECTORIES, {}));
EXPECT_TRUE(base::PathExists(file_path));
EXPECT_FALSE(base::PathExists(dir_path));
}
// Symbolic links should be removed if SHOW_SYM_LINKS is passed.
TEST_F(CacheCleanerUtilsTest, RemoveSymbolicLink) {
base::FilePath file_path = temp_path().Append("test_file");
base::WriteFile(file_path, kTestFileContent, strlen(kTestFileContent));
base::FilePath link_path = temp_path().Append("test_link");
base::CreateSymbolicLink(file_path, link_path);
EXPECT_TRUE(base::PathExists(file_path));
EXPECT_TRUE(base::PathExists(link_path));
EXPECT_TRUE(RemoveUnexpectedItemsFromDir(
temp_path(),
base::FileEnumerator::FileType::FILES |
base::FileEnumerator::FileType::SHOW_SYM_LINKS,
{}));
EXPECT_FALSE(base::PathExists(file_path));
EXPECT_FALSE(base::PathExists(link_path));
}
// Expected files and directories should not be removed.
TEST_F(CacheCleanerUtilsTest, NotRemoveExpected) {
base::FilePath file_path = temp_path().Append("test_file");
base::WriteFile(file_path, kTestFileContent, strlen(kTestFileContent));
base::FilePath dir_path = temp_path().Append("test_dir");
base::CreateDirectory(dir_path);
base::FilePath expected_file_path = temp_path().Append("expected_file");
base::WriteFile(expected_file_path, kTestFileContent,
strlen(kTestFileContent));
base::FilePath expected_dir_path = temp_path().Append("expected_dir");
base::CreateDirectory(expected_dir_path);
EXPECT_TRUE(base::PathExists(file_path));
EXPECT_TRUE(base::PathExists(dir_path));
EXPECT_TRUE(base::PathExists(expected_file_path));
EXPECT_TRUE(base::PathExists(expected_dir_path));
EXPECT_TRUE(RemoveUnexpectedItemsFromDir(
temp_path(),
base::FileEnumerator::FileType::FILES |
base::FileEnumerator::FileType::DIRECTORIES |
base::FileEnumerator::FileType::SHOW_SYM_LINKS,
{"expected_file", "expected_dir"}));
EXPECT_FALSE(base::PathExists(file_path));
EXPECT_FALSE(base::PathExists(dir_path));
EXPECT_TRUE(base::PathExists(expected_file_path));
EXPECT_TRUE(base::PathExists(expected_dir_path));
}
} // namespace apk_cache