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

Unified Diff: net/url_request/url_fetcher_impl_unittest.cc

Issue 1094553002: Revert "Speculative revert by sheriff" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 8 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
« no previous file with comments | « media/tools/player_x11/x11_video_renderer.cc ('k') | net/url_request/url_request_test_util.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/url_request/url_fetcher_impl_unittest.cc
diff --git a/net/url_request/url_fetcher_impl_unittest.cc b/net/url_request/url_fetcher_impl_unittest.cc
index 3bf1a369169865c82933fb01157a96f784a76972..121251962b7191ecfddcf663d4f79bbf05d3dfc6 100644
--- a/net/url_request/url_fetcher_impl_unittest.cc
+++ b/net/url_request/url_fetcher_impl_unittest.cc
@@ -200,6 +200,58 @@ class URLFetcherTest : public testing::Test,
return num_upload_streams_created_;
}
+ // Downloads |file_to_fetch| and checks the contents when done. If
+ // |save_to_temporary_file| is true, saves it to a temporary file, and
+ // |requested_out_path| is ignored. Otherwise, saves it to
+ // |requested_out_path|. Takes ownership of the file if |take_ownership| is
+ // true. Deletes file when done.
+ void SaveFileTest(const char* file_to_fetch,
+ bool save_to_temporary_file,
+ const base::FilePath& requested_out_path,
+ bool take_ownership) {
+ scoped_ptr<WaitingURLFetcherDelegate> delegate(
+ new WaitingURLFetcherDelegate());
+ delegate->CreateFetcherWithContext(
+ test_server_->GetURL(std::string(kTestServerFilePrefix) +
+ file_to_fetch),
+ URLFetcher::GET, request_context());
+ if (save_to_temporary_file) {
+ delegate->fetcher()->SaveResponseToTemporaryFile(
+ scoped_refptr<base::MessageLoopProxy>(
+ base::MessageLoopProxy::current()));
+ } else {
+ delegate->fetcher()->SaveResponseToFileAtPath(
+ requested_out_path, scoped_refptr<base::MessageLoopProxy>(
+ base::MessageLoopProxy::current()));
+ }
+ delegate->StartFetcherAndWait();
+
+ EXPECT_TRUE(delegate->fetcher()->GetStatus().is_success());
+ EXPECT_EQ(200, delegate->fetcher()->GetResponseCode());
+
+ base::FilePath out_path;
+ EXPECT_TRUE(
+ delegate->fetcher()->GetResponseAsFilePath(take_ownership, &out_path));
+ if (!save_to_temporary_file) {
+ EXPECT_EQ(requested_out_path, out_path);
+ }
+
+ EXPECT_TRUE(base::ContentsEqual(
+ test_server_->GetDocumentRoot().AppendASCII(file_to_fetch), out_path));
+
+ // Delete the delegate and run the message loop to give the fetcher's
+ // destructor a chance to delete the file.
+ delegate.reset();
+ base::RunLoop().RunUntilIdle();
+
+ // File should only exist if |take_ownership| was true.
+ EXPECT_EQ(take_ownership, base::PathExists(out_path));
+
+ // Cleanup.
+ if (base::PathExists(out_path))
+ base::DeleteFile(out_path, false);
+ }
+
// Returns a URL that hangs on DNS resolution. Only hangs when using the
// request context returned by request_context().
const GURL& hanging_url() const { return hanging_url_; }
@@ -464,30 +516,6 @@ class URLFetcherMultipleAttemptTest : public URLFetcherTest {
std::string data_;
};
-class URLFetcherFileTest : public URLFetcherTest {
- public:
- URLFetcherFileTest() : take_ownership_of_file_(false),
- expected_file_error_(OK) {}
-
- void CreateFetcherForFile(const GURL& url, const base::FilePath& file_path);
- void CreateFetcherForTempFile(const GURL& url);
-
- // URLFetcherDelegate:
- void OnURLFetchComplete(const URLFetcher* source) override;
-
- protected:
- base::FilePath expected_file_;
- base::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_file_;
-
- // Expected file error code for the test. OK when expecting success.
- int expected_file_error_;
-};
-
void URLFetcherDownloadProgressTest::CreateFetcher(const GURL& url) {
fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this);
fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter(
@@ -637,44 +665,6 @@ void URLFetcherMultipleAttemptTest::OnURLFetchComplete(
}
}
-void URLFetcherFileTest::CreateFetcherForFile(const GURL& url,
- const base::FilePath& file_path) {
- fetcher_ = new URLFetcherImpl(url, URLFetcher::GET, this);
- fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter(
- io_message_loop_proxy().get(), request_context()));
-
- // 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, URLFetcher::GET, this);
- fetcher_->SetRequestContext(new ThrottlingTestURLRequestContextGetter(
- io_message_loop_proxy().get(), request_context()));
-
- // Use the IO message loop to do the file operations in this test.
- fetcher_->SaveResponseToTemporaryFile(io_message_loop_proxy());
- fetcher_->Start();
-}
-
-void URLFetcherFileTest::OnURLFetchComplete(const URLFetcher* source) {
- if (expected_file_error_ == OK) {
- EXPECT_TRUE(source->GetStatus().is_success());
- EXPECT_EQ(OK, source->GetStatus().error());
- EXPECT_EQ(200, source->GetResponseCode());
-
- EXPECT_TRUE(source->GetResponseAsFilePath(
- take_ownership_of_file_, &file_path_));
-
- EXPECT_TRUE(base::ContentsEqual(expected_file_, file_path_));
- } else {
- EXPECT_FALSE(source->GetStatus().is_success());
- EXPECT_EQ(expected_file_error_, source->GetStatus().error());
- }
- CleanupAfterFetchComplete();
-}
-
// Create the fetcher on the main thread. Since network IO will happen on the
// main thread, this will test URLFetcher's ability to do everything on one
// thread.
@@ -1202,149 +1192,93 @@ TEST_F(URLFetcherMultipleAttemptTest, SameData) {
base::MessageLoop::current()->Run();
}
-TEST_F(URLFetcherFileTest, SmallGet) {
+// Get a small file.
+TEST_F(URLFetcherTest, FileTestSmallGet) {
+ const char kFileToFetch[] = "simple.html";
+
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
-
- // Get a small file.
- static const char kFileToFetch[] = "simple.html";
- expected_file_ = test_server_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
- temp_dir.path().AppendASCII(kFileToFetch));
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
-
- ASSERT_FALSE(base::PathExists(file_path_))
- << file_path_.value() << " not removed.";
+ base::FilePath out_path = temp_dir.path().AppendASCII(kFileToFetch);
+ SaveFileTest(kFileToFetch, false, out_path, false);
}
-TEST_F(URLFetcherFileTest, LargeGet) {
+// Get a file large enough to require more than one read into URLFetcher::Core's
+// IOBuffer.
+TEST_F(URLFetcherTest, FileTestLargeGet) {
+ const char kFileToFetch[] = "animate1.gif";
+
base::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_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
- temp_dir.path().AppendASCII(kFileToFetch));
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+ base::FilePath out_path = temp_dir.path().AppendASCII(kFileToFetch);
+ SaveFileTest(kFileToFetch, false, out_path, false);
}
-TEST_F(URLFetcherFileTest, SavedOutputFileOwnerhisp) {
- // If the caller takes the ownership of the output file, the file should
- // persist even after URLFetcher is gone. If not, the file must be deleted.
- const bool kTake[] = {false, true};
- for (size_t i = 0; i < arraysize(kTake); ++i) {
- take_ownership_of_file_ = kTake[i];
- base::ScopedTempDir temp_dir;
- ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
-
- // Get a small file.
- static const char kFileToFetch[] = "simple.html";
- expected_file_ = test_server_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
- temp_dir.path().AppendASCII(kFileToFetch));
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
-
- base::MessageLoop::current()->RunUntilIdle();
- ASSERT_EQ(kTake[i], base::PathExists(file_path_)) <<
- "FilePath: " << file_path_.value();
- }
+// If the caller takes the ownership of the output file, the file should persist
+// even after URLFetcher is gone.
+TEST_F(URLFetcherTest, FileTestTakeOwnership) {
+ const char kFileToFetch[] = "simple.html";
+
+ base::ScopedTempDir temp_dir;
+ ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
+ base::FilePath out_path = temp_dir.path().AppendASCII(kFileToFetch);
+ SaveFileTest(kFileToFetch, false, out_path, true);
}
-TEST_F(URLFetcherFileTest, OverwriteExistingFile) {
+// Test that an existing file can be overwritten be a fetcher.
+TEST_F(URLFetcherTest, FileTestOverwriteExisting) {
base::ScopedTempDir temp_dir;
ASSERT_TRUE(temp_dir.CreateUniqueTempDir());
// Create a file before trying to fetch.
- static const char kFileToFetch[] = "simple.html";
+ const char kFileToFetch[] = "simple.html";
std::string data(10000, '?'); // Meant to be larger than simple.html.
- file_path_ = temp_dir.path().AppendASCII(kFileToFetch);
+ base::FilePath out_path = temp_dir.path().AppendASCII(kFileToFetch);
ASSERT_EQ(static_cast<int>(data.size()),
- base::WriteFile(file_path_, data.data(), data.size()));
- ASSERT_TRUE(base::PathExists(file_path_));
- expected_file_ = test_server_->GetDocumentRoot().AppendASCII(kFileToFetch);
- ASSERT_FALSE(base::ContentsEqual(file_path_, expected_file_));
+ base::WriteFile(out_path, data.data(), data.size()));
+ ASSERT_TRUE(base::PathExists(out_path));
- // Get a small file.
- CreateFetcherForFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
- file_path_);
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+ SaveFileTest(kFileToFetch, false, out_path, true);
}
-TEST_F(URLFetcherFileTest, TryToOverwriteDirectory) {
+// Test trying to overwrite a directory with a file when using a fetcher fails.
+TEST_F(URLFetcherTest, FileTestTryToOverwriteDirectory) {
base::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(base::CreateDirectory(file_path_));
- ASSERT_TRUE(base::PathExists(file_path_));
-
- // Get a small file.
- expected_file_error_ = ERR_ACCESS_DENIED;
- expected_file_ = test_server_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
- file_path_);
+ base::FilePath out_path = temp_dir.path().AppendASCII(kFileToFetch);
+ ASSERT_TRUE(base::CreateDirectory(out_path));
+ ASSERT_TRUE(base::PathExists(out_path));
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+ WaitingURLFetcherDelegate delegate;
+ delegate.CreateFetcherWithContext(
+ test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
+ URLFetcher::GET, request_context());
+ delegate.fetcher()->SaveResponseToFileAtPath(
+ out_path,
+ scoped_refptr<base::MessageLoopProxy>(base::MessageLoopProxy::current()));
+ delegate.StartFetcherAndWait();
- base::MessageLoop::current()->RunUntilIdle();
+ EXPECT_FALSE(delegate.fetcher()->GetStatus().is_success());
+ EXPECT_EQ(ERR_ACCESS_DENIED, delegate.fetcher()->GetStatus().error());
}
-TEST_F(URLFetcherFileTest, SmallGetToTempFile) {
- // Get a small file.
- static const char kFileToFetch[] = "simple.html";
- expected_file_ = test_server_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForTempFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch));
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
-
- ASSERT_FALSE(base::PathExists(file_path_))
- << file_path_.value() << " not removed.";
+// Get a small file and save it to a temp file.
+TEST_F(URLFetcherTest, TempFileTestSmallGet) {
+ SaveFileTest("simple.html", true, base::FilePath(), false);
}
-TEST_F(URLFetcherFileTest, LargeGetToTempFile) {
- // 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_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForTempFile(
- test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch));
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
+// Get a file large enough to require more than one read into URLFetcher::Core's
+// IOBuffer and save it to a temp file.
+TEST_F(URLFetcherTest, TempFileTestLargeGet) {
+ SaveFileTest("animate1.gif", true, base::FilePath(), false);
}
-TEST_F(URLFetcherFileTest, SavedOutputTempFileOwnerhisp) {
- // If the caller takes the ownership of the temp file, the file should persist
- // even after URLFetcher is gone. If not, the file must be deleted.
- const bool kTake[] = {false, true};
- for (size_t i = 0; i < arraysize(kTake); ++i) {
- take_ownership_of_file_ = kTake[i];
-
- // Get a small file.
- static const char kFileToFetch[] = "simple.html";
- expected_file_ = test_server_->GetDocumentRoot().AppendASCII(kFileToFetch);
- CreateFetcherForTempFile(test_server_->GetURL(
- std::string(kTestServerFilePrefix) + kFileToFetch));
-
- base::MessageLoop::current()->Run(); // OnURLFetchComplete() will Quit().
-
- base::MessageLoop::current()->RunUntilIdle();
- ASSERT_EQ(kTake[i], base::PathExists(file_path_)) <<
- "FilePath: " << file_path_.value();
- }
+// If the caller takes the ownership of the temp file, check that the file
+// persists even after URLFetcher is gone.
+TEST_F(URLFetcherTest, TempFileTestTakeOwnership) {
+ SaveFileTest("simple.html", true, base::FilePath(), true);
}
} // namespace
« no previous file with comments | « media/tools/player_x11/x11_video_renderer.cc ('k') | net/url_request/url_request_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698