| 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/quic/quic_session.h" | 5 #include "net/quic/quic_session.h" |
| 6 | 6 |
| 7 #include <set> | 7 #include <set> |
| 8 #include <utility> | 8 #include <utility> |
| 9 | 9 |
| 10 #include "base/rand_util.h" | 10 #include "base/rand_util.h" |
| (...skipping 14 matching lines...) Expand all Loading... |
| 25 #include "net/quic/test_tools/quic_spdy_session_peer.h" | 25 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| 26 #include "net/quic/test_tools/quic_spdy_stream_peer.h" | 26 #include "net/quic/test_tools/quic_spdy_stream_peer.h" |
| 27 #include "net/quic/test_tools/quic_test_utils.h" | 27 #include "net/quic/test_tools/quic_test_utils.h" |
| 28 #include "net/quic/test_tools/reliable_quic_stream_peer.h" | 28 #include "net/quic/test_tools/reliable_quic_stream_peer.h" |
| 29 #include "net/spdy/spdy_framer.h" | 29 #include "net/spdy/spdy_framer.h" |
| 30 #include "net/test/gtest_util.h" | 30 #include "net/test/gtest_util.h" |
| 31 #include "testing/gmock/include/gmock/gmock.h" | 31 #include "testing/gmock/include/gmock/gmock.h" |
| 32 #include "testing/gmock_mutant.h" | 32 #include "testing/gmock_mutant.h" |
| 33 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
| 34 | 34 |
| 35 using net::SpdyHeaderBlock; |
| 36 using net::SpdyPriority; |
| 35 using std::set; | 37 using std::set; |
| 36 using std::string; | 38 using std::string; |
| 37 using std::vector; | 39 using std::vector; |
| 38 using testing::CreateFunctor; | 40 using testing::CreateFunctor; |
| 41 using testing::AtLeast; |
| 39 using testing::InSequence; | 42 using testing::InSequence; |
| 40 using testing::Invoke; | 43 using testing::Invoke; |
| 41 using testing::Return; | 44 using testing::Return; |
| 42 using testing::StrictMock; | 45 using testing::StrictMock; |
| 43 using testing::_; | 46 using testing::_; |
| 44 | 47 |
| 45 namespace net { | 48 namespace net { |
| 46 namespace test { | 49 namespace test { |
| 47 namespace { | 50 namespace { |
| 48 | 51 |
| (...skipping 665 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 714 // Ensure that Writev consumes all the data it is given (simulate no socket | 717 // Ensure that Writev consumes all the data it is given (simulate no socket |
| 715 // blocking). | 718 // blocking). |
| 716 session_.set_writev_consumes_all_data(true); | 719 session_.set_writev_consumes_all_data(true); |
| 717 | 720 |
| 718 // Create a stream, and send enough data to make it flow control blocked. | 721 // Create a stream, and send enough data to make it flow control blocked. |
| 719 TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority); | 722 TestStream* stream2 = session_.CreateOutgoingDynamicStream(kDefaultPriority); |
| 720 string body(kMinimumFlowControlSendWindow, '.'); | 723 string body(kMinimumFlowControlSendWindow, '.'); |
| 721 EXPECT_FALSE(stream2->flow_controller()->IsBlocked()); | 724 EXPECT_FALSE(stream2->flow_controller()->IsBlocked()); |
| 722 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); | 725 EXPECT_FALSE(session_.IsConnectionFlowControlBlocked()); |
| 723 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); | 726 EXPECT_FALSE(session_.IsStreamFlowControlBlocked()); |
| 724 EXPECT_CALL(*connection_, SendBlocked(stream2->id())); | 727 EXPECT_CALL(*connection_, SendBlocked(_)).Times(AtLeast(1)); |
| 725 EXPECT_CALL(*connection_, SendBlocked(0)); | 728 EXPECT_CALL(*connection_, SendBlocked(0)); |
| 726 stream2->WriteOrBufferBody(body, false, nullptr); | 729 stream2->WriteOrBufferBody(body, false, nullptr); |
| 727 EXPECT_TRUE(stream2->flow_controller()->IsBlocked()); | 730 EXPECT_TRUE(stream2->flow_controller()->IsBlocked()); |
| 728 EXPECT_TRUE(session_.IsConnectionFlowControlBlocked()); | 731 EXPECT_TRUE(session_.IsConnectionFlowControlBlocked()); |
| 729 EXPECT_TRUE(session_.IsStreamFlowControlBlocked()); | 732 EXPECT_TRUE(session_.IsStreamFlowControlBlocked()); |
| 730 | 733 |
| 731 // The handshake message will call OnCanWrite, so the stream can resume | 734 // The handshake message will call OnCanWrite, so the stream can resume |
| 732 // writing. | 735 // writing. |
| 733 EXPECT_CALL(*stream2, OnCanWrite()); | 736 EXPECT_CALL(*stream2, OnCanWrite()); |
| 734 // Now complete the crypto handshake, resulting in an increased flow control | 737 // Now complete the crypto handshake, resulting in an increased flow control |
| (...skipping 376 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1111 // The max number of open outgoing streams is less than that of incoming | 1114 // The max number of open outgoing streams is less than that of incoming |
| 1112 // streams, and it should be same as negotiated value. | 1115 // streams, and it should be same as negotiated value. |
| 1113 EXPECT_LT(session_.max_open_outgoing_streams(), | 1116 EXPECT_LT(session_.max_open_outgoing_streams(), |
| 1114 session_.max_open_incoming_streams()); | 1117 session_.max_open_incoming_streams()); |
| 1115 EXPECT_EQ(session_.max_open_outgoing_streams(), | 1118 EXPECT_EQ(session_.max_open_outgoing_streams(), |
| 1116 kDefaultMaxStreamsPerConnection); | 1119 kDefaultMaxStreamsPerConnection); |
| 1117 EXPECT_GT(session_.max_open_incoming_streams(), | 1120 EXPECT_GT(session_.max_open_incoming_streams(), |
| 1118 kDefaultMaxStreamsPerConnection); | 1121 kDefaultMaxStreamsPerConnection); |
| 1119 } | 1122 } |
| 1120 | 1123 |
| 1124 TEST_P(QuicSessionTestServer, EnableFHOLThroughConfigOption) { |
| 1125 QuicConfigPeer::SetReceivedForceHolBlocking(session_.config()); |
| 1126 session_.OnConfigNegotiated(); |
| 1127 if (version() <= QUIC_VERSION_35) { |
| 1128 EXPECT_FALSE(session_.force_hol_blocking()); |
| 1129 } else { |
| 1130 EXPECT_TRUE(session_.force_hol_blocking()); |
| 1131 } |
| 1132 } |
| 1133 |
| 1121 class QuicSessionTestClient : public QuicSessionTestBase { | 1134 class QuicSessionTestClient : public QuicSessionTestBase { |
| 1122 protected: | 1135 protected: |
| 1123 QuicSessionTestClient() : QuicSessionTestBase(Perspective::IS_CLIENT) {} | 1136 QuicSessionTestClient() : QuicSessionTestBase(Perspective::IS_CLIENT) {} |
| 1124 }; | 1137 }; |
| 1125 | 1138 |
| 1126 INSTANTIATE_TEST_CASE_P(Tests, | 1139 INSTANTIATE_TEST_CASE_P(Tests, |
| 1127 QuicSessionTestClient, | 1140 QuicSessionTestClient, |
| 1128 ::testing::ValuesIn(QuicSupportedVersions())); | 1141 ::testing::ValuesIn(QuicSupportedVersions())); |
| 1129 | 1142 |
| 1130 TEST_P(QuicSessionTestClient, AvailableStreamsClient) { | 1143 TEST_P(QuicSessionTestClient, AvailableStreamsClient) { |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1188 | 1201 |
| 1189 QuicTagVector copt; | 1202 QuicTagVector copt; |
| 1190 copt.push_back(kDHDT); | 1203 copt.push_back(kDHDT); |
| 1191 QuicConfigPeer::SetConnectionOptionsToSend(session_.config(), copt); | 1204 QuicConfigPeer::SetConnectionOptionsToSend(session_.config(), copt); |
| 1192 session_.OnConfigNegotiated(); | 1205 session_.OnConfigNegotiated(); |
| 1193 EXPECT_EQ(QuicHeadersStreamPeer::GetSpdyFramer(session_.headers_stream()) | 1206 EXPECT_EQ(QuicHeadersStreamPeer::GetSpdyFramer(session_.headers_stream()) |
| 1194 .header_encoder_table_size(), | 1207 .header_encoder_table_size(), |
| 1195 0UL); | 1208 0UL); |
| 1196 } | 1209 } |
| 1197 | 1210 |
| 1211 TEST_P(QuicSessionTestClient, EnableFHOLThroughConfigOption) { |
| 1212 session_.config()->SetForceHolBlocking(); |
| 1213 session_.OnConfigNegotiated(); |
| 1214 if (version() <= QUIC_VERSION_35) { |
| 1215 EXPECT_FALSE(session_.force_hol_blocking()); |
| 1216 } else { |
| 1217 EXPECT_TRUE(session_.force_hol_blocking()); |
| 1218 } |
| 1219 } |
| 1220 |
| 1198 } // namespace | 1221 } // namespace |
| 1199 } // namespace test | 1222 } // namespace test |
| 1200 } // namespace net | 1223 } // namespace net |
| OLD | NEW |