blob: 532de4045185a9779b10c87f39a42ed4c7187f07 [file] [log] [blame]
// Copyright 2014 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#ifndef STORAGE_BROWSER_TEST_FILE_SYSTEM_TEST_FILE_SET_H_
#define STORAGE_BROWSER_TEST_FILE_SYSTEM_TEST_FILE_SET_H_
#include <stddef.h>
#include <stdint.h>
#include <array>
#include "base/files/file_path.h"
// Common test data structures and test cases.
namespace storage {
// For tests using blocking, this indicates whether a file should be blocked or
// allowed and additionally marks the expectation.
enum class TestBlockAction {
// Allow the transfer of the file/directory. Additionally, this indicates that
// all its children and parents are allowed.
ALLOWED,
// Block the file/directory.
BLOCKED,
// A parent/ancestor of this file/directory is blocked. This file/directory
// should never be reached on a recursive operation (if blocking is enabled).
PARENT_BLOCKED,
// Allow the transfer of the directory. Additionally, this indicates that some
// child/descendant of this directory is blocked.
CHILD_BLOCKED,
};
struct FileSystemTestCaseRecord {
bool is_directory;
const base::FilePath::CharType path[64];
int64_t data_file_size;
TestBlockAction block_action;
};
inline constexpr std::array kRegularFileSystemTestCases = {
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir a"),
.data_file_size = 0,
.block_action = TestBlockAction::CHILD_BLOCKED},
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir a/dir A"),
.data_file_size = 0,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir a/dir d"),
.data_file_size = 0,
.block_action = TestBlockAction::CHILD_BLOCKED},
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e"),
.data_file_size = 0,
.block_action = TestBlockAction::CHILD_BLOCKED},
FileSystemTestCaseRecord{
.is_directory = true,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir f"),
.data_file_size = 0,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{
.is_directory = true,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir g"),
.data_file_size = 0,
.block_action = TestBlockAction::CHILD_BLOCKED},
FileSystemTestCaseRecord{
.is_directory = true,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir h"),
.data_file_size = 0,
.block_action = TestBlockAction::BLOCKED},
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir b"),
.data_file_size = 0,
.block_action = TestBlockAction::BLOCKED},
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir b/dir a"),
.data_file_size = 0,
.block_action = TestBlockAction::PARENT_BLOCKED},
FileSystemTestCaseRecord{.is_directory = true,
.path = FILE_PATH_LITERAL("dir c"),
.data_file_size = 0,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{.is_directory = false,
.path = FILE_PATH_LITERAL("file 0"),
.data_file_size = 38,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{.is_directory = false,
.path = FILE_PATH_LITERAL("file 2"),
.data_file_size = 60,
.block_action = TestBlockAction::BLOCKED},
FileSystemTestCaseRecord{.is_directory = false,
.path = FILE_PATH_LITERAL("file 3"),
.data_file_size = 0,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/file 0"),
.data_file_size = 39,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{
.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 0"),
.data_file_size = 40,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{
.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 1"),
.data_file_size = 41,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{
.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 2"),
.data_file_size = 42,
.block_action = TestBlockAction::BLOCKED},
FileSystemTestCaseRecord{
.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir g/file 3"),
.data_file_size = 43,
.block_action = TestBlockAction::ALLOWED},
FileSystemTestCaseRecord{
.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir h/file 0"),
.data_file_size = 44,
.block_action = TestBlockAction::PARENT_BLOCKED},
FileSystemTestCaseRecord{
.is_directory = false,
.path = FILE_PATH_LITERAL("dir a/dir d/dir e/dir h/file 1"),
.data_file_size = 45,
.block_action = TestBlockAction::PARENT_BLOCKED},
FileSystemTestCaseRecord{.is_directory = false,
.path = FILE_PATH_LITERAL("dir b/file 0"),
.data_file_size = 46,
.block_action = TestBlockAction::PARENT_BLOCKED},
FileSystemTestCaseRecord{.is_directory = false,
.path = FILE_PATH_LITERAL("dir b/file 1"),
.data_file_size = 47,
.block_action = TestBlockAction::PARENT_BLOCKED},
};
size_t GetRegularFileSystemTestCaseSize();
// Creates one file or directory specified by |record|.
void SetUpOneFileSystemTestCase(const base::FilePath& root_path,
const FileSystemTestCaseRecord& record);
// Creates the files and directories specified in kRegularTestCases.
void SetUpRegularFileSystemTestCases(const base::FilePath& root_path);
} // namespace storage
#endif // STORAGE_BROWSER_TEST_FILE_SYSTEM_TEST_FILE_SET_H_