Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(251)

Unified Diff: webkit/fileapi/file_system_file_stream_reader_unittest.cc

Issue 11098067: fileapi: Add modification time check for FileSystemFileStreamReader (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix leak in test Created 8 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « webkit/fileapi/file_system_file_stream_reader.cc ('k') | webkit/fileapi/file_system_mount_point_provider.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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
« no previous file with comments | « webkit/fileapi/file_system_file_stream_reader.cc ('k') | webkit/fileapi/file_system_mount_point_provider.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698