// Copyright 2018 Google LLC. All Rights Reserved. This file and proprietary // source code may only be used and distributed under the Widevine License // Agreement. #include "file_utils.h" #include #include #include "file_store.h" #include "test_vectors.h" namespace wvutil { namespace { const std::string kTestDirName = "test_dir"; const std::string kTestFileName = "test.txt"; const std::string kTestFileName2 = "test2.txt"; const std::string kTestFileNameWithDifferentExt = "test.log"; const std::string kTestFileNameWithDifferentPrefix = "file.txt"; const std::string kTestFileNamePrefix = "test"; const std::string kTestFileNameExt = ".txt"; } // namespace class FileUtilsTest : public testing::Test { protected: FileUtilsTest() {} virtual ~FileUtilsTest() {} virtual void SetUp() { CreateTestDir(); } virtual void TearDown() { RemoveTestDir(); } void CreateTestDir() { if (!file_system_.Exists(wvcdm::test_vectors::kTestDir)) { EXPECT_TRUE(FileUtils::CreateDirectory(wvcdm::test_vectors::kTestDir)); } EXPECT_TRUE(file_system_.Exists(wvcdm::test_vectors::kTestDir)); } void RemoveTestDir() { EXPECT_TRUE(file_system_.Remove(wvcdm::test_vectors::kTestDir)); } void CreateTestFile(const std::string file_path) { std::string write_data = GenerateRandomData(600); size_t write_data_size = write_data.size(); std::unique_ptr file = file_system_.Open(file_path, FileSystem::kCreate); EXPECT_TRUE(file); EXPECT_EQ(file->Write(write_data.data(), write_data_size), write_data_size); EXPECT_TRUE(file_system_.Exists(file_path)); } std::string GenerateRandomData(uint32_t len) { std::string data(len, 0); for (size_t i = 0; i < len; i++) { data[i] = rand() % 256; } return data; } FileSystem file_system_; }; TEST_F(FileUtilsTest, CreateDirectory) { std::string dir_wo_delimiter = wvcdm::test_vectors::kTestDir.substr( 0, wvcdm::test_vectors::kTestDir.size() - 1); if (file_system_.Exists(dir_wo_delimiter)) EXPECT_TRUE(file_system_.Remove(dir_wo_delimiter)); EXPECT_FALSE(file_system_.Exists(dir_wo_delimiter)); EXPECT_TRUE(FileUtils::CreateDirectory(dir_wo_delimiter)); EXPECT_TRUE(file_system_.Exists(dir_wo_delimiter)); EXPECT_TRUE(file_system_.Remove(dir_wo_delimiter)); EXPECT_TRUE(FileUtils::CreateDirectory(wvcdm::test_vectors::kTestDir)); EXPECT_TRUE(file_system_.Exists(wvcdm::test_vectors::kTestDir)); EXPECT_TRUE(file_system_.Remove(wvcdm::test_vectors::kTestDir)); } TEST_F(FileUtilsTest, IsDir) { std::string path = wvcdm::test_vectors::kTestDir + kTestFileName; std::unique_ptr file = file_system_.Open(path, FileSystem::kCreate); EXPECT_TRUE(file); EXPECT_TRUE(file_system_.Exists(path)); EXPECT_TRUE(file_system_.Exists(wvcdm::test_vectors::kTestDir)); EXPECT_FALSE(FileUtils::IsDirectory(path)); EXPECT_TRUE(FileUtils::IsDirectory(wvcdm::test_vectors::kTestDir)); } TEST_F(FileUtilsTest, IsRegularFile) { std::string path = wvcdm::test_vectors::kTestDir + kTestFileName; std::unique_ptr file = file_system_.Open(path, FileSystem::kCreate); EXPECT_TRUE(file); EXPECT_TRUE(file_system_.Exists(path)); EXPECT_TRUE(file_system_.Exists(wvcdm::test_vectors::kTestDir)); EXPECT_TRUE(FileUtils::IsRegularFile(path)); EXPECT_FALSE(FileUtils::IsRegularFile(wvcdm::test_vectors::kTestDir)); } TEST_F(FileUtilsTest, CopyFile) { std::string path = wvcdm::test_vectors::kTestDir + kTestFileName; file_system_.Remove(path); std::string write_data = GenerateRandomData(600); size_t write_data_size = write_data.size(); std::unique_ptr wr_file = file_system_.Open(path, FileSystem::kCreate); EXPECT_TRUE(wr_file); EXPECT_EQ(wr_file->Write(write_data.data(), write_data_size), write_data_size); ASSERT_TRUE(file_system_.Exists(path)); std::string path_copy = wvcdm::test_vectors::kTestDir + kTestFileName2; EXPECT_FALSE(file_system_.Exists(path_copy)); EXPECT_TRUE(FileUtils::Copy(path, path_copy)); std::string read_data; read_data.resize(file_system_.FileSize(path_copy)); size_t read_data_size = read_data.size(); std::unique_ptr rd_file = file_system_.Open(path_copy, FileSystem::kReadOnly); EXPECT_TRUE(rd_file); EXPECT_EQ(rd_file->Read(&read_data[0], read_data_size), read_data_size); EXPECT_EQ(write_data, read_data); EXPECT_EQ(file_system_.FileSize(path), file_system_.FileSize(path_copy)); } TEST_F(FileUtilsTest, ListEmptyDirectory) { std::vector files; EXPECT_TRUE(FileUtils::List(wvcdm::test_vectors::kTestDir, &files)); EXPECT_EQ(0u, files.size()); } TEST_F(FileUtilsTest, ListFiles) { std::string path = wvcdm::test_vectors::kTestDir + kTestDirName; EXPECT_TRUE(FileUtils::CreateDirectory(path)); path = wvcdm::test_vectors::kTestDir + kTestFileName; std::string write_data = GenerateRandomData(600); size_t write_data_size = write_data.size(); std::unique_ptr file = file_system_.Open(path, FileSystem::kCreate); EXPECT_TRUE(file); EXPECT_EQ(file->Write(write_data.data(), write_data_size), write_data_size); EXPECT_TRUE(file_system_.Exists(path)); path = wvcdm::test_vectors::kTestDir + kTestFileName2; write_data = GenerateRandomData(600); write_data_size = write_data.size(); file = file_system_.Open(path, FileSystem::kCreate); EXPECT_TRUE(file); EXPECT_EQ(file->Write(write_data.data(), write_data_size), write_data_size); EXPECT_TRUE(file_system_.Exists(path)); std::vector files; EXPECT_TRUE(FileUtils::List(wvcdm::test_vectors::kTestDir, &files)); EXPECT_EQ(3u, files.size()); for (size_t i = 0; i < files.size(); ++i) { EXPECT_TRUE(files[i] == kTestDirName || files[i] == kTestFileName || files[i] == kTestFileName2); } } TEST_F(FileUtilsTest, RemoveDirectory) { std::string path = wvcdm::test_vectors::kTestDir; EXPECT_TRUE(FileUtils::CreateDirectory(path)); EXPECT_TRUE(FileUtils::Exists(path)); EXPECT_TRUE(FileUtils::Remove(path)); EXPECT_FALSE(FileUtils::Exists(path)); } TEST_F(FileUtilsTest, RemoveTopLevelDirectory) { std::string base_path = wvcdm::test_vectors::kTestDir; std::string sub_dir_path = wvcdm::test_vectors::kTestDir + kTestDirName; EXPECT_TRUE(FileUtils::CreateDirectory(sub_dir_path)); EXPECT_TRUE(FileUtils::Exists(sub_dir_path)); std::string file_path_1 = base_path + kTestFileName; CreateTestFile(file_path_1); std::string file_path_2 = sub_dir_path + kDirectoryDelimiter + kTestFileName2; CreateTestFile(file_path_2); EXPECT_TRUE(FileUtils::Remove(base_path)); EXPECT_FALSE(FileUtils::Exists(base_path)); EXPECT_FALSE(FileUtils::Exists(sub_dir_path)); EXPECT_FALSE(FileUtils::Exists(file_path_1)); EXPECT_FALSE(FileUtils::Exists(file_path_2)); } TEST_F(FileUtilsTest, RemoveFilesUsingWildcard) { std::string base_path = wvcdm::test_vectors::kTestDir + kTestDirName; EXPECT_TRUE(FileUtils::CreateDirectory(base_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); std::string file_path_1 = base_path + kDirectoryDelimiter + kTestFileName; CreateTestFile(file_path_1); std::string file_path_2 = base_path + kDirectoryDelimiter + kTestFileName2; CreateTestFile(file_path_2); std::string file_path_with_different_ext = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentExt; CreateTestFile(file_path_with_different_ext); std::string file_path_with_different_prefix = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentPrefix; CreateTestFile(file_path_with_different_prefix); std::string wildcard_path = base_path + kDirectoryDelimiter + kWildcard; EXPECT_TRUE(FileUtils::Remove(wildcard_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); EXPECT_FALSE(FileUtils::Exists(file_path_1)); EXPECT_FALSE(FileUtils::Exists(file_path_2)); EXPECT_FALSE(FileUtils::Exists(file_path_with_different_ext)); EXPECT_FALSE(FileUtils::Exists(file_path_with_different_prefix)); } TEST_F(FileUtilsTest, RemoveFilesUsingWildcardAndExtension) { std::string base_path = wvcdm::test_vectors::kTestDir + kTestDirName; EXPECT_TRUE(FileUtils::CreateDirectory(base_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); std::string file_path_1 = base_path + kDirectoryDelimiter + kTestFileName; CreateTestFile(file_path_1); std::string file_path_2 = base_path + kDirectoryDelimiter + kTestFileName2; CreateTestFile(file_path_2); std::string file_path_with_different_ext = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentExt; CreateTestFile(file_path_with_different_ext); std::string file_path_with_different_prefix = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentPrefix; CreateTestFile(file_path_with_different_prefix); std::string wildcard_path = base_path + kDirectoryDelimiter + kWildcard + kTestFileNameExt; EXPECT_TRUE(FileUtils::Remove(wildcard_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); EXPECT_FALSE(FileUtils::Exists(file_path_1)); EXPECT_FALSE(FileUtils::Exists(file_path_2)); EXPECT_TRUE(FileUtils::Exists(file_path_with_different_ext)); EXPECT_FALSE(FileUtils::Exists(file_path_with_different_prefix)); } TEST_F(FileUtilsTest, RemoveFilesUsingPrefixAndWildcard) { std::string base_path = wvcdm::test_vectors::kTestDir + kTestDirName; EXPECT_TRUE(FileUtils::CreateDirectory(base_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); std::string file_path_1 = base_path + kDirectoryDelimiter + kTestFileName; CreateTestFile(file_path_1); std::string file_path_2 = base_path + kDirectoryDelimiter + kTestFileName2; CreateTestFile(file_path_2); std::string file_path_with_different_ext = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentExt; CreateTestFile(file_path_with_different_ext); std::string file_path_with_different_prefix = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentPrefix; CreateTestFile(file_path_with_different_prefix); std::string wildcard_path = base_path + kDirectoryDelimiter + kTestFileNamePrefix + kWildcard; EXPECT_TRUE(FileUtils::Remove(wildcard_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); EXPECT_FALSE(FileUtils::Exists(file_path_1)); EXPECT_FALSE(FileUtils::Exists(file_path_2)); EXPECT_FALSE(FileUtils::Exists(file_path_with_different_ext)); EXPECT_TRUE(FileUtils::Exists(file_path_with_different_prefix)); } TEST_F(FileUtilsTest, RemoveFilesUsingPrefixWildcardAndExtension) { std::string base_path = wvcdm::test_vectors::kTestDir + kTestDirName; EXPECT_TRUE(FileUtils::CreateDirectory(base_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); std::string file_path_1 = base_path + kDirectoryDelimiter + kTestFileName; CreateTestFile(file_path_1); std::string file_path_2 = base_path + kDirectoryDelimiter + kTestFileName2; CreateTestFile(file_path_2); std::string file_path_with_different_ext = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentExt; CreateTestFile(file_path_with_different_ext); std::string file_path_with_different_prefix = base_path + kDirectoryDelimiter + kTestFileNameWithDifferentPrefix; CreateTestFile(file_path_with_different_prefix); std::string wildcard_path = base_path + kDirectoryDelimiter + kTestFileNamePrefix + kWildcard + kTestFileNameExt; EXPECT_TRUE(FileUtils::Remove(wildcard_path)); EXPECT_TRUE(FileUtils::Exists(base_path)); EXPECT_FALSE(FileUtils::Exists(file_path_1)); EXPECT_FALSE(FileUtils::Exists(file_path_2)); EXPECT_TRUE(FileUtils::Exists(file_path_with_different_ext)); EXPECT_TRUE(FileUtils::Exists(file_path_with_different_prefix)); } } // namespace wvutil