// 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"
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();
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_;
};
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) {
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();
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(),
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]);
}
}
// 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 =
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);
}
// 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 =
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()));
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) {
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()));
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