Index: webkit/fileapi/file_system_file_stream_reader_unittest.cc |
diff --git a/webkit/blob/local_file_stream_reader_unittest.cc b/webkit/fileapi/file_system_file_stream_reader_unittest.cc |
similarity index 42% |
copy from webkit/blob/local_file_stream_reader_unittest.cc |
copy to webkit/fileapi/file_system_file_stream_reader_unittest.cc |
index 4087037ba80ec5df25315b1637f6115c56dc28e1..f1f8ae389e6c030ff15901b90417b16ecc15ac8d 100644 |
--- a/webkit/blob/local_file_stream_reader_unittest.cc |
+++ b/webkit/fileapi/file_system_file_stream_reader_unittest.cc |
@@ -2,31 +2,38 @@ |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
-#include "webkit/blob/local_file_stream_reader.h" |
+#include "webkit/fileapi/file_system_file_stream_reader.h" |
#include <string> |
-#include "base/file_path.h" |
-#include "base/file_util.h" |
#include "base/memory/scoped_ptr.h" |
#include "base/message_loop.h" |
#include "base/platform_file.h" |
#include "base/scoped_temp_dir.h" |
-#include "base/threading/thread.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
#include "net/base/test_completion_callback.h" |
#include "testing/gtest/include/gtest/gtest.h" |
+#include "webkit/fileapi/file_system_context.h" |
+#include "webkit/fileapi/file_system_file_util.h" |
+#include "webkit/fileapi/file_system_operation_context.h" |
+#include "webkit/fileapi/file_system_task_runners.h" |
+#include "webkit/fileapi/mock_file_system_options.h" |
+#include "webkit/fileapi/sandbox_mount_point_provider.h" |
+#include "webkit/quota/mock_special_storage_policy.h" |
-namespace webkit_blob { |
+namespace fileapi { |
namespace { |
+const char kURLOrigin[] = "http://remote/"; |
+const char kTestFileName[] = "test.dat"; |
const char kTestData[] = "0123456789"; |
const int kTestDataSize = arraysize(kTestData) - 1; |
-void ReadFromReader(LocalFileStreamReader* reader, |
- std::string* data, size_t size, |
+void ReadFromReader(FileSystemFileStreamReader* reader, |
+ std::string* data, |
+ size_t size, |
int* result) { |
ASSERT_TRUE(reader != NULL); |
ASSERT_TRUE(result != NULL); |
@@ -49,83 +56,110 @@ void ReadFromReader(LocalFileStreamReader* reader, |
} |
void NeverCalled(int) { ADD_FAILURE(); } |
-void EmptyCallback() {} |
- |
-void QuitLoop() { |
- MessageLoop::current()->Quit(); |
-} |
} // namespace |
-class LocalFileStreamReaderTest : public testing::Test { |
+class FileSystemFileStreamReaderTest : public testing::Test { |
public: |
- LocalFileStreamReaderTest() |
- : message_loop_(MessageLoop::TYPE_IO), |
- file_thread_("FileUtilProxyTestFileThread") {} |
+ FileSystemFileStreamReaderTest() |
+ : message_loop_(MessageLoop::TYPE_IO) {} |
virtual void SetUp() OVERRIDE { |
- ASSERT_TRUE(file_thread_.Start()); |
- ASSERT_TRUE(dir_.CreateUniqueTempDir()); |
+ ASSERT_TRUE(temp_dir_.CreateUniqueTempDir()); |
+ |
+ special_storage_policy_ = new quota::MockSpecialStoragePolicy; |
+ file_system_context_ = |
+ new FileSystemContext( |
+ FileSystemTaskRunners::CreateMockTaskRunners(), |
+ special_storage_policy_, |
+ NULL, |
+ temp_dir_.path(), |
+ CreateDisallowFileAccessOptions()); |
+ |
+ file_system_context_->sandbox_provider()->ValidateFileSystemRoot( |
+ GURL(kURLOrigin), kFileSystemTypeTemporary, true, // create |
+ base::Bind(&OnValidateFileSystem)); |
+ MessageLoop::current()->RunAllPending(); |
- file_util::WriteFile(test_path(), kTestData, kTestDataSize); |
- base::PlatformFileInfo info; |
- ASSERT_TRUE(file_util::GetFileInfo(test_path(), &info)); |
- test_file_modification_time_ = info.last_modified; |
+ WriteFile(kTestFileName, kTestData, kTestDataSize, |
+ &test_file_modification_time_); |
} |
virtual void TearDown() OVERRIDE { |
- // Give another chance for deleted streams to perform Close. |
MessageLoop::current()->RunAllPending(); |
- file_thread_.Stop(); |
} |
protected: |
- LocalFileStreamReader* CreateFileReader( |
- const FilePath& path, |
+ FileSystemFileStreamReader* CreateFileReader( |
+ const std::string& file_name, |
int64 initial_offset, |
const base::Time& expected_modification_time) { |
- return new LocalFileStreamReader( |
- file_task_runner(), |
- path, |
- initial_offset, |
- expected_modification_time); |
+ return new FileSystemFileStreamReader(file_system_context_, |
+ GetFileSystemURL(file_name), |
+ initial_offset, |
+ expected_modification_time); |
} |
- void TouchTestFile() { |
- base::Time new_modified_time = |
- test_file_modification_time() - base::TimeDelta::FromSeconds(1); |
- ASSERT_TRUE(file_util::TouchFile(test_path(), |
- test_file_modification_time(), |
- new_modified_time)); |
+ base::Time test_file_modification_time() const { |
+ return test_file_modification_time_; |
} |
- base::MessageLoopProxy* file_task_runner() const { |
- return file_thread_.message_loop_proxy().get(); |
+ void WriteFile(const std::string& file_name, |
+ const char* buf, |
+ int buf_size, |
+ base::Time* modification_time) { |
+ FileSystemFileUtil* file_util = file_system_context_-> |
+ sandbox_provider()->GetFileUtil(kFileSystemTypeTemporary); |
+ FileSystemURL url = GetFileSystemURL(file_name); |
+ |
+ FileSystemOperationContext context(file_system_context_); |
+ context.set_allowed_bytes_growth(1024); |
+ |
+ base::PlatformFile handle = base::kInvalidPlatformFileValue; |
+ bool created = false; |
+ ASSERT_EQ(base::PLATFORM_FILE_OK, file_util->CreateOrOpen( |
+ &context, |
+ url, |
+ base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_WRITE, |
+ &handle, |
+ &created)); |
+ EXPECT_TRUE(created); |
+ ASSERT_NE(base::kInvalidPlatformFileValue, handle); |
+ ASSERT_EQ(buf_size, |
+ base::WritePlatformFile(handle, 0 /* offset */, buf, buf_size)); |
+ base::ClosePlatformFile(handle); |
+ |
+ base::PlatformFileInfo file_info; |
+ FilePath platform_path; |
+ ASSERT_EQ(base::PLATFORM_FILE_OK, |
+ file_util->GetFileInfo(&context, url, &file_info, |
+ &platform_path)); |
+ if (modification_time) |
+ *modification_time = file_info.last_modified; |
} |
- FilePath test_dir() const { return dir_.path(); } |
- FilePath test_path() const { return dir_.path().AppendASCII("test"); } |
- base::Time test_file_modification_time() const { |
- return test_file_modification_time_; |
+ private: |
+ static void OnValidateFileSystem(base::PlatformFileError result) { |
+ ASSERT_EQ(base::PLATFORM_FILE_OK, result); |
} |
- void EnsureFileTaskFinished() { |
- file_task_runner()->PostTaskAndReply( |
- FROM_HERE, base::Bind(&EmptyCallback), base::Bind(&QuitLoop)); |
- MessageLoop::current()->Run(); |
+ FileSystemURL GetFileSystemURL(const std::string& file_name) { |
+ return FileSystemURL(GURL(kURLOrigin), |
+ kFileSystemTypeTemporary, |
+ FilePath().AppendASCII(file_name)); |
} |
- private: |
MessageLoop message_loop_; |
- base::Thread file_thread_; |
- ScopedTempDir dir_; |
+ ScopedTempDir temp_dir_; |
+ scoped_refptr<quota::MockSpecialStoragePolicy> special_storage_policy_; |
+ scoped_refptr<FileSystemContext> file_system_context_; |
base::Time test_file_modification_time_; |
}; |
-TEST_F(LocalFileStreamReaderTest, NonExistent) { |
- FilePath nonexistent_path = test_dir().AppendASCII("nonexistent"); |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(nonexistent_path, 0, base::Time())); |
+TEST_F(FileSystemFileStreamReaderTest, NonExistent) { |
+ const char kFileName[] = "nonexistent"; |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kFileName, 0, base::Time())); |
int result = 0; |
std::string data; |
ReadFromReader(reader.get(), &data, 10, &result); |
@@ -133,19 +167,12 @@ TEST_F(LocalFileStreamReaderTest, NonExistent) { |
ASSERT_EQ(0U, data.size()); |
} |
-TEST_F(LocalFileStreamReaderTest, Empty) { |
- FilePath empty_path = test_dir().AppendASCII("empty"); |
- base::PlatformFileError error = base::PLATFORM_FILE_OK; |
- base::PlatformFile file = base::CreatePlatformFile( |
- empty_path, |
- base::PLATFORM_FILE_CREATE | base::PLATFORM_FILE_READ, |
- NULL, &error); |
- ASSERT_EQ(base::PLATFORM_FILE_OK, error); |
- ASSERT_NE(base::kInvalidPlatformFileValue, file); |
- base::ClosePlatformFile(file); |
- |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(empty_path, 0, base::Time())); |
+TEST_F(FileSystemFileStreamReaderTest, Empty) { |
+ const char kFileName[] = "empty"; |
+ WriteFile(kFileName, NULL, 0, NULL); |
+ |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kFileName, 0, base::Time())); |
int result = 0; |
std::string data; |
ReadFromReader(reader.get(), &data, 10, &result); |
@@ -159,9 +186,9 @@ TEST_F(LocalFileStreamReaderTest, Empty) { |
ASSERT_EQ(0, result); |
} |
-TEST_F(LocalFileStreamReaderTest, GetLengthNormal) { |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 0, test_file_modification_time())); |
+TEST_F(FileSystemFileStreamReaderTest, GetLengthNormal) { |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 0, test_file_modification_time())); |
net::TestInt64CompletionCallback callback; |
int result = reader->GetLength(callback.callback()); |
if (result == net::ERR_IO_PENDING) |
@@ -169,13 +196,13 @@ TEST_F(LocalFileStreamReaderTest, GetLengthNormal) { |
ASSERT_EQ(kTestDataSize, result); |
} |
-TEST_F(LocalFileStreamReaderTest, GetLengthAfterModified) { |
- // Touch file so that the file's modification time becomes different |
- // from what we expect. |
- TouchTestFile(); |
+TEST_F(FileSystemFileStreamReaderTest, GetLengthAfterModified) { |
+ // Pass a fake expected modifictaion time so that the expectation fails. |
+ base::Time fake_expected_modification_time = |
+ test_file_modification_time() - base::TimeDelta::FromSeconds(10); |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 0, test_file_modification_time())); |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 0, fake_expected_modification_time)); |
net::TestInt64CompletionCallback callback; |
int result = reader->GetLength(callback.callback()); |
if (result == net::ERR_IO_PENDING) |
@@ -183,16 +210,16 @@ TEST_F(LocalFileStreamReaderTest, GetLengthAfterModified) { |
ASSERT_EQ(net::ERR_UPLOAD_FILE_CHANGED, result); |
// With NULL expected modification time this should work. |
- reader.reset(CreateFileReader(test_path(), 0, base::Time())); |
+ reader.reset(CreateFileReader(kTestFileName, 0, base::Time())); |
result = reader->GetLength(callback.callback()); |
if (result == net::ERR_IO_PENDING) |
result = callback.WaitForResult(); |
ASSERT_EQ(kTestDataSize, result); |
} |
-TEST_F(LocalFileStreamReaderTest, GetLengthWithOffset) { |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 3, base::Time())); |
+TEST_F(FileSystemFileStreamReaderTest, GetLengthWithOffset) { |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 3, base::Time())); |
net::TestInt64CompletionCallback callback; |
int result = reader->GetLength(callback.callback()); |
if (result == net::ERR_IO_PENDING) |
@@ -201,9 +228,9 @@ TEST_F(LocalFileStreamReaderTest, GetLengthWithOffset) { |
ASSERT_EQ(kTestDataSize, result); |
} |
-TEST_F(LocalFileStreamReaderTest, ReadNormal) { |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 0, test_file_modification_time())); |
+TEST_F(FileSystemFileStreamReaderTest, ReadNormal) { |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 0, test_file_modification_time())); |
int result = 0; |
std::string data; |
ReadFromReader(reader.get(), &data, kTestDataSize, &result); |
@@ -211,13 +238,13 @@ TEST_F(LocalFileStreamReaderTest, ReadNormal) { |
ASSERT_EQ(kTestData, data); |
} |
-TEST_F(LocalFileStreamReaderTest, ReadAfterModified) { |
- // Touch file so that the file's modification time becomes different |
- // from what we expect. |
- TouchTestFile(); |
+TEST_F(FileSystemFileStreamReaderTest, ReadAfterModified) { |
+ // Pass a fake expected modifictaion time so that the expectation fails. |
+ base::Time fake_expected_modification_time = |
+ test_file_modification_time() - base::TimeDelta::FromSeconds(10); |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 0, test_file_modification_time())); |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 0, fake_expected_modification_time)); |
int result = 0; |
std::string data; |
ReadFromReader(reader.get(), &data, kTestDataSize, &result); |
@@ -226,15 +253,15 @@ TEST_F(LocalFileStreamReaderTest, ReadAfterModified) { |
// With NULL expected modification time this should work. |
data.clear(); |
- reader.reset(CreateFileReader(test_path(), 0, base::Time())); |
+ reader.reset(CreateFileReader(kTestFileName, 0, base::Time())); |
ReadFromReader(reader.get(), &data, kTestDataSize, &result); |
ASSERT_EQ(net::OK, result); |
ASSERT_EQ(kTestData, data); |
} |
-TEST_F(LocalFileStreamReaderTest, ReadWithOffset) { |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 3, base::Time())); |
+TEST_F(FileSystemFileStreamReaderTest, ReadWithOffset) { |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 3, base::Time())); |
int result = 0; |
std::string data; |
ReadFromReader(reader.get(), &data, kTestDataSize, &result); |
@@ -242,9 +269,9 @@ TEST_F(LocalFileStreamReaderTest, ReadWithOffset) { |
ASSERT_EQ(&kTestData[3], data); |
} |
-TEST_F(LocalFileStreamReaderTest, DeleteWithUnfinishedRead) { |
- scoped_ptr<LocalFileStreamReader> reader( |
- CreateFileReader(test_path(), 0, base::Time())); |
+TEST_F(FileSystemFileStreamReaderTest, DeleteWithUnfinishedRead) { |
+ scoped_ptr<FileSystemFileStreamReader> reader( |
+ CreateFileReader(kTestFileName, 0, base::Time())); |
net::TestCompletionCallback callback; |
scoped_refptr<net::IOBufferWithSize> buf( |
@@ -255,7 +282,6 @@ TEST_F(LocalFileStreamReaderTest, DeleteWithUnfinishedRead) { |
// Delete immediately. |
// Should not crash; nor should NeverCalled be callback. |
reader.reset(); |
- EnsureFileTaskFinished(); |
} |
-} // namespace webkit_blob |
+} // namespace fileapi |