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

Unified Diff: net/url_request/url_fetcher_response_writer_unittest.cc

Issue 2425673006: Make URLFetcherFileWriter::Finish() skip closing file when there is an error (Closed)
Patch Set: Fix another subclass Created 4 years, 2 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: net/url_request/url_fetcher_response_writer_unittest.cc
diff --git a/net/url_request/url_fetcher_response_writer_unittest.cc b/net/url_request/url_fetcher_response_writer_unittest.cc
index 54763187cc0a16e24fec480ef3078a668e5eeb08..8bd362fc200dd3e2bec08a5cea629654658f1cf9 100644
--- a/net/url_request/url_fetcher_response_writer_unittest.cc
+++ b/net/url_request/url_fetcher_response_writer_unittest.cc
@@ -44,7 +44,7 @@ TEST_F(URLFetcherStringWriterTest, Basic) {
EXPECT_THAT(callback.GetResult(rv), IsOk());
rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
EXPECT_EQ(buf_->size(), callback.GetResult(rv));
- rv = writer_->Finish(callback.callback());
+ rv = writer_->Finish(OK, callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
// Verify the result.
@@ -80,7 +80,7 @@ TEST_F(URLFetcherFileWriterTest, WriteToFile) {
EXPECT_THAT(callback.GetResult(rv), IsOk());
rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
EXPECT_EQ(buf_->size(), callback.GetResult(rv));
- rv = writer_->Finish(callback.callback());
+ rv = writer_->Finish(OK, callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
// Verify the result.
@@ -103,7 +103,7 @@ TEST_F(URLFetcherFileWriterTest, InitializeAgain) {
EXPECT_THAT(callback.GetResult(rv), IsOk());
rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
EXPECT_EQ(buf_->size(), callback.GetResult(rv));
- rv = writer_->Finish(callback.callback());
+ rv = writer_->Finish(OK, callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
// Verify the result.
@@ -119,7 +119,7 @@ TEST_F(URLFetcherFileWriterTest, InitializeAgain) {
EXPECT_THAT(callback.GetResult(rv), IsOk());
rv = writer_->Write(buf2.get(), buf2->size(), callback.callback());
EXPECT_EQ(buf2->size(), callback.GetResult(rv));
- rv = writer_->Finish(callback.callback());
+ rv = writer_->Finish(OK, callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
// Verify the result.
@@ -128,13 +128,72 @@ TEST_F(URLFetcherFileWriterTest, InitializeAgain) {
EXPECT_EQ(data2, file_contents);
}
+TEST_F(URLFetcherFileWriterTest, FinishWhileWritePending) {
+ int rv = 0;
+ // Initialize(), Write() and Finish().
+ TestCompletionCallback callback;
+ rv = writer_->Initialize(callback.callback());
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ TestCompletionCallback callback2;
+ rv = writer_->Write(buf_.get(), buf_->size(), callback2.callback());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ TestCompletionCallback callback3;
+ rv = writer_->Finish(ERR_FAILED, callback3.callback());
+ EXPECT_EQ(OK, rv);
+
+ // Write() should finish asynchronously.
+ EXPECT_THAT(callback2.GetResult(rv), IsOk());
mmenke 2016/10/19 14:18:40 I don't think we want the callback to be invoked h
xunjieli 2016/10/19 15:19:28 Done. Changed implementation to cancel pending cal
+ base::RunLoop().RunUntilIdle();
+ // Verify the result.
+ EXPECT_FALSE(base::PathExists(file_path_));
+}
+
+TEST_F(URLFetcherFileWriterTest, FinishWhileOpenPending) {
+ int rv = 0;
+ // Initialize() and Finish().
+ TestCompletionCallback callback;
+ rv = writer_->Initialize(callback.callback());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ TestCompletionCallback callback2;
+ rv = writer_->Finish(ERR_FAILED, callback2.callback());
+ EXPECT_EQ(OK, rv);
+
+ // Initialize() should finish asynchronously.
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ base::RunLoop().RunUntilIdle();
+ // Verify the result.
+ EXPECT_FALSE(base::PathExists(file_path_));
+}
+
+TEST_F(URLFetcherFileWriterTest, InitializeAgainAfterFinishWithError) {
+ int rv = 0;
+ // Initialize(), Write() and Finish().
+ TestCompletionCallback callback;
+ rv = writer_->Initialize(callback.callback());
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ TestCompletionCallback callback2;
+ rv = writer_->Write(buf_.get(), buf_->size(), callback2.callback());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ TestCompletionCallback callback3;
+ rv = writer_->Finish(ERR_FAILED, callback3.callback());
+ EXPECT_EQ(OK, rv);
+ // Wait for Write() to complete.
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+
+ // Initialize() again and wait for it to complete.
+ rv = writer_->Initialize(callback.callback());
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ // Verify the result.
+ EXPECT_TRUE(base::PathExists(file_path_));
+}
+
TEST_F(URLFetcherFileWriterTest, DisownFile) {
int rv = 0;
// Initialize() and Finish() to create a file.
TestCompletionCallback callback;
rv = writer_->Initialize(callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
- rv = writer_->Finish(callback.callback());
+ rv = writer_->Finish(OK, callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
// Disown file.
@@ -166,7 +225,7 @@ TEST_F(URLFetcherFileWriterTemporaryFileTest, WriteToTemporaryFile) {
EXPECT_THAT(callback.GetResult(rv), IsOk());
rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
EXPECT_EQ(buf_->size(), callback.GetResult(rv));
- rv = writer_->Finish(callback.callback());
+ rv = writer_->Finish(OK, callback.callback());
EXPECT_THAT(callback.GetResult(rv), IsOk());
// Verify the result.

Powered by Google App Engine
This is Rietveld 408576698