Index: chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc |
diff --git a/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc b/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc |
index 8b0bfc53e98af5422fd8ba021eb875b53428c9b4..89bf9971faa9d80f58df1ded750fe47196161475 100644 |
--- a/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc |
+++ b/chrome/browser/chromeos/drive/drive_file_stream_reader_unittest.cc |
@@ -17,6 +17,7 @@ |
#include "chrome/browser/chromeos/drive/test_util.h" |
#include "chrome/browser/drive/fake_drive_service.h" |
#include "content/public/test/test_browser_thread_bundle.h" |
+#include "google_apis/drive/gdata_wapi_parser.h" |
#include "google_apis/drive/test_util.h" |
#include "net/base/io_buffer.h" |
#include "net/base/net_errors.h" |
@@ -482,4 +483,80 @@ TEST_F(DriveFileStreamReaderTest, OutOfRangeError) { |
EXPECT_FALSE(entry); |
} |
+TEST_F(DriveFileStreamReaderTest, ZeroByteFileRead) { |
+ // Prepare an empty file |
+ { |
+ google_apis::GDataErrorCode error = google_apis::GDATA_OTHER_ERROR; |
+ scoped_ptr<google_apis::ResourceEntry> entry; |
+ fake_drive_service_->AddNewFile( |
+ "text/plain", |
+ "", // empty |
+ fake_drive_service_->GetRootResourceId(), |
+ "EmptyFile.txt", |
+ false, // shared_with_me |
+ google_apis::test_util::CreateCopyResultCallback(&error, &entry)); |
+ drive::test_util::RunBlockingPoolTask(); |
+ ASSERT_EQ(google_apis::HTTP_CREATED, error); |
+ ASSERT_TRUE(entry); |
+ ASSERT_EQ(0, entry->file_size()); |
+ } |
+ |
+ const base::FilePath kDriveFile = |
+ util::GetDriveMyDriveRootPath().AppendASCII("EmptyFile.txt"); |
+ // Create the reader, and initialize it. |
+ // In this case, the file is not yet locally cached. |
+ scoped_ptr<DriveFileStreamReader> reader(new DriveFileStreamReader( |
+ GetFileSystemGetter(), worker_thread_->message_loop_proxy().get())); |
+ EXPECT_FALSE(reader->IsInitialized()); |
+ |
+ int error = net::ERR_FAILED; |
+ scoped_ptr<ResourceEntry> entry; |
+ { |
+ base::RunLoop run_loop; |
+ reader->Initialize( |
+ kDriveFile, |
+ net::HttpByteRange(), |
+ google_apis::test_util::CreateQuitCallback( |
+ &run_loop, |
+ google_apis::test_util::CreateCopyResultCallback(&error, &entry))); |
+ run_loop.Run(); |
+ } |
+ EXPECT_EQ(net::OK, error); |
+ ASSERT_TRUE(entry); |
+ ASSERT_EQ(0u, entry->file_info().size()); // It's a zero-byte file. |
+ EXPECT_TRUE(reader->IsInitialized()); |
+ |
+ // Read data from the reader. Check that it successfuly reads empty data. |
+ std::string first_content; |
+ ASSERT_EQ(net::OK, test_util::ReadAllData(reader.get(), &first_content)); |
+ EXPECT_EQ(0u, first_content.size()); |
+ |
+ // Create second instance and initialize it. |
+ // In this case, the file should be cached one. |
+ reader.reset(new DriveFileStreamReader( |
+ GetFileSystemGetter(), worker_thread_->message_loop_proxy().get())); |
+ EXPECT_FALSE(reader->IsInitialized()); |
+ |
+ error = net::ERR_FAILED; |
+ entry.reset(); |
+ { |
+ base::RunLoop run_loop; |
+ reader->Initialize( |
+ kDriveFile, |
+ net::HttpByteRange(), |
+ google_apis::test_util::CreateQuitCallback( |
+ &run_loop, |
+ google_apis::test_util::CreateCopyResultCallback(&error, &entry))); |
+ run_loop.Run(); |
+ } |
+ EXPECT_EQ(net::OK, error); |
+ ASSERT_TRUE(entry); |
+ EXPECT_TRUE(reader->IsInitialized()); |
+ |
+ // Read data from the reader, again. |
+ std::string second_content; |
+ ASSERT_EQ(net::OK, test_util::ReadAllData(reader.get(), &second_content)); |
+ EXPECT_EQ(0u, second_content.size()); |
+} |
+ |
} // namespace drive |