Upstream version 9.38.198.0
[platform/framework/web/crosswalk.git] / src / chrome / browser / chromeos / file_system_provider / fileapi / file_stream_reader_unittest.cc
index ac81b54..0e3bf22 100644 (file)
@@ -2,6 +2,8 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 
+#include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h"
+
 #include <string>
 #include <vector>
 
 #include "base/files/scoped_temp_dir.h"
 #include "base/memory/scoped_ptr.h"
 #include "base/memory/weak_ptr.h"
-#include "base/platform_file.h"
 #include "base/run_loop.h"
 #include "chrome/browser/chromeos/file_system_provider/fake_provided_file_system.h"
-#include "chrome/browser/chromeos/file_system_provider/fileapi/file_stream_reader.h"
 #include "chrome/browser/chromeos/file_system_provider/service.h"
 #include "chrome/browser/chromeos/file_system_provider/service_factory.h"
 #include "chrome/test/base/testing_browser_process.h"
@@ -96,9 +96,17 @@ class FileSystemProviderFileStreamReader : public testing::Test {
     service->SetFileSystemFactoryForTesting(
         base::Bind(&FakeProvidedFileSystem::Create));
 
-    const bool result = service->MountFileSystem(
-        kExtensionId, kFileSystemId, "Testing File System");
+    const bool result = service->MountFileSystem(kExtensionId,
+                                                 kFileSystemId,
+                                                 "Testing File System",
+                                                 false /* writable */);
     ASSERT_TRUE(result);
+    FakeProvidedFileSystem* provided_file_system =
+        static_cast<FakeProvidedFileSystem*>(
+            service->GetProvidedFileSystem(kExtensionId, kFileSystemId));
+    ASSERT_TRUE(provided_file_system);
+    ASSERT_TRUE(provided_file_system->GetEntry(
+        base::FilePath::FromUTF8Unsafe(kFakeFilePath), &fake_file_));
     const ProvidedFileSystemInfo& file_system_info =
         service->GetProvidedFileSystem(kExtensionId, kFileSystemId)
             ->GetFileSystemInfo();
@@ -123,6 +131,7 @@ class FileSystemProviderFileStreamReader : public testing::Test {
   base::ScopedTempDir data_dir_;
   scoped_ptr<TestingProfileManager> profile_manager_;
   TestingProfile* profile_;  // Owned by TestingProfileManager.
+  FakeEntry fake_file_;
   fileapi::FileSystemURL file_url_;
   fileapi::FileSystemURL wrong_file_url_;
 };
@@ -131,25 +140,24 @@ TEST_F(FileSystemProviderFileStreamReader, Read_AllAtOnce) {
   EventLogger logger;
 
   const int64 initial_offset = 0;
-  FileStreamReader reader(NULL,
-                          file_url_,
-                          initial_offset,
-                          base::Time::Now());  // Not used yet.
-  scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(kFakeFileSize));
+  FileStreamReader reader(
+      NULL, file_url_, initial_offset, fake_file_.metadata.modification_time);
+  scoped_refptr<net::IOBuffer> io_buffer(
+      new net::IOBuffer(fake_file_.metadata.size));
 
   const int result =
       reader.Read(io_buffer.get(),
-                  kFakeFileSize,
+                  fake_file_.metadata.size,
                   base::Bind(&EventLogger::OnRead, logger.GetWeakPtr()));
   EXPECT_EQ(net::ERR_IO_PENDING, result);
   base::RunLoop().RunUntilIdle();
 
   ASSERT_EQ(1u, logger.results().size());
   EXPECT_LT(0, logger.results()[0]);
-  EXPECT_EQ(kFakeFileSize, static_cast<size_t>(logger.results()[0]));
+  EXPECT_EQ(fake_file_.metadata.size, logger.results()[0]);
 
-  std::string buffer_as_string(io_buffer->data(), kFakeFileSize);
-  EXPECT_EQ(kFakeFileText, buffer_as_string);
+  std::string buffer_as_string(io_buffer->data(), fake_file_.metadata.size);
+  EXPECT_EQ(fake_file_.contents, buffer_as_string);
 }
 
 TEST_F(FileSystemProviderFileStreamReader, Read_WrongFile) {
@@ -159,12 +167,13 @@ TEST_F(FileSystemProviderFileStreamReader, Read_WrongFile) {
   FileStreamReader reader(NULL,
                           wrong_file_url_,
                           initial_offset,
-                          base::Time::Now());  // Not used yet.
-  scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(kFakeFileSize));
+                          fake_file_.metadata.modification_time);
+  scoped_refptr<net::IOBuffer> io_buffer(
+      new net::IOBuffer(fake_file_.metadata.size));
 
   const int result =
       reader.Read(io_buffer.get(),
-                  kFakeFileSize,
+                  fake_file_.metadata.size,
                   base::Bind(&EventLogger::OnRead, logger.GetWeakPtr()));
   EXPECT_EQ(net::ERR_IO_PENDING, result);
   base::RunLoop().RunUntilIdle();
