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

Side by Side Diff: net/http/http_network_transaction_unittest.cc

Issue 8156001: net: rework the NPN patch. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: ... Created 9 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/http/http_network_transaction.h" 5 #include "net/http/http_network_transaction.h"
6 6
7 #include <math.h> // ceil 7 #include <math.h> // ceil
8 #include <stdarg.h>
9 #include <string>
8 #include <vector> 10 #include <vector>
9 11
10 #include "base/basictypes.h" 12 #include "base/basictypes.h"
11 #include "base/compiler_specific.h" 13 #include "base/compiler_specific.h"
12 #include "base/file_path.h" 14 #include "base/file_path.h"
13 #include "base/file_util.h" 15 #include "base/file_util.h"
14 #include "base/memory/scoped_ptr.h" 16 #include "base/memory/scoped_ptr.h"
15 #include "base/metrics/histogram.h" 17 #include "base/metrics/histogram.h"
16 #include "base/test/test_file_util.h" 18 #include "base/test/test_file_util.h"
17 #include "base/utf_string_conversions.h" 19 #include "base/utf_string_conversions.h"
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
64 const string16 kFoo3(ASCIIToUTF16("foo3")); 66 const string16 kFoo3(ASCIIToUTF16("foo3"));
65 const string16 kFou(ASCIIToUTF16("fou")); 67 const string16 kFou(ASCIIToUTF16("fou"));
66 const string16 kSecond(ASCIIToUTF16("second")); 68 const string16 kSecond(ASCIIToUTF16("second"));
67 const string16 kTestingNTLM(ASCIIToUTF16("testing-ntlm")); 69 const string16 kTestingNTLM(ASCIIToUTF16("testing-ntlm"));
68 const string16 kWrongPassword(ASCIIToUTF16("wrongpassword")); 70 const string16 kWrongPassword(ASCIIToUTF16("wrongpassword"));
69 71
70 } // namespace 72 } // namespace
71 73
72 namespace net { 74 namespace net {
73 75
76 // MakeNextProtos is a utility function that returns a vector of std::strings
77 // from its arguments. Don't forget to terminate the argument list with a NULL.
78 static std::vector<std::string> MakeNextProtos(const char* a, ...) {
79 std::vector<std::string> ret;
80 ret.push_back(a);
81
82 va_list args;
83 va_start(args, a);
84
85 for (;;) {
86 const char* value = va_arg(args, const char*);
87 if (value == NULL)
88 break;
89 ret.push_back(value);
90 }
91 va_end(args);
92
93 return ret;
94 }
95
96 // SpdyNextProtos returns a vector of NPN protocol strings for negotiating
97 // SPDY.
98 static std::vector<std::string> SpdyNextProtos() {
99 return MakeNextProtos("http/1.1", "spdy/2", NULL);
100 }
wtc 2011/10/11 23:43:04 I suggest moving these two functions into the anon
agl 2011/10/17 17:37:24 Done.
101
74 // Helper to manage the lifetimes of the dependencies for a 102 // Helper to manage the lifetimes of the dependencies for a
75 // HttpNetworkTransaction. 103 // HttpNetworkTransaction.
76 struct SessionDependencies { 104 struct SessionDependencies {
77 // Default set of dependencies -- "null" proxy service. 105 // Default set of dependencies -- "null" proxy service.
78 SessionDependencies() 106 SessionDependencies()
79 : host_resolver(new MockHostResolver), 107 : host_resolver(new MockHostResolver),
80 cert_verifier(new CertVerifier), 108 cert_verifier(new CertVerifier),
81 proxy_service(ProxyService::CreateDirect()), 109 proxy_service(ProxyService::CreateDirect()),
82 ssl_config_service(new SSLConfigServiceDefaults), 110 ssl_config_service(new SSLConfigServiceDefaults),
83 http_auth_handler_factory( 111 http_auth_handler_factory(
(...skipping 240 matching lines...) Expand 10 before | Expand all | Expand 10 after
324 CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool( 352 CaptureGroupNameSSLSocketPool::CaptureGroupNameSocketPool(
325 HostResolver* host_resolver, 353 HostResolver* host_resolver,
326 CertVerifier* cert_verifier) 354 CertVerifier* cert_verifier)
327 : SSLClientSocketPool(0, 0, NULL, host_resolver, cert_verifier, NULL, NULL, 355 : SSLClientSocketPool(0, 0, NULL, host_resolver, cert_verifier, NULL, NULL,
328 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) {} 356 NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL) {}
329 357
330 //----------------------------------------------------------------------------- 358 //-----------------------------------------------------------------------------
331 359
332 // This is the expected list of advertised protocols from the browser's NPN 360 // This is the expected list of advertised protocols from the browser's NPN
333 // list. 361 // list.
334 static const char kExpectedNPNString[] = "\x08http/1.1\x06spdy/2"; 362 static const char kExpectedNPNString[] = "\x08http/1.1\x06spdy/2";
wtc 2011/10/11 23:43:04 kExpectedNPNString can be removed now.
agl 2011/10/17 17:37:24 Done.
335 363
336 // This is the expected return from a current server advertising SPDY. 364 // This is the expected return from a current server advertising SPDY.
337 static const char kAlternateProtocolHttpHeader[] = 365 static const char kAlternateProtocolHttpHeader[] =
338 "Alternate-Protocol: 443:npn-spdy/2\r\n\r\n"; 366 "Alternate-Protocol: 443:npn-spdy/2\r\n\r\n";
339 367
340 // Helper functions for validating that AuthChallengeInfo's are correctly 368 // Helper functions for validating that AuthChallengeInfo's are correctly
341 // configured for common cases. 369 // configured for common cases.
342 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) { 370 bool CheckBasicServerAuth(const AuthChallengeInfo* auth_challenge) {
343 if (!auth_challenge) 371 if (!auth_challenge)
344 return false; 372 return false;
(...skipping 6117 matching lines...) Expand 10 before | Expand all | Expand 10 after
6462 rv = trans->RestartWithAuth(kFirst, kBar, &callback4); 6490 rv = trans->RestartWithAuth(kFirst, kBar, &callback4);
6463 EXPECT_EQ(ERR_IO_PENDING, rv); 6491 EXPECT_EQ(ERR_IO_PENDING, rv);
6464 rv = callback4.WaitForResult(); 6492 rv = callback4.WaitForResult();
6465 EXPECT_EQ(OK, rv); 6493 EXPECT_EQ(OK, rv);
6466 response = trans->GetResponseInfo(); 6494 response = trans->GetResponseInfo();
6467 ASSERT_TRUE(response != NULL); 6495 ASSERT_TRUE(response != NULL);
6468 EXPECT_TRUE(response->auth_challenge.get() == NULL); 6496 EXPECT_TRUE(response->auth_challenge.get() == NULL);
6469 } 6497 }
6470 6498
6471 TEST_F(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) { 6499 TEST_F(HttpNetworkTransactionTest, HonorAlternateProtocolHeader) {
6472 HttpStreamFactory::set_next_protos("needs_to_be_set_for_this_test"); 6500 HttpStreamFactory::set_next_protos(MakeNextProtos("foo", "bar", NULL));
6473 HttpStreamFactory::set_use_alternate_protocols(true); 6501 HttpStreamFactory::set_use_alternate_protocols(true);
6474 6502
6475 SessionDependencies session_deps; 6503 SessionDependencies session_deps;
6476 6504
6477 MockRead data_reads[] = { 6505 MockRead data_reads[] = {
6478 MockRead("HTTP/1.1 200 OK\r\n"), 6506 MockRead("HTTP/1.1 200 OK\r\n"),
6479 MockRead(kAlternateProtocolHttpHeader), 6507 MockRead(kAlternateProtocolHttpHeader),
6480 MockRead("hello world"), 6508 MockRead("hello world"),
6481 MockRead(false, OK), 6509 MockRead(false, OK),
6482 }; 6510 };
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after
6519 6547
6520 ASSERT_TRUE(alternate_protocols.HasAlternateProtocolFor(http_host_port_pair)); 6548 ASSERT_TRUE(alternate_protocols.HasAlternateProtocolFor(http_host_port_pair));
6521 const HttpAlternateProtocols::PortProtocolPair alternate = 6549 const HttpAlternateProtocols::PortProtocolPair alternate =
6522 alternate_protocols.GetAlternateProtocolFor(http_host_port_pair); 6550 alternate_protocols.GetAlternateProtocolFor(http_host_port_pair);
6523 HttpAlternateProtocols::PortProtocolPair expected_alternate; 6551 HttpAlternateProtocols::PortProtocolPair expected_alternate;
6524 expected_alternate.port = 443; 6552 expected_alternate.port = 443;
6525 expected_alternate.protocol = HttpAlternateProtocols::NPN_SPDY_2; 6553 expected_alternate.protocol = HttpAlternateProtocols::NPN_SPDY_2;
6526 EXPECT_TRUE(expected_alternate.Equals(alternate)); 6554 EXPECT_TRUE(expected_alternate.Equals(alternate));
6527 6555
6528 HttpStreamFactory::set_use_alternate_protocols(false); 6556 HttpStreamFactory::set_use_alternate_protocols(false);
6529 HttpStreamFactory::set_next_protos(""); 6557 HttpStreamFactory::set_next_protos(std::vector<std::string>());
6530 } 6558 }
6531 6559
6532 TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) { 6560 TEST_F(HttpNetworkTransactionTest, MarkBrokenAlternateProtocolAndFallback) {
6533 HttpStreamFactory::set_use_alternate_protocols(true); 6561 HttpStreamFactory::set_use_alternate_protocols(true);
6534 SessionDependencies session_deps; 6562 SessionDependencies session_deps;
6535 6563
6536 HttpRequestInfo request; 6564 HttpRequestInfo request;
6537 request.method = "GET"; 6565 request.method = "GET";
6538 request.url = GURL("http://www.google.com/"); 6566 request.url = GURL("http://www.google.com/");
6539 request.load_flags = 0; 6567 request.load_flags = 0;
(...skipping 235 matching lines...) Expand 10 before | Expand all | Expand 10 after
6775 int rv = trans->Start(&unrestricted_port_request, &callback, BoundNetLog()); 6803 int rv = trans->Start(&unrestricted_port_request, &callback, BoundNetLog());
6776 EXPECT_EQ(ERR_IO_PENDING, rv); 6804 EXPECT_EQ(ERR_IO_PENDING, rv);
6777 // Valid change to an unrestricted port should pass. 6805 // Valid change to an unrestricted port should pass.
6778 EXPECT_EQ(OK, callback.WaitForResult()); 6806 EXPECT_EQ(OK, callback.WaitForResult());
6779 6807
6780 HttpStreamFactory::set_use_alternate_protocols(false); 6808 HttpStreamFactory::set_use_alternate_protocols(false);
6781 } 6809 }
6782 6810
6783 TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) { 6811 TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForNpnSpdy) {
6784 HttpStreamFactory::set_use_alternate_protocols(true); 6812 HttpStreamFactory::set_use_alternate_protocols(true);
6785 HttpStreamFactory::set_next_protos(kExpectedNPNString); 6813 HttpStreamFactory::set_next_protos(SpdyNextProtos());
6786 SessionDependencies session_deps; 6814 SessionDependencies session_deps;
6787 6815
6788 HttpRequestInfo request; 6816 HttpRequestInfo request;
6789 request.method = "GET"; 6817 request.method = "GET";
6790 request.url = GURL("http://www.google.com/"); 6818 request.url = GURL("http://www.google.com/");
6791 request.load_flags = 0; 6819 request.load_flags = 0;
6792 6820
6793 MockRead data_reads[] = { 6821 MockRead data_reads[] = {
6794 MockRead("HTTP/1.1 200 OK\r\n"), 6822 MockRead("HTTP/1.1 200 OK\r\n"),
6795 MockRead(kAlternateProtocolHttpHeader), 6823 MockRead(kAlternateProtocolHttpHeader),
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after
6860 response = trans->GetResponseInfo(); 6888 response = trans->GetResponseInfo();
6861 ASSERT_TRUE(response != NULL); 6889 ASSERT_TRUE(response != NULL);
6862 ASSERT_TRUE(response->headers != NULL); 6890 ASSERT_TRUE(response->headers != NULL);
6863 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 6891 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
6864 EXPECT_TRUE(response->was_fetched_via_spdy); 6892 EXPECT_TRUE(response->was_fetched_via_spdy);
6865 EXPECT_TRUE(response->was_npn_negotiated); 6893 EXPECT_TRUE(response->was_npn_negotiated);
6866 6894
6867 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 6895 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
6868 EXPECT_EQ("hello!", response_data); 6896 EXPECT_EQ("hello!", response_data);
6869 6897
6870 HttpStreamFactory::set_next_protos(""); 6898 HttpStreamFactory::set_next_protos(std::vector<std::string>());
6871 HttpStreamFactory::set_use_alternate_protocols(false); 6899 HttpStreamFactory::set_use_alternate_protocols(false);
6872 } 6900 }
6873 6901
6874 TEST_F(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) { 6902 TEST_F(HttpNetworkTransactionTest, AlternateProtocolWithSpdyLateBinding) {
6875 HttpStreamFactory::set_use_alternate_protocols(true); 6903 HttpStreamFactory::set_use_alternate_protocols(true);
6876 HttpStreamFactory::set_next_protos(kExpectedNPNString); 6904 HttpStreamFactory::set_next_protos(SpdyNextProtos());
6877 SessionDependencies session_deps; 6905 SessionDependencies session_deps;
6878 6906
6879 HttpRequestInfo request; 6907 HttpRequestInfo request;
6880 request.method = "GET"; 6908 request.method = "GET";
6881 request.url = GURL("http://www.google.com/"); 6909 request.url = GURL("http://www.google.com/");
6882 request.load_flags = 0; 6910 request.load_flags = 0;
6883 6911
6884 MockRead data_reads[] = { 6912 MockRead data_reads[] = {
6885 MockRead("HTTP/1.1 200 OK\r\n"), 6913 MockRead("HTTP/1.1 200 OK\r\n"),
6886 MockRead(kAlternateProtocolHttpHeader), 6914 MockRead(kAlternateProtocolHttpHeader),
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
6978 7006
6979 response = trans3.GetResponseInfo(); 7007 response = trans3.GetResponseInfo();
6980 ASSERT_TRUE(response != NULL); 7008 ASSERT_TRUE(response != NULL);
6981 ASSERT_TRUE(response->headers != NULL); 7009 ASSERT_TRUE(response->headers != NULL);
6982 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 7010 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
6983 EXPECT_TRUE(response->was_fetched_via_spdy); 7011 EXPECT_TRUE(response->was_fetched_via_spdy);
6984 EXPECT_TRUE(response->was_npn_negotiated); 7012 EXPECT_TRUE(response->was_npn_negotiated);
6985 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data)); 7013 ASSERT_EQ(OK, ReadTransaction(&trans3, &response_data));
6986 EXPECT_EQ("hello!", response_data); 7014 EXPECT_EQ("hello!", response_data);
6987 7015
6988 HttpStreamFactory::set_next_protos(""); 7016 HttpStreamFactory::set_next_protos(std::vector<std::string>());
6989 HttpStreamFactory::set_use_alternate_protocols(false); 7017 HttpStreamFactory::set_use_alternate_protocols(false);
6990 } 7018 }
6991 7019
6992 TEST_F(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) { 7020 TEST_F(HttpNetworkTransactionTest, StallAlternateProtocolForNpnSpdy) {
6993 HttpStreamFactory::set_use_alternate_protocols(true); 7021 HttpStreamFactory::set_use_alternate_protocols(true);
6994 HttpStreamFactory::set_next_protos(kExpectedNPNString); 7022 HttpStreamFactory::set_next_protos(SpdyNextProtos());
6995 SessionDependencies session_deps; 7023 SessionDependencies session_deps;
6996 7024
6997 HttpRequestInfo request; 7025 HttpRequestInfo request;
6998 request.method = "GET"; 7026 request.method = "GET";
6999 request.url = GURL("http://www.google.com/"); 7027 request.url = GURL("http://www.google.com/");
7000 request.load_flags = 0; 7028 request.load_flags = 0;
7001 7029
7002 MockRead data_reads[] = { 7030 MockRead data_reads[] = {
7003 MockRead("HTTP/1.1 200 OK\r\n"), 7031 MockRead("HTTP/1.1 200 OK\r\n"),
7004 MockRead(kAlternateProtocolHttpHeader), 7032 MockRead(kAlternateProtocolHttpHeader),
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
7054 response = trans->GetResponseInfo(); 7082 response = trans->GetResponseInfo();
7055 ASSERT_TRUE(response != NULL); 7083 ASSERT_TRUE(response != NULL);
7056 ASSERT_TRUE(response->headers != NULL); 7084 ASSERT_TRUE(response->headers != NULL);
7057 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 7085 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
7058 EXPECT_FALSE(response->was_fetched_via_spdy); 7086 EXPECT_FALSE(response->was_fetched_via_spdy);
7059 EXPECT_FALSE(response->was_npn_negotiated); 7087 EXPECT_FALSE(response->was_npn_negotiated);
7060 7088
7061 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 7089 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
7062 EXPECT_EQ("hello world", response_data); 7090 EXPECT_EQ("hello world", response_data);
7063 7091
7064 HttpStreamFactory::set_next_protos(""); 7092 HttpStreamFactory::set_next_protos(std::vector<std::string>());
7065 HttpStreamFactory::set_use_alternate_protocols(false); 7093 HttpStreamFactory::set_use_alternate_protocols(false);
7066 } 7094 }
7067 7095
7068 class CapturingProxyResolver : public ProxyResolver { 7096 class CapturingProxyResolver : public ProxyResolver {
7069 public: 7097 public:
7070 CapturingProxyResolver() : ProxyResolver(false /* expects_pac_bytes */) {} 7098 CapturingProxyResolver() : ProxyResolver(false /* expects_pac_bytes */) {}
7071 virtual ~CapturingProxyResolver() {} 7099 virtual ~CapturingProxyResolver() {}
7072 7100
7073 virtual int GetProxyForURL(const GURL& url, 7101 virtual int GetProxyForURL(const GURL& url,
7074 ProxyInfo* results, 7102 ProxyInfo* results,
(...skipping 23 matching lines...) Expand all
7098 const std::vector<GURL>& resolved() const { return resolved_; } 7126 const std::vector<GURL>& resolved() const { return resolved_; }
7099 7127
7100 private: 7128 private:
7101 std::vector<GURL> resolved_; 7129 std::vector<GURL> resolved_;
7102 7130
7103 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver); 7131 DISALLOW_COPY_AND_ASSIGN(CapturingProxyResolver);
7104 }; 7132 };
7105 7133
7106 TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForTunneledNpnSpdy) { 7134 TEST_F(HttpNetworkTransactionTest, UseAlternateProtocolForTunneledNpnSpdy) {
7107 HttpStreamFactory::set_use_alternate_protocols(true); 7135 HttpStreamFactory::set_use_alternate_protocols(true);
7108 HttpStreamFactory::set_next_protos(kExpectedNPNString); 7136 HttpStreamFactory::set_next_protos(SpdyNextProtos());
7109 7137
7110 ProxyConfig proxy_config; 7138 ProxyConfig proxy_config;
7111 proxy_config.set_auto_detect(true); 7139 proxy_config.set_auto_detect(true);
7112 proxy_config.set_pac_url(GURL("http://fooproxyurl")); 7140 proxy_config.set_pac_url(GURL("http://fooproxyurl"));
7113 7141
7114 CapturingProxyResolver* capturing_proxy_resolver = 7142 CapturingProxyResolver* capturing_proxy_resolver =
7115 new CapturingProxyResolver(); 7143 new CapturingProxyResolver();
7116 SessionDependencies session_deps(new ProxyService( 7144 SessionDependencies session_deps(new ProxyService(
7117 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver, 7145 new ProxyConfigServiceFixed(proxy_config), capturing_proxy_resolver,
7118 NULL)); 7146 NULL));
(...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after
7206 EXPECT_TRUE(response->was_npn_negotiated); 7234 EXPECT_TRUE(response->was_npn_negotiated);
7207 7235
7208 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 7236 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
7209 EXPECT_EQ("hello!", response_data); 7237 EXPECT_EQ("hello!", response_data);
7210 ASSERT_EQ(3u, capturing_proxy_resolver->resolved().size()); 7238 ASSERT_EQ(3u, capturing_proxy_resolver->resolved().size());
7211 EXPECT_EQ("http://www.google.com/", 7239 EXPECT_EQ("http://www.google.com/",
7212 capturing_proxy_resolver->resolved()[0].spec()); 7240 capturing_proxy_resolver->resolved()[0].spec());
7213 EXPECT_EQ("https://www.google.com/", 7241 EXPECT_EQ("https://www.google.com/",
7214 capturing_proxy_resolver->resolved()[1].spec()); 7242 capturing_proxy_resolver->resolved()[1].spec());
7215 7243
7216 HttpStreamFactory::set_next_protos(""); 7244 HttpStreamFactory::set_next_protos(std::vector<std::string>());
7217 HttpStreamFactory::set_use_alternate_protocols(false); 7245 HttpStreamFactory::set_use_alternate_protocols(false);
7218 } 7246 }
7219 7247
7220 TEST_F(HttpNetworkTransactionTest, 7248 TEST_F(HttpNetworkTransactionTest,
7221 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) { 7249 UseAlternateProtocolForNpnSpdyWithExistingSpdySession) {
7222 HttpStreamFactory::set_use_alternate_protocols(true); 7250 HttpStreamFactory::set_use_alternate_protocols(true);
7223 HttpStreamFactory::set_next_protos(kExpectedNPNString); 7251 HttpStreamFactory::set_next_protos(SpdyNextProtos());
7224 SessionDependencies session_deps; 7252 SessionDependencies session_deps;
7225 7253
7226 HttpRequestInfo request; 7254 HttpRequestInfo request;
7227 request.method = "GET"; 7255 request.method = "GET";
7228 request.url = GURL("http://www.google.com/"); 7256 request.url = GURL("http://www.google.com/");
7229 request.load_flags = 0; 7257 request.load_flags = 0;
7230 7258
7231 MockRead data_reads[] = { 7259 MockRead data_reads[] = {
7232 MockRead("HTTP/1.1 200 OK\r\n"), 7260 MockRead("HTTP/1.1 200 OK\r\n"),
7233 MockRead(kAlternateProtocolHttpHeader), 7261 MockRead(kAlternateProtocolHttpHeader),
(...skipping 91 matching lines...) Expand 10 before | Expand all | Expand 10 after
7325 response = trans->GetResponseInfo(); 7353 response = trans->GetResponseInfo();
7326 ASSERT_TRUE(response != NULL); 7354 ASSERT_TRUE(response != NULL);
7327 ASSERT_TRUE(response->headers != NULL); 7355 ASSERT_TRUE(response->headers != NULL);
7328 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 7356 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
7329 EXPECT_TRUE(response->was_fetched_via_spdy); 7357 EXPECT_TRUE(response->was_fetched_via_spdy);
7330 EXPECT_TRUE(response->was_npn_negotiated); 7358 EXPECT_TRUE(response->was_npn_negotiated);
7331 7359
7332 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 7360 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
7333 EXPECT_EQ("hello!", response_data); 7361 EXPECT_EQ("hello!", response_data);
7334 7362
7335 HttpStreamFactory::set_next_protos(""); 7363 HttpStreamFactory::set_next_protos(std::vector<std::string>());
7336 HttpStreamFactory::set_use_alternate_protocols(false); 7364 HttpStreamFactory::set_use_alternate_protocols(false);
7337 } 7365 }
7338 7366
7339 // GenerateAuthToken is a mighty big test. 7367 // GenerateAuthToken is a mighty big test.
7340 // It tests all permutation of GenerateAuthToken behavior: 7368 // It tests all permutation of GenerateAuthToken behavior:
7341 // - Synchronous and Asynchronous completion. 7369 // - Synchronous and Asynchronous completion.
7342 // - OK or error on completion. 7370 // - OK or error on completion.
7343 // - Direct connection, non-authenticating proxy, and authenticating proxy. 7371 // - Direct connection, non-authenticating proxy, and authenticating proxy.
7344 // - HTTP or HTTPS backend (to include proxy tunneling). 7372 // - HTTP or HTTPS backend (to include proxy tunneling).
7345 // - Non-authenticating and authenticating backend. 7373 // - Non-authenticating and authenticating backend.
(...skipping 695 matching lines...) Expand 10 before | Expand all | Expand 10 after
8041 8069
8042 std::string response_data; 8070 std::string response_data;
8043 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 8071 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
8044 EXPECT_EQ("ok.", response_data); 8072 EXPECT_EQ("ok.", response_data);
8045 } 8073 }
8046 8074
8047 // This tests the case that a request is issued via http instead of spdy after 8075 // This tests the case that a request is issued via http instead of spdy after
8048 // npn is negotiated. 8076 // npn is negotiated.
8049 TEST_F(HttpNetworkTransactionTest, NpnWithHttpOverSSL) { 8077 TEST_F(HttpNetworkTransactionTest, NpnWithHttpOverSSL) {
8050 HttpStreamFactory::set_use_alternate_protocols(true); 8078 HttpStreamFactory::set_use_alternate_protocols(true);
8051 HttpStreamFactory::set_next_protos("\x08http/1.1\x07http1.1"); 8079 HttpStreamFactory::set_next_protos(
8080 MakeNextProtos("http/1.1", "http1.1", NULL));
8052 SessionDependencies session_deps; 8081 SessionDependencies session_deps;
8053 HttpRequestInfo request; 8082 HttpRequestInfo request;
8054 request.method = "GET"; 8083 request.method = "GET";
8055 request.url = GURL("https://www.google.com/"); 8084 request.url = GURL("https://www.google.com/");
8056 request.load_flags = 0; 8085 request.load_flags = 0;
8057 8086
8058 MockWrite data_writes[] = { 8087 MockWrite data_writes[] = {
8059 MockWrite("GET / HTTP/1.1\r\n" 8088 MockWrite("GET / HTTP/1.1\r\n"
8060 "Host: www.google.com\r\n" 8089 "Host: www.google.com\r\n"
8061 "Connection: keep-alive\r\n\r\n"), 8090 "Connection: keep-alive\r\n\r\n"),
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
8093 ASSERT_TRUE(response->headers != NULL); 8122 ASSERT_TRUE(response->headers != NULL);
8094 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 8123 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
8095 8124
8096 std::string response_data; 8125 std::string response_data;
8097 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data)); 8126 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
8098 EXPECT_EQ("hello world", response_data); 8127 EXPECT_EQ("hello world", response_data);
8099 8128
8100 EXPECT_FALSE(response->was_fetched_via_spdy); 8129 EXPECT_FALSE(response->was_fetched_via_spdy);
8101 EXPECT_TRUE(response->was_npn_negotiated); 8130 EXPECT_TRUE(response->was_npn_negotiated);
8102 8131
8103 HttpStreamFactory::set_next_protos(""); 8132 HttpStreamFactory::set_next_protos(std::vector<std::string>());
8104 HttpStreamFactory::set_use_alternate_protocols(false); 8133 HttpStreamFactory::set_use_alternate_protocols(false);
8105 } 8134 }
8106 8135
8107 TEST_F(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) { 8136 TEST_F(HttpNetworkTransactionTest, SpdyPostNPNServerHangup) {
8108 // Simulate the SSL handshake completing with an NPN negotiation 8137 // Simulate the SSL handshake completing with an NPN negotiation
8109 // followed by an immediate server closing of the socket. 8138 // followed by an immediate server closing of the socket.
8110 // Fix crash: http://crbug.com/46369 8139 // Fix crash: http://crbug.com/46369
8111 HttpStreamFactory::set_use_alternate_protocols(true); 8140 HttpStreamFactory::set_use_alternate_protocols(true);
8112 HttpStreamFactory::set_next_protos(kExpectedNPNString); 8141 HttpStreamFactory::set_next_protos(SpdyNextProtos());
8113 SessionDependencies session_deps; 8142 SessionDependencies session_deps;
8114 8143
8115 HttpRequestInfo request; 8144 HttpRequestInfo request;
8116 request.method = "GET"; 8145 request.method = "GET";
8117 request.url = GURL("https://www.google.com/"); 8146 request.url = GURL("https://www.google.com/");
8118 request.load_flags = 0; 8147 request.load_flags = 0;
8119 8148
8120 SSLSocketDataProvider ssl(true, OK); 8149 SSLSocketDataProvider ssl(true, OK);
8121 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated; 8150 ssl.next_proto_status = SSLClientSocket::kNextProtoNegotiated;
8122 ssl.next_proto = "spdy/2"; 8151 ssl.next_proto = "spdy/2";
(...skipping 16 matching lines...) Expand all
8139 8168
8140 TestOldCompletionCallback callback; 8169 TestOldCompletionCallback callback;
8141 8170
8142 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps)); 8171 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
8143 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session)); 8172 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session));
8144 8173
8145 int rv = trans->Start(&request, &callback, BoundNetLog()); 8174 int rv = trans->Start(&request, &callback, BoundNetLog());
8146 EXPECT_EQ(ERR_IO_PENDING, rv); 8175 EXPECT_EQ(ERR_IO_PENDING, rv);
8147 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult()); 8176 EXPECT_EQ(ERR_CONNECTION_CLOSED, callback.WaitForResult());
8148 8177
8149 HttpStreamFactory::set_next_protos(""); 8178 HttpStreamFactory::set_next_protos(std::vector<std::string>());
8150 HttpStreamFactory::set_use_alternate_protocols(false); 8179 HttpStreamFactory::set_use_alternate_protocols(false);
8151 } 8180 }
8152 8181
8153 TEST_F(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) { 8182 TEST_F(HttpNetworkTransactionTest, SpdyAlternateProtocolThroughProxy) {
8154 // This test ensures that the URL passed into the proxy is upgraded 8183 // This test ensures that the URL passed into the proxy is upgraded
8155 // to https when doing an Alternate Protocol upgrade. 8184 // to https when doing an Alternate Protocol upgrade.
8156 HttpStreamFactory::set_use_alternate_protocols(true); 8185 HttpStreamFactory::set_use_alternate_protocols(true);
8157 HttpStreamFactory::set_next_protos( 8186 HttpStreamFactory::set_next_protos(
8158 "\x08http/1.1\x07http1.1\x06spdy/2\x04spdy"); 8187 MakeNextProtos("http/1.1", "http1.1", "spdy/2", "spdy", NULL));
8159 8188
8160 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70")); 8189 SessionDependencies session_deps(ProxyService::CreateFixed("myproxy:70"));
8161 HttpAuthHandlerMock::Factory* auth_factory = 8190 HttpAuthHandlerMock::Factory* auth_factory =
8162 new HttpAuthHandlerMock::Factory(); 8191 new HttpAuthHandlerMock::Factory();
8163 HttpAuthHandlerMock* auth_handler = new HttpAuthHandlerMock(); 8192 HttpAuthHandlerMock* auth_handler = new HttpAuthHandlerMock();
8164 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY); 8193 auth_factory->AddMockHandler(auth_handler, HttpAuth::AUTH_PROXY);
8165 auth_factory->set_do_init_from_challenge(true); 8194 auth_factory->set_do_init_from_challenge(true);
8166 session_deps.http_auth_handler_factory.reset(auth_factory); 8195 session_deps.http_auth_handler_factory.reset(auth_factory);
8167 8196
8168 HttpRequestInfo request; 8197 HttpRequestInfo request;
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
8289 rv = trans_2->RestartWithAuth(kFoo, kBar, &callback_3); 8318 rv = trans_2->RestartWithAuth(kFoo, kBar, &callback_3);
8290 EXPECT_EQ(ERR_IO_PENDING, rv); 8319 EXPECT_EQ(ERR_IO_PENDING, rv);
8291 EXPECT_EQ(OK, callback_3.WaitForResult()); 8320 EXPECT_EQ(OK, callback_3.WaitForResult());
8292 8321
8293 // After all that work, these two lines (or actually, just the scheme) are 8322 // After all that work, these two lines (or actually, just the scheme) are
8294 // what this test is all about. Make sure it happens correctly. 8323 // what this test is all about. Make sure it happens correctly.
8295 const GURL& request_url = auth_handler->request_url(); 8324 const GURL& request_url = auth_handler->request_url();
8296 EXPECT_EQ("https", request_url.scheme()); 8325 EXPECT_EQ("https", request_url.scheme());
8297 EXPECT_EQ("www.google.com", request_url.host()); 8326 EXPECT_EQ("www.google.com", request_url.host());
8298 8327
8299 HttpStreamFactory::set_next_protos(""); 8328 HttpStreamFactory::set_next_protos(std::vector<std::string>());
8300 HttpStreamFactory::set_use_alternate_protocols(false); 8329 HttpStreamFactory::set_use_alternate_protocols(false);
8301 } 8330 }
8302 8331
8303 // Test that if we cancel the transaction as the connection is completing, that 8332 // Test that if we cancel the transaction as the connection is completing, that
8304 // everything tears down correctly. 8333 // everything tears down correctly.
8305 TEST_F(HttpNetworkTransactionTest, SimpleCancel) { 8334 TEST_F(HttpNetworkTransactionTest, SimpleCancel) {
8306 // Setup everything about the connection to complete synchronously, so that 8335 // Setup everything about the connection to complete synchronously, so that
8307 // after calling HttpNetworkTransaction::Start, the only thing we're waiting 8336 // after calling HttpNetworkTransaction::Start, the only thing we're waiting
8308 // for is the callback from the HttpStreamRequest. 8337 // for is the callback from the HttpStreamRequest.
8309 // Then cancel the transaction. 8338 // Then cancel the transaction.
(...skipping 630 matching lines...) Expand 10 before | Expand all | Expand 10 after
8940 // MockClientSocket::GetPeerAddress but that returns 192.0.2.33 whereas 8969 // MockClientSocket::GetPeerAddress but that returns 192.0.2.33 whereas
8941 // MockHostResolver returns 127.0.0.1 (MockHostResolverBase::Reset). So we use 8970 // MockHostResolver returns 127.0.0.1 (MockHostResolverBase::Reset). So we use
8942 // the first address (127.0.0.1) returned by MockHostResolver as an alias for 8971 // the first address (127.0.0.1) returned by MockHostResolver as an alias for
8943 // the |pair|. 8972 // the |pair|.
8944 const addrinfo* address = addresses.head(); 8973 const addrinfo* address = addresses.head();
8945 pool_peer->AddAlias(address, pair); 8974 pool_peer->AddAlias(address, pair);
8946 } 8975 }
8947 8976
8948 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) { 8977 TEST_F(HttpNetworkTransactionTest, UseIPConnectionPooling) {
8949 HttpStreamFactory::set_use_alternate_protocols(true); 8978 HttpStreamFactory::set_use_alternate_protocols(true);
8950 HttpStreamFactory::set_next_protos(kExpectedNPNString); 8979 HttpStreamFactory::set_next_protos(SpdyNextProtos());
8951 8980
8952 // Set up a special HttpNetworkSession with a MockCachingHostResolver. 8981 // Set up a special HttpNetworkSession with a MockCachingHostResolver.
8953 SessionDependencies session_deps; 8982 SessionDependencies session_deps;
8954 MockCachingHostResolver host_resolver; 8983 MockCachingHostResolver host_resolver;
8955 net::HttpNetworkSession::Params params; 8984 net::HttpNetworkSession::Params params;
8956 params.client_socket_factory = &session_deps.socket_factory; 8985 params.client_socket_factory = &session_deps.socket_factory;
8957 params.host_resolver = &host_resolver; 8986 params.host_resolver = &host_resolver;
8958 params.cert_verifier = session_deps.cert_verifier.get(); 8987 params.cert_verifier = session_deps.cert_verifier.get();
8959 params.proxy_service = session_deps.proxy_service.get(); 8988 params.proxy_service = session_deps.proxy_service.get();
8960 params.ssl_config_service = session_deps.ssl_config_service; 8989 params.ssl_config_service = session_deps.ssl_config_service;
(...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after
9045 9074
9046 response = trans2.GetResponseInfo(); 9075 response = trans2.GetResponseInfo();
9047 ASSERT_TRUE(response != NULL); 9076 ASSERT_TRUE(response != NULL);
9048 ASSERT_TRUE(response->headers != NULL); 9077 ASSERT_TRUE(response->headers != NULL);
9049 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 9078 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9050 EXPECT_TRUE(response->was_fetched_via_spdy); 9079 EXPECT_TRUE(response->was_fetched_via_spdy);
9051 EXPECT_TRUE(response->was_npn_negotiated); 9080 EXPECT_TRUE(response->was_npn_negotiated);
9052 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); 9081 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data));
9053 EXPECT_EQ("hello!", response_data); 9082 EXPECT_EQ("hello!", response_data);
9054 9083
9055 HttpStreamFactory::set_next_protos(""); 9084 HttpStreamFactory::set_next_protos(std::vector<std::string>());
9056 HttpStreamFactory::set_use_alternate_protocols(false); 9085 HttpStreamFactory::set_use_alternate_protocols(false);
9057 } 9086 }
9058 9087
9059 class OneTimeCachingHostResolver : public net::HostResolver { 9088 class OneTimeCachingHostResolver : public net::HostResolver {
9060 public: 9089 public:
9061 explicit OneTimeCachingHostResolver(const HostPortPair& host_port) 9090 explicit OneTimeCachingHostResolver(const HostPortPair& host_port)
9062 : host_port_(host_port) {} 9091 : host_port_(host_port) {}
9063 virtual ~OneTimeCachingHostResolver() {} 9092 virtual ~OneTimeCachingHostResolver() {}
9064 9093
9065 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); } 9094 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); }
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after
9100 } 9129 }
9101 9130
9102 private: 9131 private:
9103 MockCachingHostResolver host_resolver_; 9132 MockCachingHostResolver host_resolver_;
9104 const HostPortPair host_port_; 9133 const HostPortPair host_port_;
9105 }; 9134 };
9106 9135
9107 TEST_F(HttpNetworkTransactionTest, 9136 TEST_F(HttpNetworkTransactionTest,
9108 UseIPConnectionPoolingWithHostCacheExpiration) { 9137 UseIPConnectionPoolingWithHostCacheExpiration) {
9109 HttpStreamFactory::set_use_alternate_protocols(true); 9138 HttpStreamFactory::set_use_alternate_protocols(true);
9110 HttpStreamFactory::set_next_protos(kExpectedNPNString); 9139 HttpStreamFactory::set_next_protos(SpdyNextProtos());
9111 9140
9112 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver. 9141 // Set up a special HttpNetworkSession with a OneTimeCachingHostResolver.
9113 SessionDependencies session_deps; 9142 SessionDependencies session_deps;
9114 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443)); 9143 OneTimeCachingHostResolver host_resolver(HostPortPair("www.gmail.com", 443));
9115 net::HttpNetworkSession::Params params; 9144 net::HttpNetworkSession::Params params;
9116 params.client_socket_factory = &session_deps.socket_factory; 9145 params.client_socket_factory = &session_deps.socket_factory;
9117 params.host_resolver = &host_resolver; 9146 params.host_resolver = &host_resolver;
9118 params.cert_verifier = session_deps.cert_verifier.get(); 9147 params.cert_verifier = session_deps.cert_verifier.get();
9119 params.proxy_service = session_deps.proxy_service.get(); 9148 params.proxy_service = session_deps.proxy_service.get();
9120 params.ssl_config_service = session_deps.ssl_config_service; 9149 params.ssl_config_service = session_deps.ssl_config_service;
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
9204 9233
9205 response = trans2.GetResponseInfo(); 9234 response = trans2.GetResponseInfo();
9206 ASSERT_TRUE(response != NULL); 9235 ASSERT_TRUE(response != NULL);
9207 ASSERT_TRUE(response->headers != NULL); 9236 ASSERT_TRUE(response->headers != NULL);
9208 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 9237 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9209 EXPECT_TRUE(response->was_fetched_via_spdy); 9238 EXPECT_TRUE(response->was_fetched_via_spdy);
9210 EXPECT_TRUE(response->was_npn_negotiated); 9239 EXPECT_TRUE(response->was_npn_negotiated);
9211 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); 9240 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data));
9212 EXPECT_EQ("hello!", response_data); 9241 EXPECT_EQ("hello!", response_data);
9213 9242
9214 HttpStreamFactory::set_next_protos(""); 9243 HttpStreamFactory::set_next_protos(std::vector<std::string>());
9215 HttpStreamFactory::set_use_alternate_protocols(false); 9244 HttpStreamFactory::set_use_alternate_protocols(false);
9216 } 9245 }
9217 9246
9218 } // namespace net 9247 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698