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

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

Issue 8549004: base::Bind: Convert HostResolver::Resolve. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 9 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 | 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> 8 #include <stdarg.h>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 5874 matching lines...) Expand 10 before | Expand all | Expand 10 after
5885 SessionDependencies session_deps; 5885 SessionDependencies session_deps;
5886 5886
5887 // Select a host resolver that does caching. 5887 // Select a host resolver that does caching.
5888 session_deps.host_resolver.reset(new MockCachingHostResolver); 5888 session_deps.host_resolver.reset(new MockCachingHostResolver);
5889 5889
5890 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction( 5890 scoped_ptr<HttpTransaction> trans(new HttpNetworkTransaction(
5891 CreateSession(&session_deps))); 5891 CreateSession(&session_deps)));
5892 5892
5893 // Warm up the host cache so it has an entry for "www.google.com". 5893 // Warm up the host cache so it has an entry for "www.google.com".
5894 AddressList addrlist; 5894 AddressList addrlist;
5895 TestOldCompletionCallback callback; 5895 TestCompletionCallback callback;
5896 TestOldCompletionCallback old_callback;
5896 int rv = session_deps.host_resolver->Resolve( 5897 int rv = session_deps.host_resolver->Resolve(
5897 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), &addrlist, 5898 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), &addrlist,
5898 &callback, NULL, BoundNetLog()); 5899 callback.callback(), NULL, BoundNetLog());
5899 EXPECT_EQ(ERR_IO_PENDING, rv); 5900 EXPECT_EQ(ERR_IO_PENDING, rv);
5900 rv = callback.WaitForResult(); 5901 rv = callback.WaitForResult();
5901 EXPECT_EQ(OK, rv); 5902 EXPECT_EQ(OK, rv);
5902 5903
5903 // Verify that it was added to host cache, by doing a subsequent async lookup 5904 // Verify that it was added to host cache, by doing a subsequent async lookup
5904 // and confirming it completes synchronously. 5905 // and confirming it completes synchronously.
5905 rv = session_deps.host_resolver->Resolve( 5906 rv = session_deps.host_resolver->Resolve(
5906 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), &addrlist, 5907 HostResolver::RequestInfo(HostPortPair("www.google.com", 80)), &addrlist,
5907 &callback, NULL, BoundNetLog()); 5908 callback.callback(), NULL, BoundNetLog());
5908 ASSERT_EQ(OK, rv); 5909 ASSERT_EQ(OK, rv);
5909 5910
5910 // Inject a failure the next time that "www.google.com" is resolved. This way 5911 // Inject a failure the next time that "www.google.com" is resolved. This way
5911 // we can tell if the next lookup hit the cache, or the "network". 5912 // we can tell if the next lookup hit the cache, or the "network".
5912 // (cache --> success, "network" --> failure). 5913 // (cache --> success, "network" --> failure).
5913 session_deps.host_resolver->rules()->AddSimulatedFailure("www.google.com"); 5914 session_deps.host_resolver->rules()->AddSimulatedFailure("www.google.com");
5914 5915
5915 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the 5916 // Connect up a mock socket which will fail with ERR_UNEXPECTED during the
5916 // first read -- this won't be reached as the host resolution will fail first. 5917 // first read -- this won't be reached as the host resolution will fail first.
5917 MockRead data_reads[] = { MockRead(false, ERR_UNEXPECTED) }; 5918 MockRead data_reads[] = { MockRead(false, ERR_UNEXPECTED) };
5918 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0); 5919 StaticSocketDataProvider data(data_reads, arraysize(data_reads), NULL, 0);
5919 session_deps.socket_factory.AddSocketDataProvider(&data); 5920 session_deps.socket_factory.AddSocketDataProvider(&data);
5920 5921
5921 // Run the request. 5922 // Run the request.
5922 rv = trans->Start(&request, &callback, BoundNetLog()); 5923 rv = trans->Start(&request, &old_callback, BoundNetLog());
5923 ASSERT_EQ(ERR_IO_PENDING, rv); 5924 ASSERT_EQ(ERR_IO_PENDING, rv);
5924 rv = callback.WaitForResult(); 5925 rv = old_callback.WaitForResult();
5925 5926
5926 // If we bypassed the cache, we would have gotten a failure while resolving 5927 // If we bypassed the cache, we would have gotten a failure while resolving
5927 // "www.google.com". 5928 // "www.google.com".
5928 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 5929 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
5929 } 5930 }
5930 5931
5931 // There are multiple load flags that should trigger the host cache bypass. 5932 // There are multiple load flags that should trigger the host cache bypass.
5932 // Test each in isolation: 5933 // Test each in isolation:
5933 TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) { 5934 TEST_F(HttpNetworkTransactionTest, BypassHostCacheOnRefresh1) {
5934 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE); 5935 BypassHostCacheOnRefreshHelper(LOAD_BYPASS_CACHE);
(...skipping 3038 matching lines...) Expand 10 before | Expand all | Expand 10 after
8973 host_resolver->rules()->AddIPLiteralRule(host, iplist, ""); 8974 host_resolver->rules()->AddIPLiteralRule(host, iplist, "");
8974 8975
8975 // Setup a HostPortProxyPair. 8976 // Setup a HostPortProxyPair.
8976 HostPortPair host_port_pair(host, port); 8977 HostPortPair host_port_pair(host, port);
8977 HostPortProxyPair pair = HostPortProxyPair(host_port_pair, 8978 HostPortProxyPair pair = HostPortProxyPair(host_port_pair,
8978 ProxyServer::Direct()); 8979 ProxyServer::Direct());
8979 8980
8980 // Resolve the host and port. 8981 // Resolve the host and port.
8981 AddressList addresses; 8982 AddressList addresses;
8982 HostResolver::RequestInfo info(host_port_pair); 8983 HostResolver::RequestInfo info(host_port_pair);
8983 TestOldCompletionCallback callback; 8984 TestCompletionCallback callback;
8984 int rv = host_resolver->Resolve(info, &addresses, &callback, NULL, 8985 int rv = host_resolver->Resolve(info, &addresses, callback.callback(), NULL,
8985 BoundNetLog()); 8986 BoundNetLog());
8986 if (rv == ERR_IO_PENDING) 8987 if (rv == ERR_IO_PENDING)
8987 rv = callback.WaitForResult(); 8988 rv = callback.WaitForResult();
8988 DCHECK_EQ(OK, rv); 8989 DCHECK_EQ(OK, rv);
8989 8990
8990 // Add the first address as an alias. It would have been better to call 8991 // Add the first address as an alias. It would have been better to call
8991 // MockClientSocket::GetPeerAddress but that returns 192.0.2.33 whereas 8992 // MockClientSocket::GetPeerAddress but that returns 192.0.2.33 whereas
8992 // MockHostResolver returns 127.0.0.1 (MockHostResolverBase::Reset). So we use 8993 // MockHostResolver returns 127.0.0.1 (MockHostResolverBase::Reset). So we use
8993 // the first address (127.0.0.1) returned by MockHostResolver as an alias for 8994 // the first address (127.0.0.1) returned by MockHostResolver as an alias for
8994 // the |pair|. 8995 // the |pair|.
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
9042 CreateMockRead(*host2_resp_body, 6), 9043 CreateMockRead(*host2_resp_body, 6),
9043 MockRead(true, 0, 7), 9044 MockRead(true, 0, 7),
9044 }; 9045 };
9045 9046
9046 scoped_refptr<OrderedSocketData> spdy_data( 9047 scoped_refptr<OrderedSocketData> spdy_data(
9047 new OrderedSocketData( 9048 new OrderedSocketData(
9048 spdy_reads, arraysize(spdy_reads), 9049 spdy_reads, arraysize(spdy_reads),
9049 spdy_writes, arraysize(spdy_writes))); 9050 spdy_writes, arraysize(spdy_writes)));
9050 session_deps.socket_factory.AddSocketDataProvider(spdy_data); 9051 session_deps.socket_factory.AddSocketDataProvider(spdy_data);
9051 9052
9052 TestOldCompletionCallback callback; 9053 TestCompletionCallback callback;
9054 TestOldCompletionCallback old_callback;
9053 HttpRequestInfo request1; 9055 HttpRequestInfo request1;
9054 request1.method = "GET"; 9056 request1.method = "GET";
9055 request1.url = GURL("https://www.google.com/"); 9057 request1.url = GURL("https://www.google.com/");
9056 request1.load_flags = 0; 9058 request1.load_flags = 0;
9057 HttpNetworkTransaction trans1(session); 9059 HttpNetworkTransaction trans1(session);
9058 9060
9059 int rv = trans1.Start(&request1, &callback, BoundNetLog()); 9061 int rv = trans1.Start(&request1, &old_callback, BoundNetLog());
9060 EXPECT_EQ(ERR_IO_PENDING, rv); 9062 EXPECT_EQ(ERR_IO_PENDING, rv);
9061 EXPECT_EQ(OK, callback.WaitForResult()); 9063 EXPECT_EQ(OK, old_callback.WaitForResult());
9062 9064
9063 const HttpResponseInfo* response = trans1.GetResponseInfo(); 9065 const HttpResponseInfo* response = trans1.GetResponseInfo();
9064 ASSERT_TRUE(response != NULL); 9066 ASSERT_TRUE(response != NULL);
9065 ASSERT_TRUE(response->headers != NULL); 9067 ASSERT_TRUE(response->headers != NULL);
9066 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 9068 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9067 9069
9068 std::string response_data; 9070 std::string response_data;
9069 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); 9071 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data));
9070 EXPECT_EQ("hello!", response_data); 9072 EXPECT_EQ("hello!", response_data);
9071 9073
9072 // Preload www.gmail.com into HostCache. 9074 // Preload www.gmail.com into HostCache.
9073 HostPortPair host_port("www.gmail.com", 443); 9075 HostPortPair host_port("www.gmail.com", 443);
9074 HostResolver::RequestInfo resolve_info(host_port); 9076 HostResolver::RequestInfo resolve_info(host_port);
9075 AddressList ignored; 9077 AddressList ignored;
9076 rv = host_resolver.Resolve(resolve_info, &ignored, &callback, NULL, 9078 rv = host_resolver.Resolve(resolve_info, &ignored, callback.callback(), NULL,
9077 BoundNetLog()); 9079 BoundNetLog());
9078 EXPECT_EQ(ERR_IO_PENDING, rv); 9080 EXPECT_EQ(ERR_IO_PENDING, rv);
9079 rv = callback.WaitForResult(); 9081 rv = callback.WaitForResult();
9080 EXPECT_EQ(OK, rv); 9082 EXPECT_EQ(OK, rv);
9081 9083
9082 // MockHostResolver returns 127.0.0.1, port 443 for https://www.google.com/ 9084 // MockHostResolver returns 127.0.0.1, port 443 for https://www.google.com/
9083 // and https://www.gmail.com/. Add 127.0.0.1 as alias for host_port_pair: 9085 // and https://www.gmail.com/. Add 127.0.0.1 as alias for host_port_pair:
9084 // (www.google.com, 443). 9086 // (www.google.com, 443).
9085 IPPoolingAddAlias(&host_resolver, &pool_peer, "www.google.com", 443, 9087 IPPoolingAddAlias(&host_resolver, &pool_peer, "www.google.com", 443,
9086 "127.0.0.1"); 9088 "127.0.0.1");
9087 9089
9088 HttpRequestInfo request2; 9090 HttpRequestInfo request2;
9089 request2.method = "GET"; 9091 request2.method = "GET";
9090 request2.url = GURL("https://www.gmail.com/"); 9092 request2.url = GURL("https://www.gmail.com/");
9091 request2.load_flags = 0; 9093 request2.load_flags = 0;
9092 HttpNetworkTransaction trans2(session); 9094 HttpNetworkTransaction trans2(session);
9093 9095
9094 rv = trans2.Start(&request2, &callback, BoundNetLog()); 9096 rv = trans2.Start(&request2, &old_callback, BoundNetLog());
9095 EXPECT_EQ(ERR_IO_PENDING, rv); 9097 EXPECT_EQ(ERR_IO_PENDING, rv);
9096 EXPECT_EQ(OK, callback.WaitForResult()); 9098 EXPECT_EQ(OK, old_callback.WaitForResult());
9097 9099
9098 response = trans2.GetResponseInfo(); 9100 response = trans2.GetResponseInfo();
9099 ASSERT_TRUE(response != NULL); 9101 ASSERT_TRUE(response != NULL);
9100 ASSERT_TRUE(response->headers != NULL); 9102 ASSERT_TRUE(response->headers != NULL);
9101 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 9103 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9102 EXPECT_TRUE(response->was_fetched_via_spdy); 9104 EXPECT_TRUE(response->was_fetched_via_spdy);
9103 EXPECT_TRUE(response->was_npn_negotiated); 9105 EXPECT_TRUE(response->was_npn_negotiated);
9104 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); 9106 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data));
9105 EXPECT_EQ("hello!", response_data); 9107 EXPECT_EQ("hello!", response_data);
9106 9108
9107 HttpStreamFactory::set_next_protos(std::vector<std::string>()); 9109 HttpStreamFactory::set_next_protos(std::vector<std::string>());
9108 HttpStreamFactory::set_use_alternate_protocols(false); 9110 HttpStreamFactory::set_use_alternate_protocols(false);
9109 } 9111 }
9110 9112
9111 class OneTimeCachingHostResolver : public net::HostResolver { 9113 class OneTimeCachingHostResolver : public net::HostResolver {
9112 public: 9114 public:
9113 explicit OneTimeCachingHostResolver(const HostPortPair& host_port) 9115 explicit OneTimeCachingHostResolver(const HostPortPair& host_port)
9114 : host_port_(host_port) {} 9116 : host_port_(host_port) {}
9115 virtual ~OneTimeCachingHostResolver() {} 9117 virtual ~OneTimeCachingHostResolver() {}
9116 9118
9117 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); } 9119 RuleBasedHostResolverProc* rules() { return host_resolver_.rules(); }
9118 9120
9119 // HostResolver methods: 9121 // HostResolver methods:
9120 virtual int Resolve(const RequestInfo& info, 9122 virtual int Resolve(const RequestInfo& info,
9121 AddressList* addresses, 9123 AddressList* addresses,
9122 OldCompletionCallback* callback, 9124 const CompletionCallback& callback,
9123 RequestHandle* out_req, 9125 RequestHandle* out_req,
9124 const BoundNetLog& net_log) OVERRIDE { 9126 const BoundNetLog& net_log) OVERRIDE {
9125 return host_resolver_.Resolve( 9127 return host_resolver_.Resolve(
9126 info, addresses, callback, out_req, net_log); 9128 info, addresses, callback, out_req, net_log);
9127 } 9129 }
9128 9130
9129 virtual int ResolveFromCache(const RequestInfo& info, 9131 virtual int ResolveFromCache(const RequestInfo& info,
9130 AddressList* addresses, 9132 AddressList* addresses,
9131 const BoundNetLog& net_log) OVERRIDE { 9133 const BoundNetLog& net_log) OVERRIDE {
9132 int rv = host_resolver_.ResolveFromCache(info, addresses, net_log); 9134 int rv = host_resolver_.ResolveFromCache(info, addresses, net_log);
(...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after
9203 CreateMockRead(*host2_resp_body, 6), 9205 CreateMockRead(*host2_resp_body, 6),
9204 MockRead(true, 0, 7), 9206 MockRead(true, 0, 7),
9205 }; 9207 };
9206 9208
9207 scoped_refptr<OrderedSocketData> spdy_data( 9209 scoped_refptr<OrderedSocketData> spdy_data(
9208 new OrderedSocketData( 9210 new OrderedSocketData(
9209 spdy_reads, arraysize(spdy_reads), 9211 spdy_reads, arraysize(spdy_reads),
9210 spdy_writes, arraysize(spdy_writes))); 9212 spdy_writes, arraysize(spdy_writes)));
9211 session_deps.socket_factory.AddSocketDataProvider(spdy_data); 9213 session_deps.socket_factory.AddSocketDataProvider(spdy_data);
9212 9214
9213 TestOldCompletionCallback callback; 9215 TestCompletionCallback callback;
9214 HttpRequestInfo request1; 9216 HttpRequestInfo request1;
9215 request1.method = "GET"; 9217 request1.method = "GET";
9216 request1.url = GURL("https://www.google.com/"); 9218 request1.url = GURL("https://www.google.com/");
9217 request1.load_flags = 0; 9219 request1.load_flags = 0;
9218 HttpNetworkTransaction trans1(session); 9220 HttpNetworkTransaction trans1(session);
9219 9221
9220 int rv = trans1.Start(&request1, &callback, BoundNetLog()); 9222 TestOldCompletionCallback old_callback;
9223 int rv = trans1.Start(&request1, &old_callback, BoundNetLog());
9221 EXPECT_EQ(ERR_IO_PENDING, rv); 9224 EXPECT_EQ(ERR_IO_PENDING, rv);
9222 EXPECT_EQ(OK, callback.WaitForResult()); 9225 EXPECT_EQ(OK, old_callback.WaitForResult());
9223 9226
9224 const HttpResponseInfo* response = trans1.GetResponseInfo(); 9227 const HttpResponseInfo* response = trans1.GetResponseInfo();
9225 ASSERT_TRUE(response != NULL); 9228 ASSERT_TRUE(response != NULL);
9226 ASSERT_TRUE(response->headers != NULL); 9229 ASSERT_TRUE(response->headers != NULL);
9227 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 9230 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9228 9231
9229 std::string response_data; 9232 std::string response_data;
9230 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data)); 9233 ASSERT_EQ(OK, ReadTransaction(&trans1, &response_data));
9231 EXPECT_EQ("hello!", response_data); 9234 EXPECT_EQ("hello!", response_data);
9232 9235
9233 // Preload cache entries into HostCache. 9236 // Preload cache entries into HostCache.
9234 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443)); 9237 HostResolver::RequestInfo resolve_info(HostPortPair("www.gmail.com", 443));
9235 AddressList ignored; 9238 AddressList ignored;
9236 rv = host_resolver.Resolve(resolve_info, &ignored, &callback, NULL, 9239 rv = host_resolver.Resolve(resolve_info, &ignored, callback.callback(), NULL,
9237 BoundNetLog()); 9240 BoundNetLog());
9238 EXPECT_EQ(ERR_IO_PENDING, rv); 9241 EXPECT_EQ(ERR_IO_PENDING, rv);
9239 rv = callback.WaitForResult(); 9242 rv = callback.WaitForResult();
9240 EXPECT_EQ(OK, rv); 9243 EXPECT_EQ(OK, rv);
9241 9244
9242 HttpRequestInfo request2; 9245 HttpRequestInfo request2;
9243 request2.method = "GET"; 9246 request2.method = "GET";
9244 request2.url = GURL("https://www.gmail.com/"); 9247 request2.url = GURL("https://www.gmail.com/");
9245 request2.load_flags = 0; 9248 request2.load_flags = 0;
9246 HttpNetworkTransaction trans2(session); 9249 HttpNetworkTransaction trans2(session);
9247 9250
9248 // MockHostResolver returns 127.0.0.1, port 443 for https://www.google.com/ 9251 // MockHostResolver returns 127.0.0.1, port 443 for https://www.google.com/
9249 // and https://www.gmail.com/. Add 127.0.0.1 as alias for host_port_pair: 9252 // and https://www.gmail.com/. Add 127.0.0.1 as alias for host_port_pair:
9250 // (www.google.com, 443). 9253 // (www.google.com, 443).
9251 IPPoolingAddAlias(host_resolver.GetMockHostResolver(), &pool_peer, 9254 IPPoolingAddAlias(host_resolver.GetMockHostResolver(), &pool_peer,
9252 "www.google.com", 443, "127.0.0.1"); 9255 "www.google.com", 443, "127.0.0.1");
9253 9256
9254 rv = trans2.Start(&request2, &callback, BoundNetLog()); 9257 rv = trans2.Start(&request2, &old_callback, BoundNetLog());
9255 EXPECT_EQ(ERR_IO_PENDING, rv); 9258 EXPECT_EQ(ERR_IO_PENDING, rv);
9256 EXPECT_EQ(OK, callback.WaitForResult()); 9259 EXPECT_EQ(OK, old_callback.WaitForResult());
9257 9260
9258 response = trans2.GetResponseInfo(); 9261 response = trans2.GetResponseInfo();
9259 ASSERT_TRUE(response != NULL); 9262 ASSERT_TRUE(response != NULL);
9260 ASSERT_TRUE(response->headers != NULL); 9263 ASSERT_TRUE(response->headers != NULL);
9261 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine()); 9264 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9262 EXPECT_TRUE(response->was_fetched_via_spdy); 9265 EXPECT_TRUE(response->was_fetched_via_spdy);
9263 EXPECT_TRUE(response->was_npn_negotiated); 9266 EXPECT_TRUE(response->was_npn_negotiated);
9264 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data)); 9267 ASSERT_EQ(OK, ReadTransaction(&trans2, &response_data));
9265 EXPECT_EQ("hello!", response_data); 9268 EXPECT_EQ("hello!", response_data);
9266 9269
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
9309 StaticSocketDataProvider* data[] = { &data1, &data2 }; 9312 StaticSocketDataProvider* data[] = { &data1, &data2 };
9310 9313
9311 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); 9314 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data));
9312 9315
9313 EXPECT_EQ(OK, out.rv); 9316 EXPECT_EQ(OK, out.rv);
9314 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); 9317 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line);
9315 EXPECT_EQ("hello world", out.response_data); 9318 EXPECT_EQ("hello world", out.response_data);
9316 } 9319 }
9317 9320
9318 } // namespace net 9321 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698