@@ -177,12 +186,10 @@ TEST_F(FileSystemProviderFileStreamReader, Read_InChunks) {
   EventLogger logger;
 
   const int64 initial_offset = 0;
-  FileStreamReader reader(NULL,
-                          file_url_,
-                          initial_offset,
-                          base::Time::Now());  // Not used yet.
+  FileStreamReader reader(
+      NULL, file_url_, initial_offset, fake_file_.metadata.modification_time);
 
-  for (size_t offset = 0; offset < kFakeFileSize; ++offset) {
+  for (int64 offset = 0; offset < fake_file_.metadata.size; ++offset) {
     scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(1));
     const int result =
         reader.Read(io_buffer.get(),
@@ -190,9 +197,9 @@ TEST_F(FileSystemProviderFileStreamReader, Read_InChunks) {
                     base::Bind(&EventLogger::OnRead, logger.GetWeakPtr()));
     EXPECT_EQ(net::ERR_IO_PENDING, result);
     base::RunLoop().RunUntilIdle();
-    ASSERT_EQ(offset + 1u, logger.results().size());
+    ASSERT_EQ(offset + 1, static_cast<int64>(logger.results().size()));
     EXPECT_EQ(1, logger.results()[offset]);
-    EXPECT_EQ(kFakeFileText[offset], io_buffer->data()[0]);
+    EXPECT_EQ(fake_file_.contents[offset], io_buffer->data()[0]);
   }
 }
 
@@ -201,14 +208,12 @@ TEST_F(FileSystemProviderFileStreamReader, Read_Slice) {
 
   // Trim first 3 and last 3 characters.
   const int64 initial_offset = 3;
-  const int length = static_cast<int>(kFakeFileSize) - initial_offset - 3;
-  ASSERT_GT(kFakeFileSize, static_cast<size_t>(initial_offset));
+  const int length = fake_file_.metadata.size - initial_offset - 3;
+  ASSERT_GT(fake_file_.metadata.size, initial_offset);
   ASSERT_LT(0, length);
 
-  FileStreamReader reader(NULL,
-                          file_url_,
-                          initial_offset,
-                          base::Time::Now());  // Not used yet.
+  FileStreamReader reader(
+      NULL, file_url_, initial_offset, fake_file_.metadata.modification_time);
   scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(length));
 
   const int result =
@@ -222,7 +227,8 @@ TEST_F(FileSystemProviderFileStreamReader, Read_Slice) {
   EXPECT_EQ(length, logger.results()[0]);
 
   std::string buffer_as_string(io_buffer->data(), length);
-  std::string expected_buffer(kFakeFileText + initial_offset, length);
+  std::string expected_buffer(fake_file_.contents.data() + initial_offset,
+                              length);
   EXPECT_EQ(expected_buffer, buffer_as_string);
 }
 
@@ -231,12 +237,10 @@ TEST_F(FileSystemProviderFileStreamReader, Read_Beyond) {
 
   // Request reading 1KB more than available.
   const int64 initial_offset = 0;
-  const int length = static_cast<int>(kFakeFileSize) + 1024;
+  const int length = fake_file_.metadata.size + 1024;
 
-  FileStreamReader reader(NULL,
-                          file_url_,
-                          initial_offset,
-                          base::Time::Now());  // Not used yet.
+  FileStreamReader reader(
+      NULL, file_url_, initial_offset, fake_file_.metadata.modification_time);
   scoped_refptr<net::IOBuffer> io_buffer(new net::IOBuffer(length));
 
   const int result =
@@ -248,20 +252,61 @@ TEST_F(FileSystemProviderFileStreamReader, Read_Beyond) {
 
   ASSERT_EQ(1u, logger.results().size());
   EXPECT_LT(0, logger.results()[0]);
-  EXPECT_EQ(kFakeFileSize, static_cast<size_t>(logger.results()[0]));
+  EXPECT_EQ(fake_file_.metadata.size, logger.results()[0]);
+
+  std::string buffer_as_string(io_buffer->data(), fake_file_.metadata.size);
+  EXPECT_EQ(fake_file_.contents, buffer_as_string);
+}
+
+TEST_F(FileSystemProviderFileStreamReader, Read_ModifiedFile) {
+  EventLogger logger;
+
+  const int64 initial_offset = 0;
+  FileStreamReader reader(NULL, file_url_, initial_offset, base::Time::Max());
 
-  std::string buffer_as_string(io_buffer->data(), kFakeFileSize);
-  EXPECT_EQ(kFakeFileText, buffer_as_string);
+  scoped_refptr<net::IOBuffer> io_buffer(
+      new net::IOBuffer(fake_file_.metadata.size));
+  const int result =
+      reader.Read(io_buffer.get(),
+                  fake_file_.metadata.size,
+                  base::Bind(&EventLogger::OnRead, logger.GetWeakPtr()));
+
+  EXPECT_EQ(net::ERR_IO_PENDING, result);
+  base::RunLoop().RunUntilIdle();
+
+  ASSERT_EQ(1u, logger.results().size());
+  EXPECT_EQ(net::ERR_UPLOAD_FILE_CHANGED, logger.results()[0]);
+}
+
+TEST_F(FileSystemProviderFileStreamReader, Read_ExpectedModificationTimeNull) {
+  EventLogger logger;
+
+  const int64 initial_offset = 0;
+  FileStreamReader reader(NULL, file_url_, initial_offset, base::Time());
+
+  scoped_refptr<net::IOBuffer> io_buffer(
+      new net::IOBuffer(fake_file_.metadata.size));
+  const int result =
+      reader.Read(io_buffer.get(),
+                  fake_file_.metadata.size,
+                  base::Bind(&EventLogger::OnRead, logger.GetWeakPtr()));
+
+  EXPECT_EQ(net::ERR_IO_PENDING, result);
+  base::RunLoop().RunUntilIdle();
+
+  ASSERT_EQ(1u, logger.results().size());
+  EXPECT_EQ(fake_file_.metadata.size, logger.results()[0]);
+
+  std::string buffer_as_string(io_buffer->data(), fake_file_.metadata.size);
+  EXPECT_EQ(fake_file_.contents, buffer_as_string);
 }
 
 TEST_F(FileSystemProviderFileStreamReader, GetLength) {
   EventLogger logger;
 
   const int64 initial_offset = 0;
-  FileStreamReader reader(NULL,
-                          file_url_,
-                          initial_offset,
-                          base::Time::Now());  // Not used yet.
+  FileStreamReader reader(
+      NULL, file_url_, initial_offset, fake_file_.metadata.modification_time);
 
   const int result = reader.GetLength(
       base::Bind(&EventLogger::OnGetLength, logger.GetWeakPtr()));
@@ -270,7 +315,7 @@ TEST_F(FileSystemProviderFileStreamReader, GetLength) {
 
   ASSERT_EQ(1u, logger.results().size());
   EXPECT_LT(0, logger.results()[0]);
-  EXPECT_EQ(kFakeFileSize, static_cast<size_t>(logger.results()[0]));
+  EXPECT_EQ(fake_file_.metadata.size, logger.results()[0]);
 }
 
 TEST_F(FileSystemProviderFileStreamReader, GetLength_WrongFile) {
@@ -280,7 +325,7 @@ TEST_F(FileSystemProviderFileStreamReader, GetLength_WrongFile) {
   FileStreamReader reader(NULL,
                           wrong_file_url_,
                           initial_offset,
-                          base::Time::Now());  // Not used yet.
+                          fake_file_.metadata.modification_time);
 
   const int result = reader.GetLength(
       base::Bind(&EventLogger::OnGetLength, logger.GetWeakPtr()));
@@ -291,5 +336,37 @@ TEST_F(FileSystemProviderFileStreamReader, GetLength_WrongFile) {
   EXPECT_EQ(net::ERR_FILE_NOT_FOUND, logger.results()[0]);
 }
 
+TEST_F(FileSystemProviderFileStreamReader, GetLength_ModifiedFile) {
+  EventLogger logger;
+
+  const int64 initial_offset = 0;
+  FileStreamReader reader(NULL, file_url_, initial_offset, base::Time::Max());
+
+  const int result = reader.GetLength(
+      base::Bind(&EventLogger::OnGetLength, logger.GetWeakPtr()));
+  EXPECT_EQ(net::ERR_IO_PENDING, result);
+  base::RunLoop().RunUntilIdle();
+
+  ASSERT_EQ(1u, logger.results().size());
+  EXPECT_EQ(net::ERR_UPLOAD_FILE_CHANGED, logger.results()[0]);
+}
+
+TEST_F(FileSystemProviderFileStreamReader,
+       GetLength_ExpectedModificationTimeNull) {
+  EventLogger logger;
+
+  const int64 initial_offset = 0;
+  FileStreamReader reader(NULL, file_url_, initial_offset, base::Time());
+
+  const int result = reader.GetLength(
+      base::Bind(&EventLogger::OnGetLength, logger.GetWeakPtr()));
+  EXPECT_EQ(net::ERR_IO_PENDING, result);
+  base::RunLoop().RunUntilIdle();
+
+  ASSERT_EQ(1u, logger.results().size());
+  EXPECT_LT(0, logger.results()[0]);
+  EXPECT_EQ(fake_file_.metadata.size, logger.results()[0]);
+}
+
 }  // namespace file_system_provider
 }  // namespace chromeos