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

Side by Side 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 test 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 unified diff | Download patch
OLDNEW
1 // Copyright 2014 The Chromium Authors. All rights reserved. 1 // Copyright 2014 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/url_request/url_fetcher_response_writer.h" 5 #include "net/url_request/url_fetcher_response_writer.h"
6 6
7 #include "base/files/file_util.h" 7 #include "base/files/file_util.h"
8 #include "base/files/scoped_temp_dir.h" 8 #include "base/files/scoped_temp_dir.h"
9 #include "base/run_loop.h" 9 #include "base/run_loop.h"
10 #include "base/threading/thread_task_runner_handle.h" 10 #include "base/threading/thread_task_runner_handle.h"
(...skipping 26 matching lines...) Expand all
37 }; 37 };
38 38
39 TEST_F(URLFetcherStringWriterTest, Basic) { 39 TEST_F(URLFetcherStringWriterTest, Basic) {
40 int rv = 0; 40 int rv = 0;
41 // Initialize(), Write() and Finish(). 41 // Initialize(), Write() and Finish().
42 TestCompletionCallback callback; 42 TestCompletionCallback callback;
43 rv = writer_->Initialize(callback.callback()); 43 rv = writer_->Initialize(callback.callback());
44 EXPECT_THAT(callback.GetResult(rv), IsOk()); 44 EXPECT_THAT(callback.GetResult(rv), IsOk());
45 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback()); 45 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
46 EXPECT_EQ(buf_->size(), callback.GetResult(rv)); 46 EXPECT_EQ(buf_->size(), callback.GetResult(rv));
47 rv = writer_->Finish(callback.callback()); 47 rv = writer_->Finish(OK, callback.callback());
48 EXPECT_THAT(callback.GetResult(rv), IsOk()); 48 EXPECT_THAT(callback.GetResult(rv), IsOk());
49 49
50 // Verify the result. 50 // Verify the result.
51 EXPECT_EQ(kData, writer_->data()); 51 EXPECT_EQ(kData, writer_->data());
52 52
53 // Initialize() again to reset. 53 // Initialize() again to reset.
54 rv = writer_->Initialize(callback.callback()); 54 rv = writer_->Initialize(callback.callback());
55 EXPECT_THAT(callback.GetResult(rv), IsOk()); 55 EXPECT_THAT(callback.GetResult(rv), IsOk());
56 EXPECT_TRUE(writer_->data().empty()); 56 EXPECT_TRUE(writer_->data().empty());
57 } 57 }
(...skipping 15 matching lines...) Expand all
73 }; 73 };
74 74
75 TEST_F(URLFetcherFileWriterTest, WriteToFile) { 75 TEST_F(URLFetcherFileWriterTest, WriteToFile) {
76 int rv = 0; 76 int rv = 0;
77 // Initialize(), Write() and Finish(). 77 // Initialize(), Write() and Finish().
78 TestCompletionCallback callback; 78 TestCompletionCallback callback;
79 rv = writer_->Initialize(callback.callback()); 79 rv = writer_->Initialize(callback.callback());
80 EXPECT_THAT(callback.GetResult(rv), IsOk()); 80 EXPECT_THAT(callback.GetResult(rv), IsOk());
81 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback()); 81 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
82 EXPECT_EQ(buf_->size(), callback.GetResult(rv)); 82 EXPECT_EQ(buf_->size(), callback.GetResult(rv));
83 rv = writer_->Finish(callback.callback()); 83 rv = writer_->Finish(OK, callback.callback());
84 EXPECT_THAT(callback.GetResult(rv), IsOk()); 84 EXPECT_THAT(callback.GetResult(rv), IsOk());
85 85
86 // Verify the result. 86 // Verify the result.
87 EXPECT_EQ(file_path_.value(), writer_->file_path().value()); 87 EXPECT_EQ(file_path_.value(), writer_->file_path().value());
88 std::string file_contents; 88 std::string file_contents;
89 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents)); 89 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents));
90 EXPECT_EQ(kData, file_contents); 90 EXPECT_EQ(kData, file_contents);
91 91
92 // Destroy the writer. File should be deleted. 92 // Destroy the writer. File should be deleted.
93 writer_.reset(); 93 writer_.reset();
94 base::RunLoop().RunUntilIdle(); 94 base::RunLoop().RunUntilIdle();
95 EXPECT_FALSE(base::PathExists(file_path_)); 95 EXPECT_FALSE(base::PathExists(file_path_));
96 } 96 }
97 97
98 TEST_F(URLFetcherFileWriterTest, InitializeAgain) { 98 TEST_F(URLFetcherFileWriterTest, InitializeAgain) {
99 int rv = 0; 99 int rv = 0;
100 // Initialize(), Write() and Finish(). 100 // Initialize(), Write() and Finish().
101 TestCompletionCallback callback; 101 TestCompletionCallback callback;
102 rv = writer_->Initialize(callback.callback()); 102 rv = writer_->Initialize(callback.callback());
103 EXPECT_THAT(callback.GetResult(rv), IsOk()); 103 EXPECT_THAT(callback.GetResult(rv), IsOk());
104 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback()); 104 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
105 EXPECT_EQ(buf_->size(), callback.GetResult(rv)); 105 EXPECT_EQ(buf_->size(), callback.GetResult(rv));
106 rv = writer_->Finish(callback.callback()); 106 rv = writer_->Finish(OK, callback.callback());
107 EXPECT_THAT(callback.GetResult(rv), IsOk()); 107 EXPECT_THAT(callback.GetResult(rv), IsOk());
108 108
109 // Verify the result. 109 // Verify the result.
110 std::string file_contents; 110 std::string file_contents;
111 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents)); 111 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents));
112 EXPECT_EQ(kData, file_contents); 112 EXPECT_EQ(kData, file_contents);
113 113
114 // Initialize() again to reset. Write different data. 114 // Initialize() again to reset. Write different data.
115 const std::string data2 = "Bye!"; 115 const std::string data2 = "Bye!";
116 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(data2)); 116 scoped_refptr<StringIOBuffer> buf2(new StringIOBuffer(data2));
117 117
118 rv = writer_->Initialize(callback.callback()); 118 rv = writer_->Initialize(callback.callback());
119 EXPECT_THAT(callback.GetResult(rv), IsOk()); 119 EXPECT_THAT(callback.GetResult(rv), IsOk());
120 rv = writer_->Write(buf2.get(), buf2->size(), callback.callback()); 120 rv = writer_->Write(buf2.get(), buf2->size(), callback.callback());
121 EXPECT_EQ(buf2->size(), callback.GetResult(rv)); 121 EXPECT_EQ(buf2->size(), callback.GetResult(rv));
122 rv = writer_->Finish(callback.callback()); 122 rv = writer_->Finish(OK, callback.callback());
123 EXPECT_THAT(callback.GetResult(rv), IsOk()); 123 EXPECT_THAT(callback.GetResult(rv), IsOk());
124 124
125 // Verify the result. 125 // Verify the result.
126 file_contents.clear(); 126 file_contents.clear();
127 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents)); 127 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents));
128 EXPECT_EQ(data2, file_contents); 128 EXPECT_EQ(data2, file_contents);
129 } 129 }
130 130
131 TEST_F(URLFetcherFileWriterTest, FinishWhileWritePending) {
132 int rv = 0;
133 // Initialize(), Write() and Finish().
134 TestCompletionCallback callback;
135 rv = writer_->Initialize(callback.callback());
136 EXPECT_EQ(ERR_IO_PENDING, rv);
137 EXPECT_THAT(callback.WaitForResult(), IsOk());
138 TestCompletionCallback callback2;
139 rv = writer_->Write(buf_.get(), buf_->size(), callback2.callback());
140 EXPECT_EQ(ERR_IO_PENDING, rv);
141 TestCompletionCallback callback3;
142 rv = writer_->Finish(ERR_FAILED, callback3.callback());
143 EXPECT_EQ(OK, rv);
144
145 base::RunLoop().RunUntilIdle();
146 // Verify the result.
147 EXPECT_FALSE(base::PathExists(file_path_));
148 }
149
150 TEST_F(URLFetcherFileWriterTest, FinishWhileOpenPending) {
151 int rv = 0;
152 // Initialize() and Finish().
153 TestCompletionCallback callback;
154 rv = writer_->Initialize(callback.callback());
155 EXPECT_EQ(ERR_IO_PENDING, rv);
156 TestCompletionCallback callback2;
157 rv = writer_->Finish(ERR_FAILED, callback2.callback());
158 EXPECT_EQ(OK, rv);
159
160 base::RunLoop().RunUntilIdle();
161 // Verify the result.
162 EXPECT_FALSE(base::PathExists(file_path_));
163 }
164
165 TEST_F(URLFetcherFileWriterTest, InitializeAgainAfterFinishWithError) {
166 int rv = 0;
167 // Initialize(), Write() and Finish().
168 TestCompletionCallback callback;
169 rv = writer_->Initialize(callback.callback());
170 EXPECT_EQ(ERR_IO_PENDING, rv);
171 EXPECT_THAT(callback.WaitForResult(), IsOk());
172 TestCompletionCallback callback2;
173 rv = writer_->Write(buf_.get(), buf_->size(), callback2.callback());
174 EXPECT_EQ(ERR_IO_PENDING, rv);
175 TestCompletionCallback callback3;
176 rv = writer_->Finish(ERR_FAILED, callback3.callback());
177 EXPECT_EQ(OK, rv);
178
179 base::RunLoop().RunUntilIdle();
180 // Initialize() again and wait for it to complete.
181 TestCompletionCallback callback4;
182 rv = writer_->Initialize(callback4.callback());
183 EXPECT_EQ(ERR_IO_PENDING, rv);
184 EXPECT_THAT(callback4.WaitForResult(), IsOk());
185 // Verify the result.
186 EXPECT_TRUE(base::PathExists(file_path_));
187 }
188
131 TEST_F(URLFetcherFileWriterTest, DisownFile) { 189 TEST_F(URLFetcherFileWriterTest, DisownFile) {
132 int rv = 0; 190 int rv = 0;
133 // Initialize() and Finish() to create a file. 191 // Initialize() and Finish() to create a file.
134 TestCompletionCallback callback; 192 TestCompletionCallback callback;
135 rv = writer_->Initialize(callback.callback()); 193 rv = writer_->Initialize(callback.callback());
136 EXPECT_THAT(callback.GetResult(rv), IsOk()); 194 EXPECT_THAT(callback.GetResult(rv), IsOk());
137 rv = writer_->Finish(callback.callback()); 195 rv = writer_->Finish(OK, callback.callback());
138 EXPECT_THAT(callback.GetResult(rv), IsOk()); 196 EXPECT_THAT(callback.GetResult(rv), IsOk());
139 197
140 // Disown file. 198 // Disown file.
141 writer_->DisownFile(); 199 writer_->DisownFile();
142 200
143 // File is not deleted even after the writer gets destroyed. 201 // File is not deleted even after the writer gets destroyed.
144 writer_.reset(); 202 writer_.reset();
145 base::RunLoop().RunUntilIdle(); 203 base::RunLoop().RunUntilIdle();
146 EXPECT_TRUE(base::PathExists(file_path_)); 204 EXPECT_TRUE(base::PathExists(file_path_));
147 } 205 }
(...skipping 11 matching lines...) Expand all
159 }; 217 };
160 218
161 TEST_F(URLFetcherFileWriterTemporaryFileTest, WriteToTemporaryFile) { 219 TEST_F(URLFetcherFileWriterTemporaryFileTest, WriteToTemporaryFile) {
162 int rv = 0; 220 int rv = 0;
163 // Initialize(), Write() and Finish(). 221 // Initialize(), Write() and Finish().
164 TestCompletionCallback callback; 222 TestCompletionCallback callback;
165 rv = writer_->Initialize(callback.callback()); 223 rv = writer_->Initialize(callback.callback());
166 EXPECT_THAT(callback.GetResult(rv), IsOk()); 224 EXPECT_THAT(callback.GetResult(rv), IsOk());
167 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback()); 225 rv = writer_->Write(buf_.get(), buf_->size(), callback.callback());
168 EXPECT_EQ(buf_->size(), callback.GetResult(rv)); 226 EXPECT_EQ(buf_->size(), callback.GetResult(rv));
169 rv = writer_->Finish(callback.callback()); 227 rv = writer_->Finish(OK, callback.callback());
170 EXPECT_THAT(callback.GetResult(rv), IsOk()); 228 EXPECT_THAT(callback.GetResult(rv), IsOk());
171 229
172 // Verify the result. 230 // Verify the result.
173 std::string file_contents; 231 std::string file_contents;
174 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents)); 232 EXPECT_TRUE(base::ReadFileToString(writer_->file_path(), &file_contents));
175 EXPECT_EQ(kData, file_contents); 233 EXPECT_EQ(kData, file_contents);
176 234
177 // Destroy the writer. File should be deleted. 235 // Destroy the writer. File should be deleted.
178 const base::FilePath file_path = writer_->file_path(); 236 const base::FilePath file_path = writer_->file_path();
179 writer_.reset(); 237 writer_.reset();
180 base::RunLoop().RunUntilIdle(); 238 base::RunLoop().RunUntilIdle();
181 EXPECT_FALSE(base::PathExists(file_path)); 239 EXPECT_FALSE(base::PathExists(file_path));
182 } 240 }
183 241
184 } // namespace net 242 } // namespace net
OLDNEW
« no previous file with comments | « net/url_request/url_fetcher_response_writer.cc ('k') | third_party/libaddressinput/chromium/chrome_metadata_source.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698