[ Merge of http://go/wvgerrit/171310 ] Offline license not found errors are identified by CdmResponseEnum 347 (KEYSET_ID_NOT_FOUND_4). No addition file system information is shared. Checks for file existance use the stat command. The stat call can return error codes from errno.h when the command fails. These are now converted into sub error codes and returned along with the offline license file not found error. This also includes a change to log stat errors other than ENOENT (no such file or directory) as a warning rather than verbose. Bug: 276225520 Test: file_store_unittest, file_utils_unittest, GtsMediaTestCases Change-Id: Ic09d036549582cd65783b49fa96ffefc4bf562c7
341 lines
12 KiB
C++
341 lines
12 KiB
C++
// 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 <gmock/gmock.h>
|
|
#include <gtest/gtest.h>
|
|
|
|
#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 =
|
|
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 = 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 = 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, FileExists) {
|
|
std::string path = wvcdm::test_vectors::kTestDir + kTestFileName;
|
|
std::string path2 = wvcdm::test_vectors::kTestDir + kTestFileName2;
|
|
file_system_.Remove(path);
|
|
file_system_.Remove(path2);
|
|
|
|
std::unique_ptr<File> file = file_system_.Open(path, FileSystem::kCreate);
|
|
EXPECT_TRUE(file);
|
|
|
|
EXPECT_TRUE(file_system_.Exists(path));
|
|
int errno_value = -1;
|
|
EXPECT_TRUE(file_system_.Exists(path, &errno_value));
|
|
EXPECT_EQ(0, errno_value);
|
|
EXPECT_TRUE(file_system_.Exists(wvcdm::test_vectors::kTestDir));
|
|
EXPECT_TRUE(file_system_.Exists(path, nullptr));
|
|
|
|
EXPECT_FALSE(file_system_.Exists(path2));
|
|
EXPECT_FALSE(file_system_.Exists(path2, &errno_value));
|
|
EXPECT_EQ(ENOENT, errno_value);
|
|
EXPECT_TRUE(file_system_.Exists(wvcdm::test_vectors::kTestDir));
|
|
EXPECT_FALSE(file_system_.Exists(path2, nullptr));
|
|
}
|
|
|
|
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<File> 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<File> 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<std::string> 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 = 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<std::string> 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
|