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

Side by Side Diff: chrome/browser/chromeos/drive/drive_url_request_job_unittest.cc

Issue 407093011: Allow URLRequests from one context to have different NetworkDelegates. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fix new tests Created 6 years, 4 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 | Annotate | Revision Log
« no previous file with comments | « no previous file | chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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 "chrome/browser/chromeos/drive/drive_url_request_job.h" 5 #include "chrome/browser/chromeos/drive/drive_url_request_job.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/ref_counted.h" 8 #include "base/memory/ref_counted.h"
9 #include "base/memory/scoped_ptr.h" 9 #include "base/memory/scoped_ptr.h"
10 #include "base/run_loop.h" 10 #include "base/run_loop.h"
11 #include "base/sequenced_task_runner.h" 11 #include "base/sequenced_task_runner.h"
12 #include "base/threading/sequenced_worker_pool.h" 12 #include "base/threading/sequenced_worker_pool.h"
13 #include "base/threading/thread.h" 13 #include "base/threading/thread.h"
14 #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h" 14 #include "chrome/browser/chromeos/drive/drive_file_stream_reader.h"
15 #include "chrome/browser/chromeos/drive/fake_file_system.h" 15 #include "chrome/browser/chromeos/drive/fake_file_system.h"
16 #include "chrome/browser/chromeos/drive/file_system_util.h" 16 #include "chrome/browser/chromeos/drive/file_system_util.h"
17 #include "chrome/browser/chromeos/drive/test_util.h" 17 #include "chrome/browser/chromeos/drive/test_util.h"
18 #include "chrome/browser/drive/fake_drive_service.h" 18 #include "chrome/browser/drive/fake_drive_service.h"
19 #include "chrome/browser/drive/test_util.h" 19 #include "chrome/browser/drive/test_util.h"
20 #include "chrome/common/url_constants.h" 20 #include "chrome/common/url_constants.h"
21 #include "content/public/browser/browser_thread.h" 21 #include "content/public/browser/browser_thread.h"
22 #include "content/public/test/test_browser_thread_bundle.h" 22 #include "content/public/test/test_browser_thread_bundle.h"
23 #include "google_apis/drive/test_util.h" 23 #include "google_apis/drive/test_util.h"
24 #include "net/base/request_priority.h" 24 #include "net/base/request_priority.h"
25 #include "net/base/test_completion_callback.h" 25 #include "net/base/test_completion_callback.h"
26 #include "net/http/http_byte_range.h" 26 #include "net/http/http_byte_range.h"
27 #include "net/url_request/redirect_info.h" 27 #include "net/url_request/redirect_info.h"
28 #include "net/url_request/url_request.h"
29 #include "net/url_request/url_request_context.h"
28 #include "net/url_request/url_request_test_util.h" 30 #include "net/url_request/url_request_test_util.h"
29 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
30 #include "url/gurl.h" 32 #include "url/gurl.h"
31 33
32 namespace drive { 34 namespace drive {
33 namespace { 35 namespace {
34 36
35 // A simple URLRequestJobFactory implementation to create DriveURLRequestJob. 37 // A simple URLRequestJobFactory implementation to create DriveURLRequestJob.
36 class TestURLRequestJobFactory : public net::URLRequestJobFactory { 38 class TestURLRequestJobFactory : public net::URLRequestJobFactory {
37 public: 39 public:
(...skipping 139 matching lines...) Expand 10 before | Expand all | Expand 10 after
177 scoped_ptr<FakeDriveService> fake_drive_service_; 179 scoped_ptr<FakeDriveService> fake_drive_service_;
178 scoped_ptr<test_util::FakeFileSystem> fake_file_system_; 180 scoped_ptr<test_util::FakeFileSystem> fake_file_system_;
179 181
180 scoped_ptr<net::TestNetworkDelegate> test_network_delegate_; 182 scoped_ptr<net::TestNetworkDelegate> test_network_delegate_;
181 scoped_ptr<TestURLRequestJobFactory> test_url_request_job_factory_; 183 scoped_ptr<TestURLRequestJobFactory> test_url_request_job_factory_;
182 scoped_ptr<net::URLRequestContext> url_request_context_; 184 scoped_ptr<net::URLRequestContext> url_request_context_;
183 scoped_ptr<TestDelegate> test_delegate_; 185 scoped_ptr<TestDelegate> test_delegate_;
184 }; 186 };
185 187
186 TEST_F(DriveURLRequestJobTest, NonGetMethod) { 188 TEST_F(DriveURLRequestJobTest, NonGetMethod) {
187 net::URLRequest request(GURL("drive:drive/root/File 1.txt"), 189 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
188 net::DEFAULT_PRIORITY, 190 GURL("drive:drive/root/File 1.txt"),
189 test_delegate_.get(), 191 net::DEFAULT_PRIORITY,
190 url_request_context_.get()); 192 test_delegate_.get(),
191 request.set_method("POST"); // Set non "GET" method. 193 NULL));
192 request.Start(); 194 request->set_method("POST"); // Set non "GET" method.
195 request->Start();
193 196
194 base::RunLoop().Run(); 197 base::RunLoop().Run();
195 198
196 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 199 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
197 EXPECT_EQ(net::ERR_METHOD_NOT_SUPPORTED, request.status().error()); 200 EXPECT_EQ(net::ERR_METHOD_NOT_SUPPORTED, request->status().error());
198 } 201 }
199 202
200 TEST_F(DriveURLRequestJobTest, RegularFile) { 203 TEST_F(DriveURLRequestJobTest, RegularFile) {
201 const GURL kTestUrl("drive:drive/root/File 1.txt"); 204 const GURL kTestUrl("drive:drive/root/File 1.txt");
202 const base::FilePath kTestFilePath("drive/root/File 1.txt"); 205 const base::FilePath kTestFilePath("drive/root/File 1.txt");
203 206
204 // For the first time, the file should be fetched from the server. 207 // For the first time, the file should be fetched from the server.
205 { 208 {
206 net::URLRequest request(kTestUrl, 209 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
207 net::DEFAULT_PRIORITY, 210 kTestUrl,
208 test_delegate_.get(), 211 net::DEFAULT_PRIORITY,
209 url_request_context_.get()); 212 test_delegate_.get(),
210 request.Start(); 213 NULL));
214 request->Start();
211 215
212 base::RunLoop().Run(); 216 base::RunLoop().Run();
213 217
214 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 218 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
215 // It looks weird, but the mime type for the "File 1.txt" is "audio/mpeg" 219 // It looks weird, but the mime type for the "File 1.txt" is "audio/mpeg"
216 // on the server. 220 // on the server.
217 std::string mime_type; 221 std::string mime_type;
218 request.GetMimeType(&mime_type); 222 request->GetMimeType(&mime_type);
219 EXPECT_EQ("audio/mpeg", mime_type); 223 EXPECT_EQ("audio/mpeg", mime_type);
220 224
221 // Reading file must be done after |request| runs, otherwise 225 // Reading file must be done after |request| runs, otherwise
222 // it'll create a local cache file, and we cannot test correctly. 226 // it'll create a local cache file, and we cannot test correctly.
223 std::string expected_data; 227 std::string expected_data;
224 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); 228 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data));
225 EXPECT_EQ(expected_data, test_delegate_->data_received()); 229 EXPECT_EQ(expected_data, test_delegate_->data_received());
226 } 230 }
227 231
228 // For the second time, the locally cached file should be used. 232 // For the second time, the locally cached file should be used.
229 // The caching emulation is done by FakeFileSystem. 233 // The caching emulation is done by FakeFileSystem.
230 { 234 {
231 test_delegate_.reset(new TestDelegate); 235 test_delegate_.reset(new TestDelegate);
232 net::URLRequest request(GURL("drive:drive/root/File 1.txt"), 236 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
233 net::DEFAULT_PRIORITY, 237 GURL("drive:drive/root/File 1.txt"),
234 test_delegate_.get(), 238 net::DEFAULT_PRIORITY,
235 url_request_context_.get()); 239 test_delegate_.get(),
236 request.Start(); 240 NULL));
241 request->Start();
237 242
238 base::RunLoop().Run(); 243 base::RunLoop().Run();
239 244
240 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 245 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
241 std::string mime_type; 246 std::string mime_type;
242 request.GetMimeType(&mime_type); 247 request->GetMimeType(&mime_type);
243 EXPECT_EQ("audio/mpeg", mime_type); 248 EXPECT_EQ("audio/mpeg", mime_type);
244 249
245 std::string expected_data; 250 std::string expected_data;
246 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); 251 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data));
247 EXPECT_EQ(expected_data, test_delegate_->data_received()); 252 EXPECT_EQ(expected_data, test_delegate_->data_received());
248 } 253 }
249 } 254 }
250 255
251 TEST_F(DriveURLRequestJobTest, HostedDocument) { 256 TEST_F(DriveURLRequestJobTest, HostedDocument) {
252 // Open a gdoc file. 257 // Open a gdoc file.
253 test_delegate_->set_quit_on_redirect(true); 258 test_delegate_->set_quit_on_redirect(true);
254 net::URLRequest request( 259 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
255 GURL("drive:drive/root/Document 1 excludeDir-test.gdoc"), 260 GURL("drive:drive/root/Document 1 excludeDir-test.gdoc"),
256 net::DEFAULT_PRIORITY, 261 net::DEFAULT_PRIORITY,
257 test_delegate_.get(), 262 test_delegate_.get(),
258 url_request_context_.get()); 263 NULL));
259 request.Start(); 264 request->Start();
260 265
261 base::RunLoop().Run(); 266 base::RunLoop().Run();
262 267
263 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 268 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
264 // Make sure that a hosted document triggers redirection. 269 // Make sure that a hosted document triggers redirection.
265 EXPECT_TRUE(request.is_redirecting()); 270 EXPECT_TRUE(request->is_redirecting());
266 EXPECT_TRUE(test_delegate_->redirect_url().is_valid()); 271 EXPECT_TRUE(test_delegate_->redirect_url().is_valid());
267 } 272 }
268 273
269 TEST_F(DriveURLRequestJobTest, RootDirectory) { 274 TEST_F(DriveURLRequestJobTest, RootDirectory) {
270 net::URLRequest request(GURL("drive:drive/root"), 275 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
271 net::DEFAULT_PRIORITY, 276 GURL("drive:drive/root"),
272 test_delegate_.get(), 277 net::DEFAULT_PRIORITY,
273 url_request_context_.get()); 278 test_delegate_.get(),
274 request.Start(); 279 NULL));
280 request->Start();
275 281
276 base::RunLoop().Run(); 282 base::RunLoop().Run();
277 283
278 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 284 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
279 EXPECT_EQ(net::ERR_FAILED, request.status().error()); 285 EXPECT_EQ(net::ERR_FAILED, request->status().error());
280 } 286 }
281 287
282 TEST_F(DriveURLRequestJobTest, Directory) { 288 TEST_F(DriveURLRequestJobTest, Directory) {
283 net::URLRequest request(GURL("drive:drive/root/Directory 1"), 289 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
284 net::DEFAULT_PRIORITY, 290 GURL("drive:drive/root/Directory 1"),
285 test_delegate_.get(), 291 net::DEFAULT_PRIORITY,
286 url_request_context_.get()); 292 test_delegate_.get(),
287 request.Start(); 293 NULL));
294 request->Start();
288 295
289 base::RunLoop().Run(); 296 base::RunLoop().Run();
290 297
291 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 298 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
292 EXPECT_EQ(net::ERR_FAILED, request.status().error()); 299 EXPECT_EQ(net::ERR_FAILED, request->status().error());
293 } 300 }
294 301
295 TEST_F(DriveURLRequestJobTest, NonExistingFile) { 302 TEST_F(DriveURLRequestJobTest, NonExistingFile) {
296 net::URLRequest request(GURL("drive:drive/root/non-existing-file.txt"), 303 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
297 net::DEFAULT_PRIORITY, 304 GURL("drive:drive/root/non-existing-file.txt"),
298 test_delegate_.get(), 305 net::DEFAULT_PRIORITY,
299 url_request_context_.get()); 306 test_delegate_.get(),
300 request.Start(); 307 NULL));
308 request->Start();
301 309
302 base::RunLoop().Run(); 310 base::RunLoop().Run();
303 311
304 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 312 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
305 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request.status().error()); 313 EXPECT_EQ(net::ERR_FILE_NOT_FOUND, request->status().error());
306 } 314 }
307 315
308 TEST_F(DriveURLRequestJobTest, WrongFormat) { 316 TEST_F(DriveURLRequestJobTest, WrongFormat) {
309 net::URLRequest request(GURL("drive:"), 317 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
310 net::DEFAULT_PRIORITY, 318 GURL("drive:"),
311 test_delegate_.get(), 319 net::DEFAULT_PRIORITY,
312 url_request_context_.get()); 320 test_delegate_.get(),
313 request.Start(); 321 NULL));
322 request->Start();
314 323
315 base::RunLoop().Run(); 324 base::RunLoop().Run();
316 325
317 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 326 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
318 EXPECT_EQ(net::ERR_INVALID_URL, request.status().error()); 327 EXPECT_EQ(net::ERR_INVALID_URL, request->status().error());
319 } 328 }
320 329
321 TEST_F(DriveURLRequestJobTest, Cancel) { 330 TEST_F(DriveURLRequestJobTest, Cancel) {
322 net::URLRequest request(GURL("drive:drive/root/File 1.txt"), 331 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
323 net::DEFAULT_PRIORITY, 332 GURL("drive:drive/root/File 1.txt"),
324 test_delegate_.get(), 333 net::DEFAULT_PRIORITY,
325 url_request_context_.get()); 334 test_delegate_.get(),
335 NULL));
326 336
327 // Start the request, and cancel it immediately after it. 337 // Start the request, and cancel it immediately after it.
328 request.Start(); 338 request->Start();
329 request.Cancel(); 339 request->Cancel();
330 340
331 base::RunLoop().Run(); 341 base::RunLoop().Run();
332 342
333 EXPECT_EQ(net::URLRequestStatus::CANCELED, request.status().status()); 343 EXPECT_EQ(net::URLRequestStatus::CANCELED, request->status().status());
334 } 344 }
335 345
336 TEST_F(DriveURLRequestJobTest, RangeHeader) { 346 TEST_F(DriveURLRequestJobTest, RangeHeader) {
337 const GURL kTestUrl("drive:drive/root/File 1.txt"); 347 const GURL kTestUrl("drive:drive/root/File 1.txt");
338 const base::FilePath kTestFilePath("drive/root/File 1.txt"); 348 const base::FilePath kTestFilePath("drive/root/File 1.txt");
339 349
340 net::URLRequest request(kTestUrl, 350 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
341 net::DEFAULT_PRIORITY, 351 kTestUrl,
342 test_delegate_.get(), 352 net::DEFAULT_PRIORITY,
343 url_request_context_.get()); 353 test_delegate_.get(),
354 NULL));
344 355
345 // Set range header. 356 // Set range header.
346 request.SetExtraRequestHeaderByName( 357 request->SetExtraRequestHeaderByName(
347 "Range", "bytes=3-5", false /* overwrite */); 358 "Range", "bytes=3-5", false /* overwrite */);
348 request.Start(); 359 request->Start();
349 360
350 base::RunLoop().Run(); 361 base::RunLoop().Run();
351 362
352 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request.status().status()); 363 EXPECT_EQ(net::URLRequestStatus::SUCCESS, request->status().status());
353 364
354 // Reading file must be done after |request| runs, otherwise 365 // Reading file must be done after |request| runs, otherwise
355 // it'll create a local cache file, and we cannot test correctly. 366 // it'll create a local cache file, and we cannot test correctly.
356 std::string expected_data; 367 std::string expected_data;
357 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data)); 368 ASSERT_TRUE(ReadDriveFileSync(kTestFilePath, &expected_data));
358 EXPECT_EQ(expected_data.substr(3, 3), test_delegate_->data_received()); 369 EXPECT_EQ(expected_data.substr(3, 3), test_delegate_->data_received());
359 } 370 }
360 371
361 TEST_F(DriveURLRequestJobTest, WrongRangeHeader) { 372 TEST_F(DriveURLRequestJobTest, WrongRangeHeader) {
362 const GURL kTestUrl("drive:drive/root/File 1.txt"); 373 const GURL kTestUrl("drive:drive/root/File 1.txt");
363 374
364 net::URLRequest request(kTestUrl, 375 scoped_ptr<net::URLRequest> request(url_request_context_->CreateRequest(
365 net::DEFAULT_PRIORITY, 376 kTestUrl,
366 test_delegate_.get(), 377 net::DEFAULT_PRIORITY,
367 url_request_context_.get()); 378 test_delegate_.get(),
379 NULL));
368 380
369 // Set range header. 381 // Set range header.
370 request.SetExtraRequestHeaderByName( 382 request->SetExtraRequestHeaderByName(
371 "Range", "Wrong Range Header Value", false /* overwrite */); 383 "Range", "Wrong Range Header Value", false /* overwrite */);
372 request.Start(); 384 request->Start();
373 385
374 base::RunLoop().Run(); 386 base::RunLoop().Run();
375 387
376 EXPECT_EQ(net::URLRequestStatus::FAILED, request.status().status()); 388 EXPECT_EQ(net::URLRequestStatus::FAILED, request->status().status());
377 EXPECT_EQ(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, request.status().error()); 389 EXPECT_EQ(net::ERR_REQUEST_RANGE_NOT_SATISFIABLE, request->status().error());
378 } 390 }
379 391
380 } // namespace drive 392 } // namespace drive
OLDNEW
« no previous file with comments | « no previous file | chrome/browser/custom_handlers/protocol_handler_registry_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698