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

Side by Side Diff: net/spdy/spdy_network_transaction_unittest.cc

Issue 2628973004: Add test for graceful GOAWAY. (Closed)
Patch Set: Created 3 years, 11 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
« no previous file with comments | « no previous file | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <cmath> 5 #include <cmath>
6 #include <memory> 6 #include <memory>
7 #include <string> 7 #include <string>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 4009 matching lines...) Expand 10 before | Expand all | Expand 10 after
4020 4020
4021 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); 4021 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4022 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY, 4022 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
4023 NetLogWithSource(), nullptr); 4023 NetLogWithSource(), nullptr);
4024 helper.AddData(&data); 4024 helper.AddData(&data);
4025 helper.RunToCompletion(&data); 4025 helper.RunToCompletion(&data);
4026 TransactionHelperResult out = helper.output(); 4026 TransactionHelperResult out = helper.output();
4027 EXPECT_THAT(out.rv, IsError(ERR_ABORTED)); 4027 EXPECT_THAT(out.rv, IsError(ERR_ABORTED));
4028 } 4028 }
4029 4029
4030 // A server can gracefully shut down by sending a GOAWAY frame
4031 // with maximum last-stream-id value.
4032 // Transactions started before receiving such a GOAWAY frame should succeed,
4033 // but SpdySession should be unavailable for new streams.
4034 TEST_F(SpdyNetworkTransactionTest, GracefulGoaway) {
4035 SpdySerializedFrame req1(
4036 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4037 spdy_util_.UpdateWithStreamDestruction(1);
4038 SpdySerializedFrame req2(
4039 spdy_util_.ConstructSpdyGet("https://www.example.org/foo", 3, LOWEST));
4040 MockWrite writes[] = {CreateMockWrite(req1, 0), CreateMockWrite(req2, 3)};
4041
4042 SpdySerializedFrame resp1(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
4043 SpdySerializedFrame body1(spdy_util_.ConstructSpdyDataFrame(1, true));
4044 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway(
4045 0x7fffffff, GOAWAY_NO_ERROR, "Graceful shutdown."));
4046 SpdySerializedFrame resp2(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 3));
4047 SpdySerializedFrame body2(spdy_util_.ConstructSpdyDataFrame(3, true));
4048 MockRead reads[] = {CreateMockRead(resp1, 1), CreateMockRead(body1, 2),
4049 CreateMockRead(goaway, 4), CreateMockRead(resp2, 5),
4050 CreateMockRead(body2, 6), MockRead(ASYNC, 0, 7)};
4051
4052 // Run first transaction.
4053 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes));
4054 NormalSpdyTransactionHelper helper(CreateGetRequest(), DEFAULT_PRIORITY,
4055 NetLogWithSource(), nullptr);
4056 helper.RunPreTestSetup();
4057 helper.AddData(&data);
4058 helper.RunDefaultTest();
4059
4060 // Verify first response.
4061 TransactionHelperResult out = helper.output();
4062 EXPECT_THAT(out.rv, IsOk());
4063 EXPECT_EQ("HTTP/1.1 200", out.status_line);
4064 EXPECT_EQ("hello!", out.response_data);
4065
4066 // GOAWAY frame has not yet been received, SpdySession should be available.
4067 SpdySessionPool* spdy_session_pool = helper.session()->spdy_session_pool();
4068 SpdySessionKey key(host_port_pair_, ProxyServer::Direct(),
4069 PRIVACY_MODE_DISABLED);
4070 NetLogWithSource log;
4071 base::WeakPtr<SpdySession> spdy_session =
4072 spdy_session_pool->FindAvailableSession(key, GURL(), log);
4073 EXPECT_TRUE(spdy_session);
4074
4075 // Start second transaction.
4076 HttpNetworkTransaction trans2(DEFAULT_PRIORITY, helper.session());
4077 TestCompletionCallback callback;
4078 HttpRequestInfo request2;
4079 request2.method = "GET";
4080 request2.url = GURL("https://www.example.org/foo");
4081 int rv = trans2.Start(&request2, callback.callback(), log);
4082 EXPECT_THAT(rv, IsError(ERR_IO_PENDING));
4083 rv = callback.WaitForResult();
4084 EXPECT_THAT(rv, IsOk());
4085
4086 // Verify second response.
4087 const HttpResponseInfo* response = trans2.GetResponseInfo();
4088 ASSERT_TRUE(response);
4089 EXPECT_EQ(HttpResponseInfo::CONNECTION_INFO_HTTP2, response->connection_info);
4090 ASSERT_TRUE(response->headers);
4091 EXPECT_EQ("HTTP/1.1 200", response->headers->GetStatusLine());
4092 EXPECT_TRUE(response->was_fetched_via_spdy);
4093 EXPECT_TRUE(response->was_alpn_negotiated);
4094 EXPECT_EQ("127.0.0.1", response->socket_address.host());
4095 EXPECT_EQ(443, response->socket_address.port());
4096 std::string response_data;
4097 rv = ReadTransaction(&trans2, &response_data);
4098 EXPECT_THAT(rv, IsOk());
4099 EXPECT_EQ("hello!", response_data);
4100
4101 // Graceful GOAWAY was received, SpdySession should be unavailable.
4102 spdy_session = spdy_session_pool->FindAvailableSession(key, GURL(), log);
4103 EXPECT_FALSE(spdy_session);
4104
4105 helper.VerifyDataConsumed();
4106 }
4107
4030 TEST_F(SpdyNetworkTransactionTest, CloseWithActiveStream) { 4108 TEST_F(SpdyNetworkTransactionTest, CloseWithActiveStream) {
4031 SpdySerializedFrame req( 4109 SpdySerializedFrame req(
4032 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); 4110 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true));
4033 MockWrite writes[] = {CreateMockWrite(req, 0)}; 4111 MockWrite writes[] = {CreateMockWrite(req, 0)};
4034 4112
4035 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); 4113 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1));
4036 MockRead reads[] = { 4114 MockRead reads[] = {
4037 CreateMockRead(resp, 1), MockRead(SYNCHRONOUS, 0, 2) // EOF 4115 CreateMockRead(resp, 1), MockRead(SYNCHRONOUS, 0, 2) // EOF
4038 }; 4116 };
4039 4117
(...skipping 2426 matching lines...) Expand 10 before | Expand all | Expand 10 after
6466 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) { 6544 TEST_F(SpdyNetworkTransactionTLSUsageCheckTest, TLSCipherSuiteSucky) {
6467 std::unique_ptr<SSLSocketDataProvider> ssl_provider( 6545 std::unique_ptr<SSLSocketDataProvider> ssl_provider(
6468 new SSLSocketDataProvider(ASYNC, OK)); 6546 new SSLSocketDataProvider(ASYNC, OK));
6469 // Set to TLS_RSA_WITH_NULL_MD5 6547 // Set to TLS_RSA_WITH_NULL_MD5
6470 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status); 6548 SSLConnectionStatusSetCipherSuite(0x1, &ssl_provider->connection_status);
6471 6549
6472 RunTLSUsageCheckTest(std::move(ssl_provider)); 6550 RunTLSUsageCheckTest(std::move(ssl_provider));
6473 } 6551 }
6474 6552
6475 } // namespace net 6553 } // namespace net
OLDNEW
« no previous file with comments | « no previous file | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698