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

Side by Side Diff: net/url_request/url_fetcher_impl_unittest.cc

Issue 1378123003: Adding SSL ETS Tests (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@ets
Patch Set: Rebase. Created 5 years, 1 month 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 (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_impl.h" 5 #include "net/url_request/url_fetcher_impl.h"
6 6
7 #include <stdint.h> 7 #include <stdint.h>
8 #include <string.h> 8 #include <string.h>
9 9
10 #include <algorithm> 10 #include <algorithm>
(...skipping 15 matching lines...) Expand all
26 #include "base/threading/thread.h" 26 #include "base/threading/thread.h"
27 #include "build/build_config.h" 27 #include "build/build_config.h"
28 #include "crypto/nss_util.h" 28 #include "crypto/nss_util.h"
29 #include "net/base/elements_upload_data_stream.h" 29 #include "net/base/elements_upload_data_stream.h"
30 #include "net/base/network_change_notifier.h" 30 #include "net/base/network_change_notifier.h"
31 #include "net/base/upload_bytes_element_reader.h" 31 #include "net/base/upload_bytes_element_reader.h"
32 #include "net/base/upload_element_reader.h" 32 #include "net/base/upload_element_reader.h"
33 #include "net/base/upload_file_element_reader.h" 33 #include "net/base/upload_file_element_reader.h"
34 #include "net/dns/mock_host_resolver.h" 34 #include "net/dns/mock_host_resolver.h"
35 #include "net/http/http_response_headers.h" 35 #include "net/http/http_response_headers.h"
36 #include "net/test/spawned_test_server/spawned_test_server.h" 36 #include "net/test/embedded_test_server/embedded_test_server.h"
37 #include "net/url_request/url_fetcher_delegate.h" 37 #include "net/url_request/url_fetcher_delegate.h"
38 #include "net/url_request/url_request_context_getter.h" 38 #include "net/url_request/url_request_context_getter.h"
39 #include "net/url_request/url_request_test_util.h" 39 #include "net/url_request/url_request_test_util.h"
40 #include "net/url_request/url_request_throttler_manager.h" 40 #include "net/url_request/url_request_throttler_manager.h"
41 #include "testing/gtest/include/gtest/gtest.h" 41 #include "testing/gtest/include/gtest/gtest.h"
42 42
43 #if defined(USE_NSS_CERTS) || defined(OS_IOS) 43 #if defined(USE_NSS_CERTS) || defined(OS_IOS)
44 #include "net/cert_net/nss_ocsp.h" 44 #include "net/cert_net/nss_ocsp.h"
45 #endif 45 #endif
46 46
47 namespace net { 47 namespace net {
48 48
49 using base::Time; 49 using base::Time;
50 using base::TimeDelta; 50 using base::TimeDelta;
51 51
52 // TODO(eroman): Add a regression test for http://crbug.com/40505. 52 // TODO(eroman): Add a regression test for http://crbug.com/40505.
53 53
54 namespace { 54 namespace {
55 55
56 // TODO(akalin): Move all the test data to somewhere under net/. 56 // TODO(akalin): Move all the test data to somewhere under net/.
57 const base::FilePath::CharType kDocRoot[] = 57 const base::FilePath::CharType kDocRoot[] =
58 FILE_PATH_LITERAL("net/data/url_fetcher_impl_unittest"); 58 FILE_PATH_LITERAL("net/data/url_fetcher_impl_unittest");
59 const char kTestServerFilePrefix[] = "files/"; 59 const char kTestServerFilePrefix[] = "/";
60 60
61 // Test server path and response body for the default URL used by many of the 61 // Test server path and response body for the default URL used by many of the
62 // tests. 62 // tests.
63 const char kDefaultResponsePath[] = "defaultresponse"; 63 const char kDefaultResponsePath[] = "/defaultresponse";
64 const char kDefaultResponseBody[] = 64 const char kDefaultResponseBody[] =
65 "Default response given for path: /defaultresponse"; 65 "Default response given for path: /defaultresponse";
66 66
67 // Request body for streams created by CreateUploadStream. 67 // Request body for streams created by CreateUploadStream.
68 const char kCreateUploadStreamBody[] = "rosebud"; 68 const char kCreateUploadStreamBody[] = "rosebud";
69 69
70 base::FilePath GetUploadFileTestPath() { 70 base::FilePath GetUploadFileTestPath() {
71 base::FilePath path; 71 base::FilePath path;
72 PathService::Get(base::DIR_SOURCE_ROOT, &path); 72 PathService::Get(base::DIR_SOURCE_ROOT, &path);
73 return path.Append( 73 return path.Append(
(...skipping 305 matching lines...) Expand 10 before | Expand all | Expand 10 after
379 EXPECT_TRUE(delegate->fetcher()->GetStatus().is_success()); 379 EXPECT_TRUE(delegate->fetcher()->GetStatus().is_success());
380 EXPECT_EQ(200, delegate->fetcher()->GetResponseCode()); 380 EXPECT_EQ(200, delegate->fetcher()->GetResponseCode());
381 381
382 base::FilePath out_path; 382 base::FilePath out_path;
383 EXPECT_TRUE( 383 EXPECT_TRUE(
384 delegate->fetcher()->GetResponseAsFilePath(take_ownership, &out_path)); 384 delegate->fetcher()->GetResponseAsFilePath(take_ownership, &out_path));
385 if (!save_to_temporary_file) { 385 if (!save_to_temporary_file) {
386 EXPECT_EQ(requested_out_path, out_path); 386 EXPECT_EQ(requested_out_path, out_path);
387 } 387 }
388 388
389 base::FilePath server_root;
390 PathService::Get(base::DIR_SOURCE_ROOT, &server_root);
391
389 EXPECT_TRUE(base::ContentsEqual( 392 EXPECT_TRUE(base::ContentsEqual(
390 test_server_->GetDocumentRoot().AppendASCII(file_to_fetch), out_path)); 393 server_root.Append(base::FilePath(kDocRoot)).AppendASCII(file_to_fetch),
394 out_path));
391 395
392 // Delete the delegate and run the message loop to give the fetcher's 396 // Delete the delegate and run the message loop to give the fetcher's
393 // destructor a chance to delete the file. 397 // destructor a chance to delete the file.
394 delegate.reset(); 398 delegate.reset();
395 base::RunLoop().RunUntilIdle(); 399 base::RunLoop().RunUntilIdle();
396 400
397 // File should only exist if |take_ownership| was true. 401 // File should only exist if |take_ownership| was true.
398 EXPECT_EQ(take_ownership, base::PathExists(out_path)); 402 EXPECT_EQ(take_ownership, base::PathExists(out_path));
399 403
400 // Cleanup. 404 // Cleanup.
401 if (base::PathExists(out_path)) 405 if (base::PathExists(out_path))
402 base::DeleteFile(out_path, false); 406 base::DeleteFile(out_path, false);
403 } 407 }
404 408
405 // Returns a URL that hangs on DNS resolution when using a context created by 409 // Returns a URL that hangs on DNS resolution when using a context created by
406 // the test fixture. 410 // the test fixture.
407 const GURL& hanging_url() const { return hanging_url_; } 411 const GURL& hanging_url() const { return hanging_url_; }
408 412
409 // testing::Test: 413 // testing::Test:
410 void SetUp() override { 414 void SetUp() override {
411 SetUpServer(); 415 SetUpServer();
412 ASSERT_TRUE(test_server_->Start()); 416 ASSERT_TRUE(test_server_->Start());
413 417
414 // URL that will hang when lookups reach the host resolver. 418 // URL that will hang when lookups reach the host resolver.
415 hanging_url_ = GURL(base::StringPrintf( 419 hanging_url_ = GURL(base::StringPrintf(
416 "http://example.com:%d/%s", test_server_->host_port_pair().port(), 420 "http://example.com:%d%s", test_server_->host_port_pair().port(),
417 kDefaultResponsePath)); 421 kDefaultResponsePath));
418 ASSERT_TRUE(hanging_url_.is_valid()); 422 ASSERT_TRUE(hanging_url_.is_valid());
419 423
420 #if defined(USE_NSS_CERTS) || defined(OS_IOS) 424 #if defined(USE_NSS_CERTS) || defined(OS_IOS)
421 crypto::EnsureNSSInit(); 425 crypto::EnsureNSSInit();
422 EnsureNSSHttpIOInit(); 426 EnsureNSSHttpIOInit();
423 #endif 427 #endif
424 } 428 }
425 429
426 void TearDown() override { 430 void TearDown() override {
427 #if defined(USE_NSS_CERTS) || defined(OS_IOS) 431 #if defined(USE_NSS_CERTS) || defined(OS_IOS)
428 ShutdownNSSHttpIO(); 432 ShutdownNSSHttpIO();
429 #endif 433 #endif
430 } 434 }
431 435
432 // Initializes |test_server_| without starting it. Allows subclasses to use 436 // Initializes |test_server_| without starting it. Allows subclasses to use
433 // their own server configuration. 437 // their own server configuration.
434 virtual void SetUpServer() { 438 virtual void SetUpServer() {
435 test_server_.reset(new SpawnedTestServer(SpawnedTestServer::TYPE_HTTP, 439 test_server_.reset(new EmbeddedTestServer);
436 SpawnedTestServer::kLocalhost, 440 test_server_->AddDefaultHandlers(base::FilePath(kDocRoot));
437 base::FilePath(kDocRoot)));
438 } 441 }
439 442
440 // Network thread for cross-thread tests. Most threads just use the main 443 // Network thread for cross-thread tests. Most threads just use the main
441 // thread for network activity. 444 // thread for network activity.
442 scoped_ptr<base::Thread> network_thread_; 445 scoped_ptr<base::Thread> network_thread_;
443 446
444 scoped_ptr<SpawnedTestServer> test_server_; 447 scoped_ptr<EmbeddedTestServer> test_server_;
445 GURL hanging_url_; 448 GURL hanging_url_;
446 449
447 size_t num_upload_streams_created_; 450 size_t num_upload_streams_created_;
448 }; 451 };
449 452
450 namespace { 453 namespace {
451 454
452 // Version of URLFetcherTest that tests bad HTTPS requests. 455 // Version of URLFetcherTest that tests bad HTTPS requests.
453 class URLFetcherBadHTTPSTest : public URLFetcherTest { 456 class URLFetcherBadHTTPSTest : public URLFetcherTest {
454 public: 457 public:
455 URLFetcherBadHTTPSTest() {} 458 URLFetcherBadHTTPSTest() {}
456 459
457 // URLFetcherTest: 460 // URLFetcherTest:
458 void SetUpServer() override { 461 void SetUpServer() override {
459 SpawnedTestServer::SSLOptions ssl_options( 462 test_server_.reset(
460 SpawnedTestServer::SSLOptions::CERT_EXPIRED); 463 new EmbeddedTestServer(net::EmbeddedTestServer::TYPE_HTTPS));
461 test_server_.reset(new SpawnedTestServer( 464 test_server_->SetSSLConfig(net::EmbeddedTestServer::CERT_EXPIRED);
462 SpawnedTestServer::TYPE_HTTPS, ssl_options, base::FilePath(kDocRoot))); 465 test_server_->ServeFilesFromSourceDirectory("net/data/ssl");
463 } 466 }
464 }; 467 };
465 468
466 // Create the fetcher on the main thread. Since network IO will happen on the 469 // Create the fetcher on the main thread. Since network IO will happen on the
467 // main thread, this will test URLFetcher's ability to do everything on one 470 // main thread, this will test URLFetcher's ability to do everything on one
468 // thread. 471 // thread.
469 TEST_F(URLFetcherTest, SameThreadTest) { 472 TEST_F(URLFetcherTest, SameThreadTest) {
470 WaitingURLFetcherDelegate delegate; 473 WaitingURLFetcherDelegate delegate;
471 delegate.CreateFetcher(test_server_->GetURL(kDefaultResponsePath), 474 delegate.CreateFetcher(test_server_->GetURL(kDefaultResponsePath),
472 URLFetcher::GET, CreateSameThreadContextGetter()); 475 URLFetcher::GET, CreateSameThreadContextGetter());
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
653 656
654 std::string data; 657 std::string data;
655 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 658 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
656 EXPECT_EQ(kDefaultResponseBody, data); 659 EXPECT_EQ(kDefaultResponseBody, data);
657 } 660 }
658 661
659 TEST_F(URLFetcherTest, PostString) { 662 TEST_F(URLFetcherTest, PostString) {
660 const char kUploadData[] = "bobsyeruncle"; 663 const char kUploadData[] = "bobsyeruncle";
661 664
662 WaitingURLFetcherDelegate delegate; 665 WaitingURLFetcherDelegate delegate;
663 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 666 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
664 CreateSameThreadContextGetter()); 667 CreateSameThreadContextGetter());
665 delegate.fetcher()->SetUploadData("application/x-www-form-urlencoded", 668 delegate.fetcher()->SetUploadData("application/x-www-form-urlencoded",
666 kUploadData); 669 kUploadData);
667 delegate.StartFetcherAndWait(); 670 delegate.StartFetcherAndWait();
668 671
669 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 672 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
670 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 673 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
671 std::string data; 674 std::string data;
672 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 675 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
673 EXPECT_EQ(kUploadData, data); 676 EXPECT_EQ(kUploadData, data);
674 } 677 }
675 678
676 TEST_F(URLFetcherTest, PostEmptyString) { 679 TEST_F(URLFetcherTest, PostEmptyString) {
677 const char kUploadData[] = ""; 680 const char kUploadData[] = "";
678 681
679 WaitingURLFetcherDelegate delegate; 682 WaitingURLFetcherDelegate delegate;
680 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 683 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
681 CreateSameThreadContextGetter()); 684 CreateSameThreadContextGetter());
682 delegate.fetcher()->SetUploadData("application/x-www-form-urlencoded", 685 delegate.fetcher()->SetUploadData("application/x-www-form-urlencoded",
683 kUploadData); 686 kUploadData);
684 delegate.StartFetcherAndWait(); 687 delegate.StartFetcherAndWait();
685 688
686 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 689 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
687 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 690 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
688 std::string data; 691 std::string data;
689 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 692 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
690 EXPECT_EQ(kUploadData, data); 693 EXPECT_EQ(kUploadData, data);
691 } 694 }
692 695
693 TEST_F(URLFetcherTest, PostEntireFile) { 696 TEST_F(URLFetcherTest, PostEntireFile) {
694 base::FilePath upload_path = GetUploadFileTestPath(); 697 base::FilePath upload_path = GetUploadFileTestPath();
695 698
696 WaitingURLFetcherDelegate delegate; 699 WaitingURLFetcherDelegate delegate;
697 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 700 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
698 CreateSameThreadContextGetter()); 701 CreateSameThreadContextGetter());
699 delegate.fetcher()->SetUploadFilePath("application/x-www-form-urlencoded", 702 delegate.fetcher()->SetUploadFilePath("application/x-www-form-urlencoded",
700 upload_path, 0, kuint64max, 703 upload_path, 0, kuint64max,
701 base::ThreadTaskRunnerHandle::Get()); 704 base::ThreadTaskRunnerHandle::Get());
702 delegate.StartFetcherAndWait(); 705 delegate.StartFetcherAndWait();
703 706
704 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 707 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
705 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 708 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
706 709
707 std::string expected; 710 std::string expected;
708 ASSERT_TRUE(base::ReadFileToString(upload_path, &expected)); 711 ASSERT_TRUE(base::ReadFileToString(upload_path, &expected));
709 std::string data; 712 std::string data;
710 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 713 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
711 EXPECT_EQ(expected, data); 714 EXPECT_EQ(expected, data);
712 } 715 }
713 716
714 TEST_F(URLFetcherTest, PostFileRange) { 717 TEST_F(URLFetcherTest, PostFileRange) {
715 const size_t kRangeStart = 30; 718 const size_t kRangeStart = 30;
716 const size_t kRangeLength = 100; 719 const size_t kRangeLength = 100;
717 base::FilePath upload_path = GetUploadFileTestPath(); 720 base::FilePath upload_path = GetUploadFileTestPath();
718 721
719 WaitingURLFetcherDelegate delegate; 722 WaitingURLFetcherDelegate delegate;
720 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 723 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
721 CreateSameThreadContextGetter()); 724 CreateSameThreadContextGetter());
722 delegate.fetcher()->SetUploadFilePath("application/x-www-form-urlencoded", 725 delegate.fetcher()->SetUploadFilePath("application/x-www-form-urlencoded",
723 upload_path, kRangeStart, kRangeLength, 726 upload_path, kRangeStart, kRangeLength,
724 base::ThreadTaskRunnerHandle::Get()); 727 base::ThreadTaskRunnerHandle::Get());
725 delegate.StartFetcherAndWait(); 728 delegate.StartFetcherAndWait();
726 729
727 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 730 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
728 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 731 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
729 732
730 std::string expected; 733 std::string expected;
731 ASSERT_TRUE(base::ReadFileToString(upload_path, &expected)); 734 ASSERT_TRUE(base::ReadFileToString(upload_path, &expected));
732 std::string data; 735 std::string data;
733 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 736 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
734 EXPECT_EQ(expected.substr(kRangeStart, kRangeLength), data); 737 EXPECT_EQ(expected.substr(kRangeStart, kRangeLength), data);
735 } 738 }
736 739
737 TEST_F(URLFetcherTest, PostWithUploadStreamFactory) { 740 TEST_F(URLFetcherTest, PostWithUploadStreamFactory) {
738 WaitingURLFetcherDelegate delegate; 741 WaitingURLFetcherDelegate delegate;
739 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 742 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
740 CreateSameThreadContextGetter()); 743 CreateSameThreadContextGetter());
741 delegate.fetcher()->SetUploadStreamFactory( 744 delegate.fetcher()->SetUploadStreamFactory(
742 "text/plain", 745 "text/plain",
743 base::Bind(&URLFetcherTest::CreateUploadStream, base::Unretained(this))); 746 base::Bind(&URLFetcherTest::CreateUploadStream, base::Unretained(this)));
744 delegate.StartFetcherAndWait(); 747 delegate.StartFetcherAndWait();
745 748
746 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 749 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
747 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 750 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
748 std::string data; 751 std::string data;
749 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 752 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
750 EXPECT_EQ(kCreateUploadStreamBody, data); 753 EXPECT_EQ(kCreateUploadStreamBody, data);
751 EXPECT_EQ(1u, num_upload_streams_created()); 754 EXPECT_EQ(1u, num_upload_streams_created());
752 } 755 }
753 756
754 TEST_F(URLFetcherTest, PostWithUploadStreamFactoryAndRetries) { 757 TEST_F(URLFetcherTest, PostWithUploadStreamFactoryAndRetries) {
755 WaitingURLFetcherDelegate delegate; 758 WaitingURLFetcherDelegate delegate;
756 delegate.CreateFetcher(test_server_->GetURL("echo?status=500"), 759 delegate.CreateFetcher(test_server_->GetURL("/echo?status=500"),
757 URLFetcher::POST, CreateSameThreadContextGetter()); 760 URLFetcher::POST, CreateSameThreadContextGetter());
758 delegate.fetcher()->SetAutomaticallyRetryOn5xx(true); 761 delegate.fetcher()->SetAutomaticallyRetryOn5xx(true);
759 delegate.fetcher()->SetMaxRetriesOn5xx(1); 762 delegate.fetcher()->SetMaxRetriesOn5xx(1);
760 delegate.fetcher()->SetUploadStreamFactory( 763 delegate.fetcher()->SetUploadStreamFactory(
761 "text/plain", 764 "text/plain",
762 base::Bind(&URLFetcherTest::CreateUploadStream, base::Unretained(this))); 765 base::Bind(&URLFetcherTest::CreateUploadStream, base::Unretained(this)));
763 delegate.StartFetcherAndWait(); 766 delegate.StartFetcherAndWait();
764 767
765 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 768 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
766 EXPECT_EQ(500, delegate.fetcher()->GetResponseCode()); 769 EXPECT_EQ(500, delegate.fetcher()->GetResponseCode());
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
808 const std::string chunk_; 811 const std::string chunk_;
809 812
810 int64 num_chunks_appended_; 813 int64 num_chunks_appended_;
811 int64 last_seen_progress_; 814 int64 last_seen_progress_;
812 815
813 DISALLOW_COPY_AND_ASSIGN(CheckUploadProgressDelegate); 816 DISALLOW_COPY_AND_ASSIGN(CheckUploadProgressDelegate);
814 }; 817 };
815 818
816 TEST_F(URLFetcherTest, UploadProgress) { 819 TEST_F(URLFetcherTest, UploadProgress) {
817 CheckUploadProgressDelegate delegate; 820 CheckUploadProgressDelegate delegate;
818 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 821 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
819 CreateSameThreadContextGetter()); 822 CreateSameThreadContextGetter());
820 // Use a chunked upload so that the upload can be paused after uploading data. 823 // Use a chunked upload so that the upload can be paused after uploading data.
821 // Since upload progress uses a timer, the delegate may not receive any 824 // Since upload progress uses a timer, the delegate may not receive any
822 // notification otherwise. 825 // notification otherwise.
823 delegate.fetcher()->SetChunkedUpload("application/x-www-form-urlencoded"); 826 delegate.fetcher()->SetChunkedUpload("application/x-www-form-urlencoded");
824 827
825 delegate.fetcher()->Start(); 828 delegate.fetcher()->Start();
826 // Append the first chunk. Others will be appended automatically in response 829 // Append the first chunk. Others will be appended automatically in response
827 // to OnURLFetchUploadProgress events. 830 // to OnURLFetchUploadProgress events.
828 delegate.MaybeAppendChunk(); 831 delegate.MaybeAppendChunk();
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
862 865
863 DISALLOW_COPY_AND_ASSIGN(CheckDownloadProgressDelegate); 866 DISALLOW_COPY_AND_ASSIGN(CheckDownloadProgressDelegate);
864 }; 867 };
865 868
866 TEST_F(URLFetcherTest, DownloadProgress) { 869 TEST_F(URLFetcherTest, DownloadProgress) {
867 // Get a file large enough to require more than one read into 870 // Get a file large enough to require more than one read into
868 // URLFetcher::Core's IOBuffer. 871 // URLFetcher::Core's IOBuffer.
869 const char kFileToFetch[] = "animate1.gif"; 872 const char kFileToFetch[] = "animate1.gif";
870 873
871 std::string file_contents; 874 std::string file_contents;
875
876 base::FilePath server_root;
877 PathService::Get(base::DIR_SOURCE_ROOT, &server_root);
878
872 ASSERT_TRUE(base::ReadFileToString( 879 ASSERT_TRUE(base::ReadFileToString(
873 test_server_->GetDocumentRoot().AppendASCII(kFileToFetch), 880 server_root.Append(base::FilePath(kDocRoot)).AppendASCII(kFileToFetch),
874 &file_contents)); 881 &file_contents));
875 882
876 CheckDownloadProgressDelegate delegate(file_contents.size()); 883 CheckDownloadProgressDelegate delegate(file_contents.size());
877 delegate.CreateFetcher( 884 delegate.CreateFetcher(
878 test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch), 885 test_server_->GetURL(std::string(kTestServerFilePrefix) + kFileToFetch),
879 URLFetcher::GET, CreateSameThreadContextGetter()); 886 URLFetcher::GET, CreateSameThreadContextGetter());
880 delegate.StartFetcherAndWait(); 887 delegate.StartFetcherAndWait();
881 888
882 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 889 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
883 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 890 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
(...skipping 14 matching lines...) Expand all
898 } 905 }
899 906
900 private: 907 private:
901 DISALLOW_COPY_AND_ASSIGN(CancelOnUploadProgressDelegate); 908 DISALLOW_COPY_AND_ASSIGN(CancelOnUploadProgressDelegate);
902 }; 909 };
903 910
904 // Check that a fetch can be safely cancelled/deleted during an upload progress 911 // Check that a fetch can be safely cancelled/deleted during an upload progress
905 // callback. 912 // callback.
906 TEST_F(URLFetcherTest, CancelInUploadProgressCallback) { 913 TEST_F(URLFetcherTest, CancelInUploadProgressCallback) {
907 CancelOnUploadProgressDelegate delegate; 914 CancelOnUploadProgressDelegate delegate;
908 delegate.CreateFetcher(test_server_->GetURL("echo"), URLFetcher::POST, 915 delegate.CreateFetcher(test_server_->GetURL("/echo"), URLFetcher::POST,
909 CreateSameThreadContextGetter()); 916 CreateSameThreadContextGetter());
910 delegate.fetcher()->SetChunkedUpload("application/x-www-form-urlencoded"); 917 delegate.fetcher()->SetChunkedUpload("application/x-www-form-urlencoded");
911 delegate.fetcher()->Start(); 918 delegate.fetcher()->Start();
912 // Use a chunked upload so that the upload can be paused after uploading data. 919 // Use a chunked upload so that the upload can be paused after uploading data.
913 // Since uploads progress uses a timer, may not receive any notification, 920 // Since uploads progress uses a timer, may not receive any notification,
914 // otherwise. 921 // otherwise.
915 std::string upload_data(1 << 16, 'a'); 922 std::string upload_data(1 << 16, 'a');
916 delegate.fetcher()->AppendChunkToUpload(upload_data, false); 923 delegate.fetcher()->AppendChunkToUpload(upload_data, false);
917 delegate.WaitForComplete(); 924 delegate.WaitForComplete();
918 925
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
953 // Make sure there are no pending events that cause problems when run. 960 // Make sure there are no pending events that cause problems when run.
954 base::RunLoop().RunUntilIdle(); 961 base::RunLoop().RunUntilIdle();
955 962
956 EXPECT_FALSE(delegate.did_complete()); 963 EXPECT_FALSE(delegate.did_complete());
957 EXPECT_FALSE(delegate.fetcher()); 964 EXPECT_FALSE(delegate.fetcher());
958 } 965 }
959 966
960 TEST_F(URLFetcherTest, Headers) { 967 TEST_F(URLFetcherTest, Headers) {
961 WaitingURLFetcherDelegate delegate; 968 WaitingURLFetcherDelegate delegate;
962 delegate.CreateFetcher( 969 delegate.CreateFetcher(
963 test_server_->GetURL("set-header?cache-control: private"), 970 test_server_->GetURL("/set-header?cache-control: private"),
964 URLFetcher::GET, CreateSameThreadContextGetter()); 971 URLFetcher::GET, CreateSameThreadContextGetter());
965 delegate.StartFetcherAndWait(); 972 delegate.StartFetcherAndWait();
966 973
967 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 974 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
968 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 975 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
969 std::string header; 976 std::string header;
970 ASSERT_TRUE(delegate.fetcher()->GetResponseHeaders()->GetNormalizedHeader( 977 ASSERT_TRUE(delegate.fetcher()->GetResponseHeaders()->GetNormalizedHeader(
971 "cache-control", &header)); 978 "cache-control", &header));
972 EXPECT_EQ("private", header); 979 EXPECT_EQ("private", header);
973 } 980 }
(...skipping 10 matching lines...) Expand all
984 delegate.fetcher()->GetSocketAddress().port()); 991 delegate.fetcher()->GetSocketAddress().port());
985 EXPECT_EQ(test_server_->host_port_pair().host(), 992 EXPECT_EQ(test_server_->host_port_pair().host(),
986 delegate.fetcher()->GetSocketAddress().host()); 993 delegate.fetcher()->GetSocketAddress().host());
987 } 994 }
988 995
989 TEST_F(URLFetcherTest, StopOnRedirect) { 996 TEST_F(URLFetcherTest, StopOnRedirect) {
990 const char kRedirectTarget[] = "http://redirect.target.com"; 997 const char kRedirectTarget[] = "http://redirect.target.com";
991 998
992 WaitingURLFetcherDelegate delegate; 999 WaitingURLFetcherDelegate delegate;
993 delegate.CreateFetcher( 1000 delegate.CreateFetcher(
994 test_server_->GetURL(std::string("server-redirect?") + kRedirectTarget), 1001 test_server_->GetURL(std::string("/server-redirect?") + kRedirectTarget),
995 URLFetcher::GET, CreateSameThreadContextGetter()); 1002 URLFetcher::GET, CreateSameThreadContextGetter());
996 delegate.fetcher()->SetStopOnRedirect(true); 1003 delegate.fetcher()->SetStopOnRedirect(true);
997 delegate.StartFetcherAndWait(); 1004 delegate.StartFetcherAndWait();
998 1005
999 EXPECT_EQ(GURL(kRedirectTarget), delegate.fetcher()->GetURL()); 1006 EXPECT_EQ(GURL(kRedirectTarget), delegate.fetcher()->GetURL());
1000 EXPECT_EQ(URLRequestStatus::CANCELED, 1007 EXPECT_EQ(URLRequestStatus::CANCELED,
1001 delegate.fetcher()->GetStatus().status()); 1008 delegate.fetcher()->GetStatus().status());
1002 EXPECT_EQ(ERR_ABORTED, delegate.fetcher()->GetStatus().error()); 1009 EXPECT_EQ(ERR_ABORTED, delegate.fetcher()->GetStatus().error());
1003 EXPECT_EQ(301, delegate.fetcher()->GetResponseCode()); 1010 EXPECT_EQ(301, delegate.fetcher()->GetResponseCode());
1004 } 1011 }
(...skipping 23 matching lines...) Expand all
1028 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 1035 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
1029 } 1036 }
1030 1037
1031 // 20 requests were sent. Due to throttling, they should have collectively 1038 // 20 requests were sent. Due to throttling, they should have collectively
1032 // taken over 1 second. 1039 // taken over 1 second.
1033 EXPECT_GE(Time::Now() - start_time, base::TimeDelta::FromSeconds(1)); 1040 EXPECT_GE(Time::Now() - start_time, base::TimeDelta::FromSeconds(1));
1034 } 1041 }
1035 1042
1036 TEST_F(URLFetcherTest, ThrottleOn5xxRetries) { 1043 TEST_F(URLFetcherTest, ThrottleOn5xxRetries) {
1037 base::Time start_time = Time::Now(); 1044 base::Time start_time = Time::Now();
1038 GURL url(test_server_->GetURL("files/server-unavailable.html")); 1045 GURL url(test_server_->GetURL("/server-unavailable.html"));
1039 1046
1040 scoped_refptr<FetcherTestURLRequestContextGetter> context_getter( 1047 scoped_refptr<FetcherTestURLRequestContextGetter> context_getter(
1041 CreateSameThreadContextGetter()); 1048 CreateSameThreadContextGetter());
1042 1049
1043 // Registers an entry for test url. The backoff time is calculated by: 1050 // Registers an entry for test url. The backoff time is calculated by:
1044 // new_backoff = 2.0 * old_backoff + 0 1051 // new_backoff = 2.0 * old_backoff + 0
1045 // and maximum backoff time is 256 milliseconds. 1052 // and maximum backoff time is 256 milliseconds.
1046 // Maximum retries allowed is set to 11. 1053 // Maximum retries allowed is set to 11.
1047 context_getter->AddThrottlerEntry( 1054 context_getter->AddThrottlerEntry(
1048 url, std::string() /* url_id */, 200 /* sliding_window_period_ms */, 1055 url, std::string() /* url_id */, 200 /* sliding_window_period_ms */,
(...skipping 16 matching lines...) Expand all
1065 1072
1066 // The request should have been retried 11 times (12 times including the first 1073 // The request should have been retried 11 times (12 times including the first
1067 // attempt). Due to throttling, they should have collectively taken over 1 1074 // attempt). Due to throttling, they should have collectively taken over 1
1068 // second. 1075 // second.
1069 EXPECT_GE(Time::Now() - start_time, base::TimeDelta::FromSeconds(1)); 1076 EXPECT_GE(Time::Now() - start_time, base::TimeDelta::FromSeconds(1));
1070 } 1077 }
1071 1078
1072 // Tests overload protection, when responses passed through. 1079 // Tests overload protection, when responses passed through.
1073 TEST_F(URLFetcherTest, ProtectTestPassedThrough) { 1080 TEST_F(URLFetcherTest, ProtectTestPassedThrough) {
1074 base::Time start_time = Time::Now(); 1081 base::Time start_time = Time::Now();
1075 GURL url(test_server_->GetURL("files/server-unavailable.html")); 1082 GURL url(test_server_->GetURL("/server-unavailable.html"));
1076 1083
1077 scoped_refptr<FetcherTestURLRequestContextGetter> context_getter( 1084 scoped_refptr<FetcherTestURLRequestContextGetter> context_getter(
1078 CreateSameThreadContextGetter()); 1085 CreateSameThreadContextGetter());
1079 1086
1080 // Registers an entry for test url. The backoff time is calculated by: 1087 // Registers an entry for test url. The backoff time is calculated by:
1081 // new_backoff = 2.0 * old_backoff + 0 1088 // new_backoff = 2.0 * old_backoff + 0
1082 // and maximum backoff time is 150000 milliseconds. 1089 // and maximum backoff time is 150000 milliseconds.
1083 // Maximum retries allowed is set to 11. 1090 // Maximum retries allowed is set to 11.
1084 // Total time if *not* for not doing automatic backoff would be 150s. 1091 // Total time if *not* for not doing automatic backoff would be 150s.
1085 // In reality it should be "as soon as server responds". 1092 // In reality it should be "as soon as server responds".
(...skipping 148 matching lines...) Expand 10 before | Expand all | Expand 10 after
1234 DISALLOW_COPY_AND_ASSIGN(ReuseFetcherDelegate); 1241 DISALLOW_COPY_AND_ASSIGN(ReuseFetcherDelegate);
1235 }; 1242 };
1236 1243
1237 TEST_F(URLFetcherTest, ReuseFetcherForSameURL) { 1244 TEST_F(URLFetcherTest, ReuseFetcherForSameURL) {
1238 // TODO(mmenke): It's really weird that this is supported, particularly 1245 // TODO(mmenke): It's really weird that this is supported, particularly
1239 // some fields can be modified between requests, but some (Like upload body) 1246 // some fields can be modified between requests, but some (Like upload body)
1240 // cannot be. Can we get rid of support for this? 1247 // cannot be. Can we get rid of support for this?
1241 scoped_refptr<URLRequestContextGetter> context_getter( 1248 scoped_refptr<URLRequestContextGetter> context_getter(
1242 CreateSameThreadContextGetter()); 1249 CreateSameThreadContextGetter());
1243 ReuseFetcherDelegate delegate(context_getter); 1250 ReuseFetcherDelegate delegate(context_getter);
1244 delegate.CreateFetcher(test_server_->GetURL("echoheader?test"), 1251 delegate.CreateFetcher(test_server_->GetURL("/echoheader?test"),
1245 URLFetcher::GET, context_getter); 1252 URLFetcher::GET, context_getter);
1246 delegate.fetcher()->SetExtraRequestHeaders("test: request1"); 1253 delegate.fetcher()->SetExtraRequestHeaders("test: request1");
1247 delegate.StartFetcherAndWait(); 1254 delegate.StartFetcherAndWait();
1248 1255
1249 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success()); 1256 EXPECT_TRUE(delegate.fetcher()->GetStatus().is_success());
1250 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode()); 1257 EXPECT_EQ(200, delegate.fetcher()->GetResponseCode());
1251 std::string data; 1258 std::string data;
1252 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 1259 ASSERT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
1253 EXPECT_EQ("request2", data); 1260 EXPECT_EQ("request2", data);
1254 } 1261 }
(...skipping 162 matching lines...) Expand 10 before | Expand all | Expand 10 after
1417 EXPECT_EQ(-1, delegate.fetcher()->GetResponseCode()); 1424 EXPECT_EQ(-1, delegate.fetcher()->GetResponseCode());
1418 EXPECT_TRUE(delegate.fetcher()->GetCookies().empty()); 1425 EXPECT_TRUE(delegate.fetcher()->GetCookies().empty());
1419 std::string data; 1426 std::string data;
1420 EXPECT_TRUE(delegate.fetcher()->GetResponseAsString(&data)); 1427 EXPECT_TRUE(delegate.fetcher()->GetResponseAsString(&data));
1421 EXPECT_TRUE(data.empty()); 1428 EXPECT_TRUE(data.empty());
1422 } 1429 }
1423 1430
1424 } // namespace 1431 } // namespace
1425 1432
1426 } // namespace net 1433 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698