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

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

Issue 9791044: Revert 129277 - Revert 127893 - Attempting to re-land the feature. (Closed) Base URL: svn://svn.chromium.org/chrome/branches/1081/src/
Patch Set: Created 8 years, 9 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) 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/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 9357 matching lines...) Expand 10 before | Expand all | Expand 10 after
9368 data_writes2, arraysize(data_writes2)); 9368 data_writes2, arraysize(data_writes2));
9369 StaticSocketDataProvider* data[] = { &data1, &data2 }; 9369 StaticSocketDataProvider* data[] = { &data1, &data2 };
9370 9370
9371 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data)); 9371 SimpleGetHelperResult out = SimpleGetHelperForData(data, arraysize(data));
9372 9372
9373 EXPECT_EQ(OK, out.rv); 9373 EXPECT_EQ(OK, out.rv);
9374 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line); 9374 EXPECT_EQ("HTTP/1.0 200 OK", out.status_line);
9375 EXPECT_EQ("hello world", out.response_data); 9375 EXPECT_EQ("hello world", out.response_data);
9376 } 9376 }
9377 9377
9378 TEST_F(HttpNetworkTransactionSpdy3Test, CloseIdleSpdySessionToOpenNewOne) {
9379 HttpStreamFactory::SetNextProtos(SpdyNextProtos());
9380 int old_max_sockets_per_group =
9381 ClientSocketPoolManager::max_sockets_per_group(
9382 HttpNetworkSession::NORMAL_SOCKET_POOL);
9383 int old_max_sockets_per_proxy_server =
9384 ClientSocketPoolManager::max_sockets_per_proxy_server(
9385 HttpNetworkSession::NORMAL_SOCKET_POOL);
9386 int old_max_sockets_per_pool =
9387 ClientSocketPoolManager::max_sockets_per_pool(
9388 HttpNetworkSession::NORMAL_SOCKET_POOL);
9389 ClientSocketPoolManager::set_max_sockets_per_group(
9390 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
9391 ClientSocketPoolManager::set_max_sockets_per_proxy_server(
9392 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
9393 ClientSocketPoolManager::set_max_sockets_per_pool(
9394 HttpNetworkSession::NORMAL_SOCKET_POOL, 1);
9395
9396 // Use two different hosts with different IPs so they don't get pooled.
9397 SessionDependencies session_deps;
9398 session_deps.host_resolver->rules()->AddRule("a.com", "10.0.0.1");
9399 session_deps.host_resolver->rules()->AddRule("b.com", "10.0.0.2");
9400 scoped_refptr<HttpNetworkSession> session(CreateSession(&session_deps));
9401
9402 SSLSocketDataProvider ssl1(ASYNC, OK);
9403 ssl1.SetNextProto(SSLClientSocket::kProtoSPDY3);
9404 SSLSocketDataProvider ssl2(ASYNC, OK);
9405 ssl2.SetNextProto(SSLClientSocket::kProtoSPDY3);
9406 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl1);
9407 session_deps.socket_factory.AddSSLSocketDataProvider(&ssl2);
9408
9409 scoped_ptr<SpdyFrame> host1_req(ConstructSpdyGet(
9410 "https://www.a.com", false, 1, LOWEST));
9411 MockWrite spdy1_writes[] = {
9412 CreateMockWrite(*host1_req, 1),
9413 };
9414 scoped_ptr<SpdyFrame> host1_resp(ConstructSpdyGetSynReply(NULL, 0, 1));
9415 scoped_ptr<SpdyFrame> host1_resp_body(ConstructSpdyBodyFrame(1, true));
9416 MockRead spdy1_reads[] = {
9417 CreateMockRead(*host1_resp, 2),
9418 CreateMockRead(*host1_resp_body, 3),
9419 MockRead(ASYNC, ERR_IO_PENDING, 4),
9420 };
9421
9422 scoped_ptr<OrderedSocketData> spdy1_data(
9423 new OrderedSocketData(
9424 spdy1_reads, arraysize(spdy1_reads),
9425 spdy1_writes, arraysize(spdy1_writes)));
9426 session_deps.socket_factory.AddSocketDataProvider(spdy1_data.get());
9427
9428 scoped_ptr<SpdyFrame> host2_req(ConstructSpdyGet(
9429 "https://www.b.com", false, 1, LOWEST));
9430 MockWrite spdy2_writes[] = {
9431 CreateMockWrite(*host2_req, 1),
9432 };
9433 scoped_ptr<SpdyFrame> host2_resp(ConstructSpdyGetSynReply(NULL, 0, 1));
9434 scoped_ptr<SpdyFrame> host2_resp_body(ConstructSpdyBodyFrame(1, true));
9435 MockRead spdy2_reads[] = {
9436 CreateMockRead(*host2_resp, 2),
9437 CreateMockRead(*host2_resp_body, 3),
9438 MockRead(ASYNC, ERR_IO_PENDING, 4),
9439 };
9440
9441 scoped_ptr<OrderedSocketData> spdy2_data(
9442 new OrderedSocketData(
9443 spdy2_reads, arraysize(spdy2_reads),
9444 spdy2_writes, arraysize(spdy2_writes)));
9445 session_deps.socket_factory.AddSocketDataProvider(spdy2_data.get());
9446
9447 MockWrite http_write[] = {
9448 MockWrite("GET / HTTP/1.1\r\n"
9449 "Host: www.a.com\r\n"
9450 "Connection: keep-alive\r\n\r\n"),
9451 };
9452
9453 MockRead http_read[] = {
9454 MockRead("HTTP/1.1 200 OK\r\n"),
9455 MockRead("Content-Type: text/html; charset=iso-8859-1\r\n"),
9456 MockRead("Content-Length: 6\r\n\r\n"),
9457 MockRead("hello!"),
9458 };
9459 StaticSocketDataProvider http_data(http_read, arraysize(http_read),
9460 http_write, arraysize(http_write));
9461 session_deps.socket_factory.AddSocketDataProvider(&http_data);
9462
9463 HostPortPair host_port_pair_a("www.a.com", 443);
9464 HostPortProxyPair host_port_proxy_pair_a(
9465 host_port_pair_a, ProxyServer::Direct());
9466 EXPECT_FALSE(
9467 session->spdy_session_pool()->HasSession(host_port_proxy_pair_a));
9468
9469 TestCompletionCallback callback;
9470 HttpRequestInfo request1;
9471 request1.method = "GET";
9472 request1.url = GURL("https://www.a.com/");
9473 request1.load_flags = 0;
9474 scoped_ptr<HttpNetworkTransaction> trans(new HttpNetworkTransaction(session));
9475
9476 int rv = trans->Start(&request1, callback.callback(), BoundNetLog());
9477 EXPECT_EQ(ERR_IO_PENDING, rv);
9478 EXPECT_EQ(OK, callback.WaitForResult());
9479
9480 const HttpResponseInfo* response = trans->GetResponseInfo();
9481 ASSERT_TRUE(response != NULL);
9482 ASSERT_TRUE(response->headers != NULL);
9483 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9484 EXPECT_TRUE(response->was_fetched_via_spdy);
9485 EXPECT_TRUE(response->was_npn_negotiated);
9486
9487 std::string response_data;
9488 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9489 EXPECT_EQ("hello!", response_data);
9490 trans.reset();
9491 EXPECT_TRUE(
9492 session->spdy_session_pool()->HasSession(host_port_proxy_pair_a));
9493
9494 HostPortPair host_port_pair_b("www.b.com", 443);
9495 HostPortProxyPair host_port_proxy_pair_b(
9496 host_port_pair_b, ProxyServer::Direct());
9497 EXPECT_FALSE(
9498 session->spdy_session_pool()->HasSession(host_port_proxy_pair_b));
9499 HttpRequestInfo request2;
9500 request2.method = "GET";
9501 request2.url = GURL("https://www.b.com/");
9502 request2.load_flags = 0;
9503 trans.reset(new HttpNetworkTransaction(session));
9504
9505 rv = trans->Start(&request2, callback.callback(), BoundNetLog());
9506 EXPECT_EQ(ERR_IO_PENDING, rv);
9507 EXPECT_EQ(OK, callback.WaitForResult());
9508
9509 response = trans->GetResponseInfo();
9510 ASSERT_TRUE(response != NULL);
9511 ASSERT_TRUE(response->headers != NULL);
9512 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9513 EXPECT_TRUE(response->was_fetched_via_spdy);
9514 EXPECT_TRUE(response->was_npn_negotiated);
9515 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9516 EXPECT_EQ("hello!", response_data);
9517 EXPECT_FALSE(
9518 session->spdy_session_pool()->HasSession(host_port_proxy_pair_a));
9519 EXPECT_TRUE(
9520 session->spdy_session_pool()->HasSession(host_port_proxy_pair_b));
9521
9522 HostPortPair host_port_pair_a1("www.a.com", 80);
9523 HostPortProxyPair host_port_proxy_pair_a1(
9524 host_port_pair_a1, ProxyServer::Direct());
9525 EXPECT_FALSE(
9526 session->spdy_session_pool()->HasSession(host_port_proxy_pair_a1));
9527 HttpRequestInfo request3;
9528 request3.method = "GET";
9529 request3.url = GURL("http://www.a.com/");
9530 request3.load_flags = 0;
9531 trans.reset(new HttpNetworkTransaction(session));
9532
9533 rv = trans->Start(&request3, callback.callback(), BoundNetLog());
9534 EXPECT_EQ(ERR_IO_PENDING, rv);
9535 EXPECT_EQ(OK, callback.WaitForResult());
9536
9537 response = trans->GetResponseInfo();
9538 ASSERT_TRUE(response != NULL);
9539 ASSERT_TRUE(response->headers != NULL);
9540 EXPECT_EQ("HTTP/1.1 200 OK", response->headers->GetStatusLine());
9541 EXPECT_FALSE(response->was_fetched_via_spdy);
9542 EXPECT_FALSE(response->was_npn_negotiated);
9543 ASSERT_EQ(OK, ReadTransaction(trans.get(), &response_data));
9544 EXPECT_EQ("hello!", response_data);
9545 EXPECT_FALSE(
9546 session->spdy_session_pool()->HasSession(host_port_proxy_pair_a));
9547 EXPECT_FALSE(
9548 session->spdy_session_pool()->HasSession(host_port_proxy_pair_b));
9549
9550 HttpStreamFactory::SetNextProtos(std::vector<std::string>());
9551 ClientSocketPoolManager::set_max_sockets_per_pool(
9552 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_sockets_per_pool);
9553 ClientSocketPoolManager::set_max_sockets_per_proxy_server(
9554 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_sockets_per_proxy_server);
9555 ClientSocketPoolManager::set_max_sockets_per_group(
9556 HttpNetworkSession::NORMAL_SOCKET_POOL, old_max_sockets_per_group);
9557 }
9558
9378 } // namespace net 9559 } // namespace net
OLDNEW
« no previous file with comments | « net/http/http_network_transaction_spdy2_unittest.cc ('k') | net/http/http_proxy_client_socket_pool.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698