summaryrefslogtreecommitdiffstats
path: root/net/url_request/url_request_file_dir_job_unittest.cc
diff options
context:
space:
mode:
Diffstat (limited to 'net/url_request/url_request_file_dir_job_unittest.cc')
-rw-r--r--net/url_request/url_request_file_dir_job_unittest.cc119
1 files changed, 119 insertions, 0 deletions
diff --git a/net/url_request/url_request_file_dir_job_unittest.cc b/net/url_request/url_request_file_dir_job_unittest.cc
index 3ff0b62..5701b3e 100644
--- a/net/url_request/url_request_file_dir_job_unittest.cc
+++ b/net/url_request/url_request_file_dir_job_unittest.cc
@@ -7,6 +7,7 @@
#include <string>
#include "base/files/file_path.h"
+#include "base/files/file_util.h"
#include "base/files/scoped_temp_dir.h"
#include "base/macros.h"
#include "base/memory/ref_counted.h"
@@ -128,6 +129,124 @@ TEST_F(URLRequestFileDirTest, ListCompletionOnNoPending) {
EXPECT_EQ(ERR_FILE_NOT_FOUND, request->status().ToNetError());
}
+// Test the case where reading the response completes synchronously.
+TEST_F(URLRequestFileDirTest, DirectoryWithASingleFileSync) {
+ base::ScopedTempDir directory;
+ ASSERT_TRUE(directory.CreateUniqueTempDir());
+ base::FilePath path;
+ base::CreateTemporaryFileInDir(directory.path(), &path);
+
+ TestJobFactory factory(directory.path());
+ context_.set_job_factory(&factory);
+
+ scoped_ptr<URLRequest> request(context_.CreateRequest(
+ FilePathToFileURL(path), DEFAULT_PRIORITY, &delegate_));
+ request->Start();
+ EXPECT_TRUE(request->is_pending());
+
+ // Since the DirectoryLister is running on the network thread, this will spin
+ // the message loop until the URLRequetsFileDirJob has received the
+ // entire directory listing and cached it.
+ base::RunLoop().RunUntilIdle();
+
+ int bytes_read = 0;
+ // This will complete synchronously, since the URLRequetsFileDirJob had
+ // directory listing cached in memory.
+ EXPECT_TRUE(request->Read(buffer_.get(), kBufferSize, &bytes_read));
+
+ EXPECT_EQ(URLRequestStatus::SUCCESS, request->status().status());
+
+ ASSERT_GT(bytes_read, 0);
+ ASSERT_LE(bytes_read, kBufferSize);
+ std::string data(buffer_->data(), bytes_read);
+ EXPECT_TRUE(data.find(directory.path().BaseName().MaybeAsASCII()) !=
+ std::string::npos);
+ EXPECT_TRUE(data.find(path.BaseName().MaybeAsASCII()) != std::string::npos);
+}
+
+// Test the case where reading the response completes asynchronously.
+TEST_F(URLRequestFileDirTest, DirectoryWithASingleFileAsync) {
+ base::ScopedTempDir directory;
+ ASSERT_TRUE(directory.CreateUniqueTempDir());
+ base::FilePath path;
+ base::CreateTemporaryFileInDir(directory.path(), &path);
+
+ TestJobFactory factory(directory.path());
+ context_.set_job_factory(&factory);
+
+ TestDelegate delegate;
+ scoped_ptr<URLRequest> request(context_.CreateRequest(
+ FilePathToFileURL(path), DEFAULT_PRIORITY, &delegate));
+ request->Start();
+ EXPECT_TRUE(request->is_pending());
+
+ base::RunLoop().Run();
+
+ ASSERT_GT(delegate.bytes_received(), 0);
+ ASSERT_LE(delegate.bytes_received(), kBufferSize);
+ EXPECT_TRUE(delegate.data_received().find(
+ directory.path().BaseName().MaybeAsASCII()) !=
+ std::string::npos);
+ EXPECT_TRUE(delegate.data_received().find(path.BaseName().MaybeAsASCII()) !=
+ std::string::npos);
+}
+
+TEST_F(URLRequestFileDirTest, DirectoryWithAFileAndSubdirectory) {
+ base::ScopedTempDir directory;
+ ASSERT_TRUE(directory.CreateUniqueTempDir());
+
+ base::FilePath sub_dir;
+ CreateTemporaryDirInDir(directory.path(),
+ FILE_PATH_LITERAL("CreateNewSubDirectoryInDirectory"),
+ &sub_dir);
+
+ base::FilePath path;
+ base::CreateTemporaryFileInDir(directory.path(), &path);
+
+ TestJobFactory factory(directory.path());
+ context_.set_job_factory(&factory);
+
+ TestDelegate delegate;
+ scoped_ptr<URLRequest> request(context_.CreateRequest(
+ FilePathToFileURL(path), DEFAULT_PRIORITY, &delegate));
+ request->Start();
+ EXPECT_TRUE(request->is_pending());
+
+ base::RunLoop().Run();
+
+ ASSERT_GT(delegate.bytes_received(), 0);
+ ASSERT_LE(delegate.bytes_received(), kBufferSize);
+ EXPECT_TRUE(delegate.data_received().find(
+ directory.path().BaseName().MaybeAsASCII()) !=
+ std::string::npos);
+ EXPECT_TRUE(delegate.data_received().find(
+ sub_dir.BaseName().MaybeAsASCII()) != std::string::npos);
+ EXPECT_TRUE(delegate.data_received().find(path.BaseName().MaybeAsASCII()) !=
+ std::string::npos);
+}
+
+TEST_F(URLRequestFileDirTest, EmptyDirectory) {
+ base::ScopedTempDir directory;
+ ASSERT_TRUE(directory.CreateUniqueTempDir());
+
+ TestJobFactory factory(directory.path());
+ context_.set_job_factory(&factory);
+
+ TestDelegate delegate;
+ scoped_ptr<URLRequest> request(context_.CreateRequest(
+ FilePathToFileURL(directory.path()), DEFAULT_PRIORITY, &delegate));
+ request->Start();
+ EXPECT_TRUE(request->is_pending());
+
+ base::RunLoop().Run();
+
+ ASSERT_GT(delegate.bytes_received(), 0);
+ ASSERT_LE(delegate.bytes_received(), kBufferSize);
+ EXPECT_TRUE(delegate.data_received().find(
+ directory.path().BaseName().MaybeAsASCII()) !=
+ std::string::npos);
+}
+
} // namespace
} // namespace net