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

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: Address comments and added tests 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
« no previous file with comments | « net/url_request/url_fetcher_response_writer.cc ('k') | no next file » | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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..0a4ee6563068ea20f085e8a79cef2e1dc52b131a 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,64 @@ 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());
+ rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ rv = writer_->Finish(ERR_FAILED, callback.callback());
+ EXPECT_EQ(OK, rv);
+
+ // Verify the result.
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ base::RunLoop().RunUntilIdle();
+ 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);
+ rv = writer_->Finish(ERR_FAILED, callback.callback());
+ EXPECT_EQ(OK, rv);
+
+ // Verify the result.
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ base::RunLoop().RunUntilIdle();
+ EXPECT_FALSE(base::PathExists(file_path_));
xunjieli 2016/10/18 21:18:08 Here's the line that fails. CloseAndDelete() is a
mmenke 2016/10/18 21:40:46 Should we just set owns file before each post task
xunjieli 2016/10/19 12:00:21 Done. Right I think that's equivalent and is bette
+}
+
+TEST_F(URLFetcherFileWriterTest, InitializeAgainAfterFinishWithError) {
+ int rv = 0;
+ // Initialize(), Write() and Finish().
+ TestCompletionCallback callback;
+ rv = writer_->Initialize(callback.callback());
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
+ EXPECT_EQ(ERR_IO_PENDING, rv);
+ rv = writer_->Finish(ERR_FAILED, callback.callback());
+ EXPECT_EQ(OK, rv);
+ // Wait for Write() to complete.
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
xunjieli 2016/10/18 21:18:07 Will using the same TestCompletionCallback be a pr
mmenke 2016/10/18 21:40:46 We should use a different callback here - This sho
xunjieli 2016/10/19 12:00:21 Done.
+
+ // Verify the result.
+ rv = writer_->Initialize(callback.callback());
+ EXPECT_THAT(callback.GetResult(rv), IsOk());
+ 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 +217,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.
« no previous file with comments | « net/url_request/url_fetcher_response_writer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698