OLD | NEW |
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/spdy/spdy_session.h" | 5 #include "net/spdy/spdy_session.h" |
6 | 6 |
7 #include <algorithm> | 7 #include <algorithm> |
8 #include <memory> | 8 #include <memory> |
9 #include <utility> | 9 #include <utility> |
10 | 10 |
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
70 base::TimeDelta::FromMilliseconds(2 * kYieldAfterDurationMilliseconds); | 70 base::TimeDelta::FromMilliseconds(2 * kYieldAfterDurationMilliseconds); |
71 return base::TimeTicks::Now() + g_time_delta; | 71 return base::TimeTicks::Now() + g_time_delta; |
72 } | 72 } |
73 | 73 |
74 base::TimeTicks InstantaneousReads() { | 74 base::TimeTicks InstantaneousReads() { |
75 return g_time_now; | 75 return g_time_now; |
76 } | 76 } |
77 | 77 |
78 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { | 78 class MockRequireCTDelegate : public TransportSecurityState::RequireCTDelegate { |
79 public: | 79 public: |
80 MOCK_METHOD1(IsCTRequiredForHost, | 80 MOCK_METHOD1(IsCTRequiredForHost, CTRequirementLevel(const SpdyString& host)); |
81 CTRequirementLevel(const std::string& host)); | |
82 }; | 81 }; |
83 | 82 |
84 } // namespace | 83 } // namespace |
85 | 84 |
86 class SpdySessionTest : public PlatformTest { | 85 class SpdySessionTest : public PlatformTest { |
87 public: | 86 public: |
88 // Functions used with RunResumeAfterUnstallTest(). | 87 // Functions used with RunResumeAfterUnstallTest(). |
89 | 88 |
90 void StallSessionOnly(SpdyStream* stream) { StallSessionSend(); } | 89 void StallSessionOnly(SpdyStream* stream) { StallSessionSend(); } |
91 | 90 |
(...skipping 1906 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1998 int last_accepted_stream_id; | 1997 int last_accepted_stream_id; |
1999 ASSERT_TRUE(entry.GetIntegerValue("last_accepted_stream_id", | 1998 ASSERT_TRUE(entry.GetIntegerValue("last_accepted_stream_id", |
2000 &last_accepted_stream_id)); | 1999 &last_accepted_stream_id)); |
2001 EXPECT_EQ(42, last_accepted_stream_id); | 2000 EXPECT_EQ(42, last_accepted_stream_id); |
2002 int active_streams; | 2001 int active_streams; |
2003 ASSERT_TRUE(entry.GetIntegerValue("active_streams", &active_streams)); | 2002 ASSERT_TRUE(entry.GetIntegerValue("active_streams", &active_streams)); |
2004 EXPECT_EQ(0, active_streams); | 2003 EXPECT_EQ(0, active_streams); |
2005 int unclaimed_streams; | 2004 int unclaimed_streams; |
2006 ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams)); | 2005 ASSERT_TRUE(entry.GetIntegerValue("unclaimed_streams", &unclaimed_streams)); |
2007 EXPECT_EQ(0, unclaimed_streams); | 2006 EXPECT_EQ(0, unclaimed_streams); |
2008 std::string error_code; | 2007 SpdyString error_code; |
2009 ASSERT_TRUE(entry.GetStringValue("error_code", &error_code)); | 2008 ASSERT_TRUE(entry.GetStringValue("error_code", &error_code)); |
2010 EXPECT_EQ("11 (ENHANCE_YOUR_CALM)", error_code); | 2009 EXPECT_EQ("11 (ENHANCE_YOUR_CALM)", error_code); |
2011 std::string debug_data; | 2010 SpdyString debug_data; |
2012 ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data)); | 2011 ASSERT_TRUE(entry.GetStringValue("debug_data", &debug_data)); |
2013 EXPECT_EQ("foo", debug_data); | 2012 EXPECT_EQ("foo", debug_data); |
2014 | 2013 |
2015 // Check that we logged SPDY_SESSION_CLOSE correctly. | 2014 // Check that we logged SPDY_SESSION_CLOSE correctly. |
2016 pos = ExpectLogContainsSomewhere( | 2015 pos = ExpectLogContainsSomewhere( |
2017 entries, 0, NetLogEventType::HTTP2_SESSION_CLOSE, NetLogEventPhase::NONE); | 2016 entries, 0, NetLogEventType::HTTP2_SESSION_CLOSE, NetLogEventPhase::NONE); |
2018 entry = entries[pos]; | 2017 entry = entries[pos]; |
2019 int net_error_code = 0; | 2018 int net_error_code = 0; |
2020 ASSERT_TRUE(entry.GetNetErrorCode(&net_error_code)); | 2019 ASSERT_TRUE(entry.GetNetErrorCode(&net_error_code)); |
2021 EXPECT_THAT(net_error_code, IsOk()); | 2020 EXPECT_THAT(net_error_code, IsOk()); |
(...skipping 261 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2283 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2282 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
2284 | 2283 |
2285 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 2284 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
2286 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2285 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
2287 | 2286 |
2288 // Ensure that the streams have not yet been activated and assigned an id. | 2287 // Ensure that the streams have not yet been activated and assigned an id. |
2289 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2288 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
2290 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2289 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
2291 | 2290 |
2292 // Ensure we don't crash while closing the session. | 2291 // Ensure we don't crash while closing the session. |
2293 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2292 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
2294 | 2293 |
2295 EXPECT_FALSE(spdy_stream1); | 2294 EXPECT_FALSE(spdy_stream1); |
2296 EXPECT_FALSE(spdy_stream2); | 2295 EXPECT_FALSE(spdy_stream2); |
2297 | 2296 |
2298 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2297 EXPECT_TRUE(delegate1.StreamIsClosed()); |
2299 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2298 EXPECT_TRUE(delegate2.StreamIsClosed()); |
2300 | 2299 |
2301 base::RunLoop().RunUntilIdle(); | 2300 base::RunLoop().RunUntilIdle(); |
2302 EXPECT_FALSE(session_); | 2301 EXPECT_FALSE(session_); |
2303 } | 2302 } |
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2339 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); | 2338 spdy_stream1->SendRequestHeaders(std::move(headers), NO_MORE_DATA_TO_SEND); |
2340 | 2339 |
2341 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); | 2340 SpdyHeaderBlock headers2(spdy_util_.ConstructGetHeaderBlock(kDefaultUrl)); |
2342 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); | 2341 spdy_stream2->SendRequestHeaders(std::move(headers2), NO_MORE_DATA_TO_SEND); |
2343 | 2342 |
2344 // Ensure that the streams have not yet been activated and assigned an id. | 2343 // Ensure that the streams have not yet been activated and assigned an id. |
2345 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2344 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
2346 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2345 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
2347 | 2346 |
2348 // Ensure we don't crash while closing the session. | 2347 // Ensure we don't crash while closing the session. |
2349 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2348 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
2350 | 2349 |
2351 EXPECT_FALSE(spdy_stream1); | 2350 EXPECT_FALSE(spdy_stream1); |
2352 EXPECT_FALSE(spdy_stream2); | 2351 EXPECT_FALSE(spdy_stream2); |
2353 | 2352 |
2354 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2353 EXPECT_TRUE(delegate1.StreamIsClosed()); |
2355 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2354 EXPECT_TRUE(delegate2.StreamIsClosed()); |
2356 | 2355 |
2357 base::RunLoop().RunUntilIdle(); | 2356 base::RunLoop().RunUntilIdle(); |
2358 EXPECT_FALSE(session_); | 2357 EXPECT_FALSE(session_); |
2359 } | 2358 } |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2410 // Ensure that the streams have not yet been activated and assigned an id. | 2409 // Ensure that the streams have not yet been activated and assigned an id. |
2411 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2410 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
2412 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2411 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
2413 | 2412 |
2414 base::RunLoop().RunUntilIdle(); | 2413 base::RunLoop().RunUntilIdle(); |
2415 | 2414 |
2416 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 2415 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
2417 EXPECT_EQ(3u, spdy_stream2->stream_id()); | 2416 EXPECT_EQ(3u, spdy_stream2->stream_id()); |
2418 | 2417 |
2419 // Ensure we don't crash while closing the session. | 2418 // Ensure we don't crash while closing the session. |
2420 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2419 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
2421 | 2420 |
2422 EXPECT_FALSE(spdy_stream1); | 2421 EXPECT_FALSE(spdy_stream1); |
2423 EXPECT_FALSE(spdy_stream2); | 2422 EXPECT_FALSE(spdy_stream2); |
2424 | 2423 |
2425 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2424 EXPECT_TRUE(delegate1.StreamIsClosed()); |
2426 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2425 EXPECT_TRUE(delegate2.StreamIsClosed()); |
2427 | 2426 |
2428 EXPECT_TRUE(session_); | 2427 EXPECT_TRUE(session_); |
2429 data.Resume(); | 2428 data.Resume(); |
2430 base::RunLoop().RunUntilIdle(); | 2429 base::RunLoop().RunUntilIdle(); |
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2485 // Ensure that the streams have not yet been activated and assigned an id. | 2484 // Ensure that the streams have not yet been activated and assigned an id. |
2486 EXPECT_EQ(0u, spdy_stream1->stream_id()); | 2485 EXPECT_EQ(0u, spdy_stream1->stream_id()); |
2487 EXPECT_EQ(0u, spdy_stream2->stream_id()); | 2486 EXPECT_EQ(0u, spdy_stream2->stream_id()); |
2488 | 2487 |
2489 base::RunLoop().RunUntilIdle(); | 2488 base::RunLoop().RunUntilIdle(); |
2490 | 2489 |
2491 EXPECT_EQ(1u, spdy_stream1->stream_id()); | 2490 EXPECT_EQ(1u, spdy_stream1->stream_id()); |
2492 EXPECT_EQ(3u, spdy_stream2->stream_id()); | 2491 EXPECT_EQ(3u, spdy_stream2->stream_id()); |
2493 | 2492 |
2494 // Ensure we don't crash while closing the session. | 2493 // Ensure we don't crash while closing the session. |
2495 session_->CloseSessionOnError(ERR_ABORTED, std::string()); | 2494 session_->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
2496 | 2495 |
2497 EXPECT_FALSE(spdy_stream1); | 2496 EXPECT_FALSE(spdy_stream1); |
2498 EXPECT_FALSE(spdy_stream2); | 2497 EXPECT_FALSE(spdy_stream2); |
2499 | 2498 |
2500 EXPECT_TRUE(delegate1.StreamIsClosed()); | 2499 EXPECT_TRUE(delegate1.StreamIsClosed()); |
2501 EXPECT_TRUE(delegate2.StreamIsClosed()); | 2500 EXPECT_TRUE(delegate2.StreamIsClosed()); |
2502 | 2501 |
2503 EXPECT_TRUE(session_); | 2502 EXPECT_TRUE(session_); |
2504 data.Resume(); | 2503 data.Resume(); |
2505 base::RunLoop().RunUntilIdle(); | 2504 base::RunLoop().RunUntilIdle(); |
(...skipping 882 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3388 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. | 3387 MockRead(SYNCHRONOUS, ERR_IO_PENDING) // Stall forever. |
3389 }; | 3388 }; |
3390 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); | 3389 StaticSocketDataProvider data(reads, arraysize(reads), nullptr, 0); |
3391 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3390 session_deps_.socket_factory->AddSocketDataProvider(&data); |
3392 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3391 session_deps_.socket_factory->AddSocketDataProvider(&data); |
3393 | 3392 |
3394 AddSSLSocketData(); | 3393 AddSSLSocketData(); |
3395 | 3394 |
3396 session_deps_.host_resolver->set_synchronous_mode(true); | 3395 session_deps_.host_resolver->set_synchronous_mode(true); |
3397 session_deps_.host_resolver->rules()->AddIPLiteralRule( | 3396 session_deps_.host_resolver->rules()->AddIPLiteralRule( |
3398 "www.example.org", "192.168.0.2", std::string()); | 3397 "www.example.org", "192.168.0.2", SpdyString()); |
3399 session_deps_.host_resolver->rules()->AddIPLiteralRule( | 3398 session_deps_.host_resolver->rules()->AddIPLiteralRule( |
3400 "mail.example.org", "192.168.0.2", std::string()); | 3399 "mail.example.org", "192.168.0.2", SpdyString()); |
3401 // Not strictly needed. | 3400 // Not strictly needed. |
3402 session_deps_.host_resolver->rules()->AddIPLiteralRule( | 3401 session_deps_.host_resolver->rules()->AddIPLiteralRule("3.com", "192.168.0.3", |
3403 "3.com", "192.168.0.3", std::string()); | 3402 SpdyString()); |
3404 | 3403 |
3405 CreateNetworkSession(); | 3404 CreateNetworkSession(); |
3406 | 3405 |
3407 TransportClientSocketPool* pool = | 3406 TransportClientSocketPool* pool = |
3408 http_session_->GetTransportSocketPool( | 3407 http_session_->GetTransportSocketPool( |
3409 HttpNetworkSession::NORMAL_SOCKET_POOL); | 3408 HttpNetworkSession::NORMAL_SOCKET_POOL); |
3410 | 3409 |
3411 // Create an idle SPDY session. | 3410 // Create an idle SPDY session. |
3412 SpdySessionKey key1(HostPortPair("www.example.org", 80), | 3411 SpdySessionKey key1(HostPortPair("www.example.org", 80), |
3413 ProxyServer::Direct(), PRIVACY_MODE_DISABLED); | 3412 ProxyServer::Direct(), PRIVACY_MODE_DISABLED); |
(...skipping 150 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3564 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3563 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
3565 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3564 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
3566 | 3565 |
3567 // Add SpdySession with PrivacyMode Disabled to the pool. | 3566 // Add SpdySession with PrivacyMode Disabled to the pool. |
3568 base::WeakPtr<SpdySession> session_privacy_disabled = | 3567 base::WeakPtr<SpdySession> session_privacy_disabled = |
3569 CreateFakeSpdySession(spdy_session_pool_, key_privacy_disabled); | 3568 CreateFakeSpdySession(spdy_session_pool_, key_privacy_disabled); |
3570 | 3569 |
3571 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3570 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
3572 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3571 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
3573 | 3572 |
3574 session_privacy_enabled->CloseSessionOnError(ERR_ABORTED, std::string()); | 3573 session_privacy_enabled->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
3575 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3574 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
3576 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3575 EXPECT_TRUE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
3577 | 3576 |
3578 session_privacy_disabled->CloseSessionOnError(ERR_ABORTED, std::string()); | 3577 session_privacy_disabled->CloseSessionOnError(ERR_ABORTED, SpdyString()); |
3579 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); | 3578 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_enabled)); |
3580 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); | 3579 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_privacy_disabled)); |
3581 } | 3580 } |
3582 | 3581 |
3583 // Delegate that creates another stream when its stream is closed. | 3582 // Delegate that creates another stream when its stream is closed. |
3584 class StreamCreatingDelegate : public test::StreamDelegateDoNothing { | 3583 class StreamCreatingDelegate : public test::StreamDelegateDoNothing { |
3585 public: | 3584 public: |
3586 StreamCreatingDelegate(const base::WeakPtr<SpdyStream>& stream, | 3585 StreamCreatingDelegate(const base::WeakPtr<SpdyStream>& stream, |
3587 const base::WeakPtr<SpdySession>& session) | 3586 const base::WeakPtr<SpdySession>& session) |
3588 : StreamDelegateDoNothing(stream), | 3587 : StreamDelegateDoNothing(stream), |
(...skipping 289 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3878 | 3877 |
3879 SpdySerializedFrame req( | 3878 SpdySerializedFrame req( |
3880 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 3879 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
3881 SpdySerializedFrame rst( | 3880 SpdySerializedFrame rst( |
3882 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); | 3881 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); |
3883 MockWrite writes[] = { | 3882 MockWrite writes[] = { |
3884 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), | 3883 CreateMockWrite(req, 0), CreateMockWrite(rst, 4), |
3885 }; | 3884 }; |
3886 | 3885 |
3887 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 3886 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
3888 const std::string payload(data_frame_size, 'a'); | 3887 const SpdyString payload(data_frame_size, 'a'); |
3889 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame( | 3888 SpdySerializedFrame data_frame(spdy_util_.ConstructSpdyDataFrame( |
3890 1, payload.data(), data_frame_size, false)); | 3889 1, payload.data(), data_frame_size, false)); |
3891 MockRead reads[] = { | 3890 MockRead reads[] = { |
3892 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), | 3891 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), |
3893 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5), | 3892 CreateMockRead(data_frame, 3), MockRead(ASYNC, ERR_IO_PENDING, 5), |
3894 MockRead(ASYNC, 0, 6), | 3893 MockRead(ASYNC, 0, 6), |
3895 }; | 3894 }; |
3896 | 3895 |
3897 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3896 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
3898 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3897 session_deps_.socket_factory->AddSocketDataProvider(&data); |
(...skipping 53 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3952 session_deps_.host_resolver->set_synchronous_mode(true); | 3951 session_deps_.host_resolver->set_synchronous_mode(true); |
3953 | 3952 |
3954 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 3953 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
3955 0, ERROR_CODE_FLOW_CONTROL_ERROR, | 3954 0, ERROR_CODE_FLOW_CONTROL_ERROR, |
3956 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger " | 3955 "delta_window_size is 400 in DecreaseRecvWindowSize, which is larger " |
3957 "than the receive window size of 500")); | 3956 "than the receive window size of 500")); |
3958 MockWrite writes[] = { | 3957 MockWrite writes[] = { |
3959 CreateMockWrite(goaway, 4), | 3958 CreateMockWrite(goaway, 4), |
3960 }; | 3959 }; |
3961 | 3960 |
3962 const std::string first_data_frame(first_data_frame_size, 'a'); | 3961 const SpdyString first_data_frame(first_data_frame_size, 'a'); |
3963 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( | 3962 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( |
3964 1, first_data_frame.data(), first_data_frame_size, false)); | 3963 1, first_data_frame.data(), first_data_frame_size, false)); |
3965 const std::string second_data_frame(second_data_frame_size, 'b'); | 3964 const SpdyString second_data_frame(second_data_frame_size, 'b'); |
3966 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( | 3965 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( |
3967 1, second_data_frame.data(), second_data_frame_size, false)); | 3966 1, second_data_frame.data(), second_data_frame_size, false)); |
3968 MockRead reads[] = { | 3967 MockRead reads[] = { |
3969 CreateMockRead(first, 0), MockRead(ASYNC, ERR_IO_PENDING, 1), | 3968 CreateMockRead(first, 0), MockRead(ASYNC, ERR_IO_PENDING, 1), |
3970 CreateMockRead(second, 2), MockRead(ASYNC, 0, 3), | 3969 CreateMockRead(second, 2), MockRead(ASYNC, 0, 3), |
3971 }; | 3970 }; |
3972 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 3971 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
3973 session_deps_.socket_factory->AddSocketDataProvider(&data); | 3972 session_deps_.socket_factory->AddSocketDataProvider(&data); |
3974 | 3973 |
3975 AddSSLSocketData(); | 3974 AddSSLSocketData(); |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4012 | 4011 |
4013 SpdySerializedFrame req( | 4012 SpdySerializedFrame req( |
4014 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4013 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
4015 SpdySerializedFrame rst( | 4014 SpdySerializedFrame rst( |
4016 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); | 4015 spdy_util_.ConstructSpdyRstStream(1, ERROR_CODE_FLOW_CONTROL_ERROR)); |
4017 MockWrite writes[] = { | 4016 MockWrite writes[] = { |
4018 CreateMockWrite(req, 0), CreateMockWrite(rst, 6), | 4017 CreateMockWrite(req, 0), CreateMockWrite(rst, 6), |
4019 }; | 4018 }; |
4020 | 4019 |
4021 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4020 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4022 const std::string first_data_frame(first_data_frame_size, 'a'); | 4021 const SpdyString first_data_frame(first_data_frame_size, 'a'); |
4023 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( | 4022 SpdySerializedFrame first(spdy_util_.ConstructSpdyDataFrame( |
4024 1, first_data_frame.data(), first_data_frame_size, false)); | 4023 1, first_data_frame.data(), first_data_frame_size, false)); |
4025 const std::string second_data_frame(second_data_frame_size, 'b'); | 4024 const SpdyString second_data_frame(second_data_frame_size, 'b'); |
4026 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( | 4025 SpdySerializedFrame second(spdy_util_.ConstructSpdyDataFrame( |
4027 1, second_data_frame.data(), second_data_frame_size, false)); | 4026 1, second_data_frame.data(), second_data_frame_size, false)); |
4028 MockRead reads[] = { | 4027 MockRead reads[] = { |
4029 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), | 4028 CreateMockRead(resp, 1), MockRead(ASYNC, ERR_IO_PENDING, 2), |
4030 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), | 4029 CreateMockRead(first, 3), MockRead(ASYNC, ERR_IO_PENDING, 4), |
4031 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7), | 4030 CreateMockRead(second, 5), MockRead(ASYNC, ERR_IO_PENDING, 7), |
4032 MockRead(ASYNC, 0, 8), | 4031 MockRead(ASYNC, 0, 8), |
4033 }; | 4032 }; |
4034 | 4033 |
4035 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); | 4034 SequencedSocketData data(reads, arraysize(reads), writes, arraysize(writes)); |
(...skipping 23 matching lines...) Expand all Loading... |
4059 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); | 4058 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); |
4060 | 4059 |
4061 // First data frame. | 4060 // First data frame. |
4062 data.Resume(); | 4061 data.Resume(); |
4063 base::RunLoop().RunUntilIdle(); | 4062 base::RunLoop().RunUntilIdle(); |
4064 EXPECT_TRUE(spdy_stream->IsLocallyClosed()); | 4063 EXPECT_TRUE(spdy_stream->IsLocallyClosed()); |
4065 EXPECT_EQ(stream_max_recv_window_size - first_data_frame_size, | 4064 EXPECT_EQ(stream_max_recv_window_size - first_data_frame_size, |
4066 spdy_stream->recv_window_size()); | 4065 spdy_stream->recv_window_size()); |
4067 | 4066 |
4068 // Consume first data frame. This does not trigger a WINDOW_UPDATE. | 4067 // Consume first data frame. This does not trigger a WINDOW_UPDATE. |
4069 std::string received_data = delegate.TakeReceivedData(); | 4068 SpdyString received_data = delegate.TakeReceivedData(); |
4070 EXPECT_EQ(static_cast<size_t>(first_data_frame_size), received_data.size()); | 4069 EXPECT_EQ(static_cast<size_t>(first_data_frame_size), received_data.size()); |
4071 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); | 4070 EXPECT_EQ(stream_max_recv_window_size, spdy_stream->recv_window_size()); |
4072 | 4071 |
4073 // Second data frame overflows receiving window, causes the stream to close. | 4072 // Second data frame overflows receiving window, causes the stream to close. |
4074 data.Resume(); | 4073 data.Resume(); |
4075 base::RunLoop().RunUntilIdle(); | 4074 base::RunLoop().RunUntilIdle(); |
4076 EXPECT_FALSE(spdy_stream.get()); | 4075 EXPECT_FALSE(spdy_stream.get()); |
4077 | 4076 |
4078 // RST_STREAM | 4077 // RST_STREAM |
4079 EXPECT_TRUE(session_); | 4078 EXPECT_TRUE(session_); |
(...skipping 13 matching lines...) Expand all Loading... |
4093 | 4092 |
4094 // Drop any received data. | 4093 // Drop any received data. |
4095 void OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) override {} | 4094 void OnDataReceived(std::unique_ptr<SpdyBuffer> buffer) override {} |
4096 }; | 4095 }; |
4097 | 4096 |
4098 // Send data back and forth but use a delegate that drops its received | 4097 // Send data back and forth but use a delegate that drops its received |
4099 // data. The receive window should still increase to its original | 4098 // data. The receive window should still increase to its original |
4100 // value, i.e. we shouldn't "leak" receive window bytes. | 4099 // value, i.e. we shouldn't "leak" receive window bytes. |
4101 TEST_F(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { | 4100 TEST_F(SpdySessionTest, SessionFlowControlNoReceiveLeaks) { |
4102 const int32_t kMsgDataSize = 100; | 4101 const int32_t kMsgDataSize = 100; |
4103 const std::string msg_data(kMsgDataSize, 'a'); | 4102 const SpdyString msg_data(kMsgDataSize, 'a'); |
4104 | 4103 |
4105 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 4104 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
4106 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4105 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
4107 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( | 4106 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( |
4108 1, msg_data.data(), kMsgDataSize, false)); | 4107 1, msg_data.data(), kMsgDataSize, false)); |
4109 MockWrite writes[] = { | 4108 MockWrite writes[] = { |
4110 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), | 4109 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), |
4111 }; | 4110 }; |
4112 | 4111 |
4113 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4112 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4164 data.Resume(); | 4163 data.Resume(); |
4165 base::RunLoop().RunUntilIdle(); | 4164 base::RunLoop().RunUntilIdle(); |
4166 EXPECT_FALSE(session_); | 4165 EXPECT_FALSE(session_); |
4167 } | 4166 } |
4168 | 4167 |
4169 // Send data back and forth but close the stream before its data frame | 4168 // Send data back and forth but close the stream before its data frame |
4170 // can be written to the socket. The send window should then increase | 4169 // can be written to the socket. The send window should then increase |
4171 // to its original value, i.e. we shouldn't "leak" send window bytes. | 4170 // to its original value, i.e. we shouldn't "leak" send window bytes. |
4172 TEST_F(SpdySessionTest, SessionFlowControlNoSendLeaks) { | 4171 TEST_F(SpdySessionTest, SessionFlowControlNoSendLeaks) { |
4173 const int32_t kMsgDataSize = 100; | 4172 const int32_t kMsgDataSize = 100; |
4174 const std::string msg_data(kMsgDataSize, 'a'); | 4173 const SpdyString msg_data(kMsgDataSize, 'a'); |
4175 | 4174 |
4176 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 4175 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
4177 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4176 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
4178 MockWrite writes[] = { | 4177 MockWrite writes[] = { |
4179 CreateMockWrite(req, 0), | 4178 CreateMockWrite(req, 0), |
4180 }; | 4179 }; |
4181 | 4180 |
4182 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4181 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
4183 MockRead reads[] = { | 4182 MockRead reads[] = { |
4184 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(resp, 2), | 4183 MockRead(ASYNC, ERR_IO_PENDING, 1), CreateMockRead(resp, 2), |
(...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4236 EXPECT_FALSE(session_); | 4235 EXPECT_FALSE(session_); |
4237 | 4236 |
4238 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4237 EXPECT_TRUE(data.AllWriteDataConsumed()); |
4239 EXPECT_TRUE(data.AllReadDataConsumed()); | 4238 EXPECT_TRUE(data.AllReadDataConsumed()); |
4240 } | 4239 } |
4241 | 4240 |
4242 // Send data back and forth; the send and receive windows should | 4241 // Send data back and forth; the send and receive windows should |
4243 // change appropriately. | 4242 // change appropriately. |
4244 TEST_F(SpdySessionTest, SessionFlowControlEndToEnd) { | 4243 TEST_F(SpdySessionTest, SessionFlowControlEndToEnd) { |
4245 const int32_t kMsgDataSize = 100; | 4244 const int32_t kMsgDataSize = 100; |
4246 const std::string msg_data(kMsgDataSize, 'a'); | 4245 const SpdyString msg_data(kMsgDataSize, 'a'); |
4247 | 4246 |
4248 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( | 4247 SpdySerializedFrame req(spdy_util_.ConstructSpdyPost( |
4249 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); | 4248 kDefaultUrl, 1, kMsgDataSize, MEDIUM, nullptr, 0)); |
4250 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( | 4249 SpdySerializedFrame msg(spdy_util_.ConstructSpdyDataFrame( |
4251 1, msg_data.data(), kMsgDataSize, false)); | 4250 1, msg_data.data(), kMsgDataSize, false)); |
4252 MockWrite writes[] = { | 4251 MockWrite writes[] = { |
4253 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), | 4252 CreateMockWrite(req, 0), CreateMockWrite(msg, 2), |
4254 }; | 4253 }; |
4255 | 4254 |
4256 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); | 4255 SpdySerializedFrame resp(spdy_util_.ConstructSpdyGetReply(nullptr, 0, 1)); |
(...skipping 142 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4399 EXPECT_TRUE(stream->send_stalled_by_flow_control()); | 4398 EXPECT_TRUE(stream->send_stalled_by_flow_control()); |
4400 | 4399 |
4401 unstall_function.Run(stream.get(), kBodyDataSize); | 4400 unstall_function.Run(stream.get(), kBodyDataSize); |
4402 | 4401 |
4403 EXPECT_FALSE(stream->send_stalled_by_flow_control()); | 4402 EXPECT_FALSE(stream->send_stalled_by_flow_control()); |
4404 | 4403 |
4405 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4404 EXPECT_THAT(delegate.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4406 | 4405 |
4407 EXPECT_TRUE(delegate.send_headers_completed()); | 4406 EXPECT_TRUE(delegate.send_headers_completed()); |
4408 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); | 4407 EXPECT_EQ("200", delegate.GetResponseHeaderValue(":status")); |
4409 EXPECT_EQ(std::string(), delegate.TakeReceivedData()); | 4408 EXPECT_EQ(SpdyString(), delegate.TakeReceivedData()); |
4410 | 4409 |
4411 // Run SpdySession::PumpWriteLoop which destroys |session_|. | 4410 // Run SpdySession::PumpWriteLoop which destroys |session_|. |
4412 base::RunLoop().RunUntilIdle(); | 4411 base::RunLoop().RunUntilIdle(); |
4413 | 4412 |
4414 EXPECT_FALSE(session_); | 4413 EXPECT_FALSE(session_); |
4415 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4414 EXPECT_TRUE(data.AllWriteDataConsumed()); |
4416 } | 4415 } |
4417 | 4416 |
4418 // Run the resume-after-unstall test with all possible stall and | 4417 // Run the resume-after-unstall test with all possible stall and |
4419 // unstall sequences. | 4418 // unstall sequences. |
(...skipping 140 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4560 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); | 4559 EXPECT_FALSE(stream1->send_stalled_by_flow_control()); |
4561 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); | 4560 EXPECT_FALSE(stream2->send_stalled_by_flow_control()); |
4562 | 4561 |
4563 base::RunLoop().RunUntilIdle(); | 4562 base::RunLoop().RunUntilIdle(); |
4564 | 4563 |
4565 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4564 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4566 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4565 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4567 | 4566 |
4568 EXPECT_TRUE(delegate1.send_headers_completed()); | 4567 EXPECT_TRUE(delegate1.send_headers_completed()); |
4569 EXPECT_EQ("200", delegate1.GetResponseHeaderValue(":status")); | 4568 EXPECT_EQ("200", delegate1.GetResponseHeaderValue(":status")); |
4570 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4569 EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData()); |
4571 | 4570 |
4572 EXPECT_TRUE(delegate2.send_headers_completed()); | 4571 EXPECT_TRUE(delegate2.send_headers_completed()); |
4573 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); | 4572 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); |
4574 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4573 EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData()); |
4575 | 4574 |
4576 EXPECT_FALSE(session_); | 4575 EXPECT_FALSE(session_); |
4577 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4576 EXPECT_TRUE(data.AllWriteDataConsumed()); |
4578 EXPECT_TRUE(data.AllReadDataConsumed()); | 4577 EXPECT_TRUE(data.AllReadDataConsumed()); |
4579 } | 4578 } |
4580 | 4579 |
4581 // Delegate that closes a given stream after sending its body. | 4580 // Delegate that closes a given stream after sending its body. |
4582 class StreamClosingDelegate : public test::StreamDelegateWithBody { | 4581 class StreamClosingDelegate : public test::StreamDelegateWithBody { |
4583 public: | 4582 public: |
4584 StreamClosingDelegate(const base::WeakPtr<SpdyStream>& stream, | 4583 StreamClosingDelegate(const base::WeakPtr<SpdyStream>& stream, |
(...skipping 137 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4722 data.Resume(); | 4721 data.Resume(); |
4723 base::RunLoop().RunUntilIdle(); | 4722 base::RunLoop().RunUntilIdle(); |
4724 EXPECT_FALSE(stream2); | 4723 EXPECT_FALSE(stream2); |
4725 EXPECT_FALSE(session_); | 4724 EXPECT_FALSE(session_); |
4726 | 4725 |
4727 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4726 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4728 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4727 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4729 EXPECT_THAT(delegate3.WaitForClose(), IsOk()); | 4728 EXPECT_THAT(delegate3.WaitForClose(), IsOk()); |
4730 | 4729 |
4731 EXPECT_TRUE(delegate1.send_headers_completed()); | 4730 EXPECT_TRUE(delegate1.send_headers_completed()); |
4732 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4731 EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData()); |
4733 | 4732 |
4734 EXPECT_TRUE(delegate2.send_headers_completed()); | 4733 EXPECT_TRUE(delegate2.send_headers_completed()); |
4735 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); | 4734 EXPECT_EQ("200", delegate2.GetResponseHeaderValue(":status")); |
4736 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4735 EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData()); |
4737 | 4736 |
4738 EXPECT_TRUE(delegate3.send_headers_completed()); | 4737 EXPECT_TRUE(delegate3.send_headers_completed()); |
4739 EXPECT_EQ(std::string(), delegate3.TakeReceivedData()); | 4738 EXPECT_EQ(SpdyString(), delegate3.TakeReceivedData()); |
4740 | 4739 |
4741 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4740 EXPECT_TRUE(data.AllWriteDataConsumed()); |
4742 } | 4741 } |
4743 | 4742 |
4744 // Cause a stall by reducing the flow control send window to | 4743 // Cause a stall by reducing the flow control send window to |
4745 // 0. Unstalling the session should properly handle the session itself | 4744 // 0. Unstalling the session should properly handle the session itself |
4746 // being closed. | 4745 // being closed. |
4747 TEST_F(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { | 4746 TEST_F(SpdySessionTest, SendWindowSizeIncreaseWithDeletedSession) { |
4748 session_deps_.host_resolver->set_synchronous_mode(true); | 4747 session_deps_.host_resolver->set_synchronous_mode(true); |
4749 | 4748 |
(...skipping 71 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4821 data.Resume(); | 4820 data.Resume(); |
4822 base::RunLoop().RunUntilIdle(); | 4821 base::RunLoop().RunUntilIdle(); |
4823 EXPECT_FALSE(session_); | 4822 EXPECT_FALSE(session_); |
4824 | 4823 |
4825 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); | 4824 EXPECT_FALSE(HasSpdySession(spdy_session_pool_, key_)); |
4826 | 4825 |
4827 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4826 EXPECT_THAT(delegate1.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4828 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); | 4827 EXPECT_THAT(delegate2.WaitForClose(), IsError(ERR_CONNECTION_CLOSED)); |
4829 | 4828 |
4830 EXPECT_TRUE(delegate1.send_headers_completed()); | 4829 EXPECT_TRUE(delegate1.send_headers_completed()); |
4831 EXPECT_EQ(std::string(), delegate1.TakeReceivedData()); | 4830 EXPECT_EQ(SpdyString(), delegate1.TakeReceivedData()); |
4832 | 4831 |
4833 EXPECT_TRUE(delegate2.send_headers_completed()); | 4832 EXPECT_TRUE(delegate2.send_headers_completed()); |
4834 EXPECT_EQ(std::string(), delegate2.TakeReceivedData()); | 4833 EXPECT_EQ(SpdyString(), delegate2.TakeReceivedData()); |
4835 | 4834 |
4836 EXPECT_TRUE(data.AllWriteDataConsumed()); | 4835 EXPECT_TRUE(data.AllWriteDataConsumed()); |
4837 } | 4836 } |
4838 | 4837 |
4839 TEST_F(SpdySessionTest, GoAwayOnSessionFlowControlError) { | 4838 TEST_F(SpdySessionTest, GoAwayOnSessionFlowControlError) { |
4840 SpdySerializedFrame req( | 4839 SpdySerializedFrame req( |
4841 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); | 4840 spdy_util_.ConstructSpdyGet(nullptr, 0, 1, LOWEST, true)); |
4842 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( | 4841 SpdySerializedFrame goaway(spdy_util_.ConstructSpdyGoAway( |
4843 0, ERROR_CODE_FLOW_CONTROL_ERROR, | 4842 0, ERROR_CODE_FLOW_CONTROL_ERROR, |
4844 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than " | 4843 "delta_window_size is 6 in DecreaseRecvWindowSize, which is larger than " |
(...skipping 1255 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
6100 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), | 6099 ssl_info.cert = ImportCertFromFile(GetTestCertsDirectory(), |
6101 "spdy_pooling.pem"); | 6100 "spdy_pooling.pem"); |
6102 ssl_info.is_issued_by_known_root = true; | 6101 ssl_info.is_issued_by_known_root = true; |
6103 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); | 6102 ssl_info.public_key_hashes.push_back(test::GetTestHashValue(primary_pin)); |
6104 | 6103 |
6105 EXPECT_TRUE(SpdySession::CanPool( | 6104 EXPECT_TRUE(SpdySession::CanPool( |
6106 &tss, ssl_info, "www.example.org", "mail.example.org")); | 6105 &tss, ssl_info, "www.example.org", "mail.example.org")); |
6107 } | 6106 } |
6108 | 6107 |
6109 } // namespace net | 6108 } // namespace net |
OLD | NEW |