Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(705)

Unified Diff: content/common/net/url_fetcher_impl_unittest.cc

Issue 9585009: Add URLFetcher::SaveResponseToFileAtPath (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixed nits Created 8 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: content/common/net/url_fetcher_impl_unittest.cc
diff --git a/content/common/net/url_fetcher_impl_unittest.cc b/content/common/net/url_fetcher_impl_unittest.cc
index 8b722a410932de8ed80c7953e34ddd3517251bad..c113de59910c85320f0efec25e37cd70fd19a80b 100644
--- a/content/common/net/url_fetcher_impl_unittest.cc
+++ b/content/common/net/url_fetcher_impl_unittest.cc
@@ -6,6 +6,7 @@
#include "base/bind.h"
#include "base/message_loop_proxy.h"
+#include "base/scoped_temp_dir.h"
#include "base/synchronization/waitable_event.h"
#include "base/threading/thread.h"
#include "build/build_config.h"
@@ -256,26 +257,29 @@ class URLFetcherMultipleAttemptTest : public URLFetcherTest {
std::string data_;
};
-class URLFetcherTempFileTest : public URLFetcherTest {
+class URLFetcherFileTest : public URLFetcherTest {
public:
- URLFetcherTempFileTest()
- : take_ownership_of_temp_file_(false) {
- }
+ URLFetcherFileTest() : take_ownership_of_file_(false),
+ expected_file_error_(base::PLATFORM_FILE_OK) {}
- // URLFetcherTest override.
- virtual void CreateFetcher(const GURL& url) OVERRIDE;
+ void CreateFetcherForFile(const GURL& url, const FilePath& file_path);
+ void CreateFetcherForTempFile(const GURL& url);
// content::URLFetcherDelegate
virtual void OnURLFetchComplete(const content::URLFetcher* source) OVERRIDE;
protected:
FilePath expected_file_;
- FilePath temp_file_;
+ FilePath file_path_;
// Set by the test. Used in OnURLFetchComplete() to decide if
// the URLFetcher should own the temp file, so that we can test
// disowning prevents the file from being deleted.
- bool take_ownership_of_temp_file_;
+ bool take_ownership_of_file_;
+
+ // Expected file error code for the test.
+ // PLATFORM_FILE_OK when expecting success.
+ base::PlatformFileError expected_file_error_;
};
void URLFetcherPostTest::CreateFetcher(const GURL& url) {
@@ -506,7 +510,18 @@ void URLFetcherMultipleAttemptTest::OnURLFetchComplete(
}
}
-void URLFetcherTempFileTest::CreateFetcher(const GURL& url) {
+void URLFetcherFileTest::CreateFetcherForFile(const GURL& url,
+ const FilePath& file_path) {
+ fetcher_ = new URLFetcherImpl(url, content::URLFetcher::GET, this);
+ fetcher_->SetRequestContext(new TestURLRequestContextGetter(
+ io_message_loop_proxy()));
+
+ // Use the IO message loop to do the file operations in this test.
+ fetcher_->SaveResponseToFileAtPath(file_path, io_message_loop_proxy());
+ fetcher_->Start();
+}
+
+void URLFetcherFileTest::CreateFetcherForTempFile(const GURL& url) {
fetcher_ = new URLFetcherImpl(url, content::URLFetcher::GET, this);
fetcher_->SetRequestContext(new TestURLRequestContextGetter(
io_message_loop_proxy()));
@@ -516,16 +531,23 @@ void URLFetcherTempFileTest::CreateFetcher(const GURL& url) {
fetcher_->Start();
}
-void URLFetcherTempFileTest::OnURLFetchComplete(
- const content::URLFetcher* source) {
- EXPECT_TRUE(source->GetStatus().is_success());
- EXPECT_EQ(source->GetResponseCode(), 200);
+void URLFetcherFileTest::OnURLFetchComplete(const content::URLFetcher* source) {
+ if (expected_file_error_ == base::PLATFORM_FILE_OK) {
+ EXPECT_TRUE(source->GetStatus().is_success());
+ EXPECT_EQ(source->GetResponseCode(), 200);
- EXPECT_TRUE(source->GetResponseAsFilePath(
- take_ownership_of_temp_file_, &temp_file_));
+ base::PlatformFileError error_code = base::PLATFORM_FILE_OK;
+ EXPECT_FALSE(fetcher_->FileErrorOccurred(&error_code));
- EXPECT_TRUE(file_util::ContentsEqual(expected_file_, temp_file_));
+ EXPECT_TRUE(source->GetResponseAsFilePath(
+ take_ownership_of_file_, &file_path_));
+ EXPECT_TRUE(file_util::ContentsEqual(expected_file_, file_path_));
+ } else {
+ base::PlatformFileError error_code = base::PLATFORM_FILE_OK;
+ EXPECT_TRUE(fetcher_->FileErrorOccurred(&error_code));
+ EXPECT_EQ(expected_file_error_, error_code);
+ }
delete fetcher_;
io_message_loop_proxy()->PostTask(FROM_HERE, MessageLoop::QuitClosure());
@@ -849,25 +871,145 @@ TEST_F(URLFetcherMultipleAttemptTest, SameData) {
MessageLoop::current()->Run();
}
-TEST_F(URLFetcherTempFileTest, SmallGet) {
+TEST_F(URLFetcherFileTest, SmallGet) {
net::TestServer test_server(net::TestServer::TYPE_HTTP,
net::TestServer::kLocalhost,
FilePath(kDocRoot));
ASSERT_TRUE(test_server.Start());
+ ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
// Get a small file.
static const char kFileToFetch[] = "simple.html";
expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
- CreateFetcher(
+ CreateFetcherForFile(
+ test_server.GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
+ temp_dir.path().AppendASCII(kFileToFetch));
+
+ MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+
+ ASSERT_FALSE(file_util::PathExists(file_path_))
+ << file_path_.value() << " not removed.";
+}
+
+TEST_F(URLFetcherFileTest, LargeGet) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP,
+ net::TestServer::kLocalhost,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+
+ ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+ // Get a file large enough to require more than one read into
+ // URLFetcher::Core's IOBuffer.
+ static const char kFileToFetch[] = "animate1.gif";
+ expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
+ CreateFetcherForFile(
+ test_server.GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
+ temp_dir.path().AppendASCII(kFileToFetch));
+
+ MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+}
+
+TEST_F(URLFetcherFileTest, CanTakeOwnershipOfFile) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP,
+ net::TestServer::kLocalhost,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+
+ ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+ // Get a small file.
+ static const char kFileToFetch[] = "simple.html";
+ expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
+ CreateFetcherForFile(
+ test_server.GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
+ temp_dir.path().AppendASCII(kFileToFetch));
+
+ MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+
+ MessageLoop::current()->RunAllPending();
+ ASSERT_FALSE(file_util::PathExists(file_path_))
+ << file_path_.value() << " not removed.";
+}
+
+
+TEST_F(URLFetcherFileTest, OverwriteExistingFile) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP,
+ net::TestServer::kLocalhost,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+
+ ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+ // Create a file before trying to fetch.
+ static const char kFileToFetch[] = "simple.html";
+ const char data[] = "abcdefghijklmnopqrstuvwxyz";
willchan no longer on Chromium 2012/03/08 16:38:39 kData and static?
hashimoto 2012/03/09 03:22:52 Done.
+ const int data_size = sizeof(data);
willchan no longer on Chromium 2012/03/08 16:38:39 arraysize
hashimoto 2012/03/09 03:22:52 Done.
+ file_path_ = temp_dir.path().AppendASCII(kFileToFetch);
+ ASSERT_EQ(file_util::WriteFile(file_path_, data, data_size), data_size);
+ ASSERT_TRUE(file_util::PathExists(file_path_));
+ expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
+ ASSERT_FALSE(file_util::ContentsEqual(file_path_, expected_file_));
+
+ // Get a small file.
+ CreateFetcherForFile(
+ test_server.GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
+ file_path_);
+
+ MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+}
+
+TEST_F(URLFetcherFileTest, TryToOverwriteDirectory) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP,
+ net::TestServer::kLocalhost,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+
+ ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+
+ // Create a directory before trying to fetch.
+ static const char kFileToFetch[] = "simple.html";
+ file_path_ = temp_dir.path().AppendASCII(kFileToFetch);
+ ASSERT_TRUE(file_util::CreateDirectory(file_path_));
+ ASSERT_TRUE(file_util::PathExists(file_path_));
+
+ // Get a small file.
+ expected_file_error_ = base::PLATFORM_FILE_ERROR_ACCESS_DENIED;
+ expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
+ CreateFetcherForFile(
+ test_server.GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
+ file_path_);
+
+ MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+
+ MessageLoop::current()->RunAllPending();
+}
+
+TEST_F(URLFetcherFileTest, SmallGetToTempFile) {
+ net::TestServer test_server(net::TestServer::TYPE_HTTP,
+ net::TestServer::kLocalhost,
+ FilePath(kDocRoot));
+ ASSERT_TRUE(test_server.Start());
+
+ // Get a small file.
+ static const char kFileToFetch[] = "simple.html";
+ expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
+ CreateFetcherForTempFile(
test_server.GetURL(std::string(kTestServerFilePrefix) + kFileToFetch));
MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
- ASSERT_FALSE(file_util::PathExists(temp_file_))
- << temp_file_.value() << " not removed.";
+ ASSERT_FALSE(file_util::PathExists(file_path_))
+ << file_path_.value() << " not removed.";
}
-TEST_F(URLFetcherTempFileTest, LargeGet) {
+TEST_F(URLFetcherFileTest, LargeGetToTempFile) {
net::TestServer test_server(net::TestServer::TYPE_HTTP,
net::TestServer::kLocalhost,
FilePath(kDocRoot));
@@ -877,13 +1019,13 @@ TEST_F(URLFetcherTempFileTest, LargeGet) {
// URLFetcher::Core's IOBuffer.
static const char kFileToFetch[] = "animate1.gif";
expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
- CreateFetcher(test_server.GetURL(
+ CreateFetcherForTempFile(test_server.GetURL(
std::string(kTestServerFilePrefix) + kFileToFetch));
MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
}
-TEST_F(URLFetcherTempFileTest, CanTakeOwnershipOfFile) {
+TEST_F(URLFetcherFileTest, CanTakeOwnershipOfTempFile) {
net::TestServer test_server(net::TestServer::TYPE_HTTP,
net::TestServer::kLocalhost,
FilePath(kDocRoot));
@@ -892,14 +1034,14 @@ TEST_F(URLFetcherTempFileTest, CanTakeOwnershipOfFile) {
// Get a small file.
static const char kFileToFetch[] = "simple.html";
expected_file_ = test_server.document_root().AppendASCII(kFileToFetch);
- CreateFetcher(test_server.GetURL(
+ CreateFetcherForTempFile(test_server.GetURL(
std::string(kTestServerFilePrefix) + kFileToFetch));
MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
MessageLoop::current()->RunAllPending();
- ASSERT_FALSE(file_util::PathExists(temp_file_))
- << temp_file_.value() << " not removed.";
+ ASSERT_FALSE(file_util::PathExists(file_path_))
+ << file_path_.value() << " not removed.";
}
} // namespace.

Powered by Google App Engine
This is Rietveld 408576698