sandbox_file_stream_reader_unittest.cc 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131
  1. // Copyright 2013 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "storage/browser/file_system/sandbox_file_stream_reader.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include <limits>
  8. #include <memory>
  9. #include <string>
  10. #include "base/bind.h"
  11. #include "base/files/scoped_temp_dir.h"
  12. #include "base/memory/scoped_refptr.h"
  13. #include "base/run_loop.h"
  14. #include "base/test/task_environment.h"
  15. #include "net/base/io_buffer.h"
  16. #include "net/base/net_errors.h"
  17. #include "net/base/test_completion_callback.h"
  18. #include "storage/browser/file_system/external_mount_points.h"
  19. #include "storage/browser/file_system/file_stream_reader_test.h"
  20. #include "storage/browser/file_system/file_stream_test_utils.h"
  21. #include "storage/browser/file_system/file_system_context.h"
  22. #include "storage/browser/file_system/file_system_file_util.h"
  23. #include "storage/browser/quota/quota_manager_proxy.h"
  24. #include "storage/browser/test/async_file_test_helper.h"
  25. #include "storage/browser/test/mock_quota_manager_proxy.h"
  26. #include "storage/browser/test/mock_special_storage_policy.h"
  27. #include "storage/browser/test/test_file_system_context.h"
  28. #include "testing/gtest/include/gtest/gtest.h"
  29. #include "third_party/blink/public/common/storage_key/storage_key.h"
  30. #include "url/origin.h"
  31. namespace storage {
  32. namespace {
  33. const char kURLOrigin[] = "http://remote/";
  34. } // namespace
  35. class SandboxFileStreamReaderTest : public FileStreamReaderTest {
  36. public:
  37. SandboxFileStreamReaderTest()
  38. : special_storage_policy_(
  39. base::MakeRefCounted<MockSpecialStoragePolicy>()) {}
  40. void SetUp() override {
  41. ASSERT_TRUE(dir_.CreateUniqueTempDir());
  42. quota_manager_ = base::MakeRefCounted<storage::MockQuotaManager>(
  43. /*is_incognito=*/false, dir_.GetPath(),
  44. base::ThreadTaskRunnerHandle::Get(), special_storage_policy_);
  45. quota_manager_proxy_ = base::MakeRefCounted<storage::MockQuotaManagerProxy>(
  46. quota_manager_.get(), base::ThreadTaskRunnerHandle::Get());
  47. file_system_context_ = CreateFileSystemContextForTesting(
  48. quota_manager_proxy_.get(), dir_.GetPath());
  49. file_system_context_->OpenFileSystem(
  50. blink::StorageKey::CreateFromStringForTesting(kURLOrigin),
  51. /*bucket=*/absl::nullopt, kFileSystemTypeTemporary,
  52. OPEN_FILE_SYSTEM_CREATE_IF_NONEXISTENT,
  53. base::BindOnce([](const FileSystemURL& root_url,
  54. const std::string& name, base::File::Error result) {
  55. ASSERT_EQ(base::File::FILE_OK, result);
  56. }));
  57. base::RunLoop().RunUntilIdle();
  58. }
  59. void TearDown() override { base::RunLoop().RunUntilIdle(); }
  60. std::unique_ptr<FileStreamReader> CreateFileReader(
  61. const std::string& file_name,
  62. int64_t initial_offset,
  63. const base::Time& expected_modification_time) override {
  64. return std::make_unique<SandboxFileStreamReader>(
  65. file_system_context_.get(), GetFileSystemURL(file_name), initial_offset,
  66. expected_modification_time);
  67. }
  68. void WriteFile(const std::string& file_name,
  69. const char* buf,
  70. size_t buf_size,
  71. base::Time* modification_time) override {
  72. FileSystemURL url = GetFileSystemURL(file_name);
  73. ASSERT_EQ(base::File::FILE_OK,
  74. AsyncFileTestHelper::CreateFileWithData(
  75. file_system_context_.get(), url, buf, buf_size));
  76. base::File::Info file_info;
  77. ASSERT_EQ(base::File::FILE_OK,
  78. AsyncFileTestHelper::GetMetadata(file_system_context_.get(), url,
  79. &file_info));
  80. if (modification_time)
  81. *modification_time = file_info.last_modified;
  82. }
  83. void TouchFile(const std::string& file_name, base::TimeDelta delta) override {
  84. FileSystemURL url = GetFileSystemURL(file_name);
  85. base::File::Info file_info;
  86. ASSERT_EQ(base::File::FILE_OK,
  87. AsyncFileTestHelper::GetMetadata(file_system_context_.get(), url,
  88. &file_info));
  89. ASSERT_EQ(base::File::FILE_OK,
  90. AsyncFileTestHelper::TouchFile(file_system_context_.get(), url,
  91. file_info.last_accessed,
  92. file_info.last_modified + delta));
  93. }
  94. FileSystemURL GetFileSystemURL(const std::string& file_name) {
  95. return file_system_context_->CreateCrackedFileSystemURL(
  96. blink::StorageKey::CreateFromStringForTesting(kURLOrigin),
  97. kFileSystemTypeTemporary, base::FilePath().AppendASCII(file_name));
  98. }
  99. protected:
  100. scoped_refptr<MockSpecialStoragePolicy> special_storage_policy_;
  101. scoped_refptr<FileSystemContext> file_system_context_;
  102. scoped_refptr<MockQuotaManager> quota_manager_;
  103. scoped_refptr<MockQuotaManagerProxy> quota_manager_proxy_;
  104. };
  105. INSTANTIATE_TYPED_TEST_SUITE_P(FileSystem,
  106. FileStreamReaderTypedTest,
  107. SandboxFileStreamReaderTest);
  108. } // namespace storage