filesystem_proxy_file_stream_reader_unittest.cc 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108
  1. // Copyright 2020 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/local_file_stream_reader.h"
  5. #include <stddef.h>
  6. #include <stdint.h>
  7. #include <memory>
  8. #include <string>
  9. #include "base/bind.h"
  10. #include "base/callback_helpers.h"
  11. #include "base/files/file.h"
  12. #include "base/files/file_path.h"
  13. #include "base/files/file_util.h"
  14. #include "base/files/scoped_temp_dir.h"
  15. #include "base/location.h"
  16. #include "base/run_loop.h"
  17. #include "base/task/single_thread_task_runner.h"
  18. #include "base/test/task_environment.h"
  19. #include "base/threading/thread.h"
  20. #include "base/time/time.h"
  21. #include "net/base/io_buffer.h"
  22. #include "net/base/net_errors.h"
  23. #include "net/base/test_completion_callback.h"
  24. #include "storage/browser/file_system/file_stream_reader_test.h"
  25. #include "storage/browser/file_system/file_stream_test_utils.h"
  26. #include "testing/gtest/include/gtest/gtest.h"
  27. namespace storage {
  28. class FilesystemProxyFileStreamReaderTest : public FileStreamReaderTest {
  29. public:
  30. FilesystemProxyFileStreamReaderTest() : file_thread_("TestFileThread") {}
  31. void SetUp() override {
  32. ASSERT_TRUE(dir_.CreateUniqueTempDir());
  33. ASSERT_TRUE(file_thread_.Start());
  34. }
  35. void TearDown() override {
  36. // Give another chance for deleted streams to perform Close.
  37. base::RunLoop().RunUntilIdle();
  38. file_thread_.Stop();
  39. base::RunLoop().RunUntilIdle();
  40. }
  41. std::unique_ptr<FileStreamReader> CreateFileReader(
  42. const std::string& file_name,
  43. int64_t initial_offset,
  44. const base::Time& expected_modification_time) override {
  45. return FileStreamReader::CreateForFilesystemProxy(
  46. file_task_runner(), test_dir().AppendASCII(file_name),
  47. CreateFilesystemProxy(), initial_offset, expected_modification_time);
  48. }
  49. void WriteFile(const std::string& file_name,
  50. const char* buf,
  51. size_t buf_size,
  52. base::Time* modification_time) override {
  53. base::FilePath path = test_dir().AppendASCII(file_name);
  54. base::WriteFile(path, buf, buf_size);
  55. base::File::Info file_info;
  56. ASSERT_TRUE(base::GetFileInfo(path, &file_info));
  57. if (modification_time)
  58. *modification_time = file_info.last_modified;
  59. }
  60. void TouchFile(const std::string& file_name, base::TimeDelta delta) override {
  61. base::FilePath path = test_dir().AppendASCII(file_name);
  62. base::File::Info file_info;
  63. ASSERT_TRUE(base::GetFileInfo(path, &file_info));
  64. ASSERT_TRUE(base::TouchFile(path, file_info.last_accessed,
  65. file_info.last_modified + delta));
  66. }
  67. void EnsureFileTaskFinished() override {
  68. base::RunLoop run_loop;
  69. file_task_runner()->PostTaskAndReply(FROM_HERE, base::DoNothing(),
  70. run_loop.QuitClosure());
  71. run_loop.Run();
  72. }
  73. base::FilePath test_dir() const { return dir_.GetPath(); }
  74. base::SingleThreadTaskRunner* file_task_runner() const {
  75. return file_thread_.task_runner().get();
  76. }
  77. std::unique_ptr<FilesystemProxy> CreateFilesystemProxy() {
  78. return std::make_unique<FilesystemProxy>(FilesystemProxy::UNRESTRICTED,
  79. dir_.GetPath());
  80. }
  81. private:
  82. base::ScopedTempDir dir_;
  83. base::Thread file_thread_;
  84. };
  85. INSTANTIATE_TYPED_TEST_SUITE_P(FilesystemProxy,
  86. FileStreamReaderTypedTest,
  87. FilesystemProxyFileStreamReaderTest);
  88. } // namespace storage