| Index: net/base/file_stream_unittest.cc
|
| diff --git a/net/base/file_stream_unittest.cc b/net/base/file_stream_unittest.cc
|
| index c76f3d939aca9fdd713aacc99308cdb82cd66fdd..e721569b4782604ac3e1542e4d15cf89da6b6921 100644
|
| --- a/net/base/file_stream_unittest.cc
|
| +++ b/net/base/file_stream_unittest.cc
|
| @@ -21,6 +21,10 @@
|
| #include "testing/gtest/include/gtest/gtest.h"
|
| #include "testing/platform_test.h"
|
|
|
| +#if defined(OS_ANDROID)
|
| +#include "base/test/test_file_util.h"
|
| +#endif
|
| +
|
| namespace net {
|
|
|
| namespace {
|
| @@ -1173,6 +1177,55 @@ TEST_F(FileStreamTest, AsyncReadError) {
|
| base::ClosePlatformFile(file);
|
| }
|
|
|
| +#if defined(OS_ANDROID)
|
| +TEST_F(FileStreamTest, ContentUriAsyncRead) {
|
| + base::FilePath test_dir;
|
| + PathService::Get(base::DIR_SOURCE_ROOT, &test_dir);
|
| + test_dir = test_dir.AppendASCII("net");
|
| + test_dir = test_dir.AppendASCII("data");
|
| + test_dir = test_dir.AppendASCII("file_stream_unittest");
|
| + ASSERT_TRUE(base::PathExists(test_dir));
|
| + base::FilePath image_file = test_dir.Append(FILE_PATH_LITERAL("red.png"));
|
| +
|
| + // Insert the image into MediaStore. MediaStore will do some conversions, and
|
| + // return the content URI.
|
| + base::FilePath path = file_util::InsertImageIntoMediaStore(image_file);
|
| + EXPECT_TRUE(path.IsContentUri());
|
| + EXPECT_TRUE(base::PathExists(path));
|
| + int64 file_size;
|
| + EXPECT_TRUE(file_util::GetFileSize(path, &file_size));
|
| + EXPECT_LT(0, file_size);
|
| +
|
| + FileStream stream(NULL, base::MessageLoopProxy::current());
|
| + int flags = base::PLATFORM_FILE_OPEN |
|
| + base::PLATFORM_FILE_READ |
|
| + base::PLATFORM_FILE_ASYNC;
|
| + TestCompletionCallback callback;
|
| + int rv = stream.Open(path, flags, callback.callback());
|
| + EXPECT_EQ(ERR_IO_PENDING, rv);
|
| + EXPECT_EQ(OK, callback.WaitForResult());
|
| +
|
| + int64 total_bytes_avail = stream.Available();
|
| + EXPECT_EQ(file_size, total_bytes_avail);
|
| +
|
| + int total_bytes_read = 0;
|
| +
|
| + std::string data_read;
|
| + for (;;) {
|
| + scoped_refptr<IOBufferWithSize> buf = new IOBufferWithSize(4);
|
| + rv = stream.Read(buf.get(), buf->size(), callback.callback());
|
| + if (rv == ERR_IO_PENDING)
|
| + rv = callback.WaitForResult();
|
| + EXPECT_LE(0, rv);
|
| + if (rv <= 0)
|
| + break;
|
| + total_bytes_read += rv;
|
| + data_read.append(buf->data(), rv);
|
| + }
|
| + EXPECT_EQ(file_size, total_bytes_read);
|
| +}
|
| +#endif
|
| +
|
| } // namespace
|
|
|
| } // namespace net
|
|
|