| 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/tools/quic/quic_client_session.h" | 5 #include "net/tools/quic/quic_client_session.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "net/base/ip_endpoint.h" | 9 #include "net/base/ip_endpoint.h" |
| 10 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h" | 10 #include "net/quic/crypto/aes_128_gcm_12_encrypter.h" |
| 11 #include "net/quic/quic_flags.h" | 11 #include "net/quic/quic_flags.h" |
| 12 #include "net/quic/test_tools/crypto_test_utils.h" | 12 #include "net/quic/test_tools/crypto_test_utils.h" |
| 13 #include "net/quic/test_tools/quic_session_peer.h" | 13 #include "net/quic/test_tools/quic_spdy_session_peer.h" |
| 14 #include "net/quic/test_tools/quic_test_utils.h" | 14 #include "net/quic/test_tools/quic_test_utils.h" |
| 15 #include "net/tools/quic/quic_spdy_client_stream.h" | 15 #include "net/tools/quic/quic_spdy_client_stream.h" |
| 16 #include "testing/gtest/include/gtest/gtest.h" | 16 #include "testing/gtest/include/gtest/gtest.h" |
| 17 | 17 |
| 18 using net::test::ConstructEncryptedPacket; | 18 using net::test::ConstructEncryptedPacket; |
| 19 using net::test::ConstructMisFramedEncryptedPacket; | 19 using net::test::ConstructMisFramedEncryptedPacket; |
| 20 using net::test::CryptoTestUtils; | 20 using net::test::CryptoTestUtils; |
| 21 using net::test::DefaultQuicConfig; | 21 using net::test::DefaultQuicConfig; |
| 22 using net::test::MockConnection; | 22 using net::test::MockConnection; |
| 23 using net::test::PacketSavingConnection; | 23 using net::test::PacketSavingConnection; |
| 24 using net::test::QuicSessionPeer; | 24 using net::test::QuicSpdySessionPeer; |
| 25 using net::test::SupportedVersions; | 25 using net::test::SupportedVersions; |
| 26 using net::test::TestPeerIPAddress; | 26 using net::test::TestPeerIPAddress; |
| 27 using net::test::ValueRestore; | 27 using net::test::ValueRestore; |
| 28 using net::test::kTestPort; | 28 using net::test::kTestPort; |
| 29 using testing::AnyNumber; | 29 using testing::AnyNumber; |
| 30 using testing::Invoke; | 30 using testing::Invoke; |
| 31 using testing::Truly; | 31 using testing::Truly; |
| 32 using testing::_; | 32 using testing::_; |
| 33 | 33 |
| 34 namespace net { | 34 namespace net { |
| (...skipping 38 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 73 } | 73 } |
| 74 | 74 |
| 75 TEST_P(ToolsQuicClientSessionTest, MaxNumStreams) { | 75 TEST_P(ToolsQuicClientSessionTest, MaxNumStreams) { |
| 76 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber()); | 76 EXPECT_CALL(*connection_, SendRstStream(_, _, _)).Times(AnyNumber()); |
| 77 | 77 |
| 78 session_->config()->SetMaxStreamsPerConnection(1, 1); | 78 session_->config()->SetMaxStreamsPerConnection(1, 1); |
| 79 | 79 |
| 80 // Initialize crypto before the client session will create a stream. | 80 // Initialize crypto before the client session will create a stream. |
| 81 CompleteCryptoHandshake(); | 81 CompleteCryptoHandshake(); |
| 82 | 82 |
| 83 QuicSpdyClientStream* stream = session_->CreateOutgoingDataStream(); | 83 QuicSpdyClientStream* stream = session_->CreateOutgoingDynamicStream(); |
| 84 ASSERT_TRUE(stream); | 84 ASSERT_TRUE(stream); |
| 85 EXPECT_FALSE(session_->CreateOutgoingDataStream()); | 85 EXPECT_FALSE(session_->CreateOutgoingDynamicStream()); |
| 86 | 86 |
| 87 // Close a stream and ensure I can now open a new one. | 87 // Close a stream and ensure I can now open a new one. |
| 88 session_->CloseStream(stream->id()); | 88 session_->CloseStream(stream->id()); |
| 89 stream = session_->CreateOutgoingDataStream(); | 89 stream = session_->CreateOutgoingDynamicStream(); |
| 90 EXPECT_TRUE(stream); | 90 EXPECT_TRUE(stream); |
| 91 } | 91 } |
| 92 | 92 |
| 93 TEST_P(ToolsQuicClientSessionTest, GoAwayReceived) { | 93 TEST_P(ToolsQuicClientSessionTest, GoAwayReceived) { |
| 94 CompleteCryptoHandshake(); | 94 CompleteCryptoHandshake(); |
| 95 | 95 |
| 96 // After receiving a GoAway, I should no longer be able to create outgoing | 96 // After receiving a GoAway, I should no longer be able to create outgoing |
| 97 // streams. | 97 // streams. |
| 98 session_->OnGoAway(QuicGoAwayFrame(QUIC_PEER_GOING_AWAY, 1u, "Going away.")); | 98 session_->OnGoAway(QuicGoAwayFrame(QUIC_PEER_GOING_AWAY, 1u, "Going away.")); |
| 99 EXPECT_EQ(nullptr, session_->CreateOutgoingDataStream()); | 99 EXPECT_EQ(nullptr, session_->CreateOutgoingDynamicStream()); |
| 100 } | 100 } |
| 101 | 101 |
| 102 TEST_P(ToolsQuicClientSessionTest, SetFecProtectionFromConfig) { | 102 TEST_P(ToolsQuicClientSessionTest, SetFecProtectionFromConfig) { |
| 103 ValueRestore<bool> old_flag(&FLAGS_enable_quic_fec, true); | 103 ValueRestore<bool> old_flag(&FLAGS_enable_quic_fec, true); |
| 104 | 104 |
| 105 // Set FEC config in client's connection options. | 105 // Set FEC config in client's connection options. |
| 106 QuicTagVector copt; | 106 QuicTagVector copt; |
| 107 copt.push_back(kFHDR); | 107 copt.push_back(kFHDR); |
| 108 session_->config()->SetConnectionOptionsToSend(copt); | 108 session_->config()->SetConnectionOptionsToSend(copt); |
| 109 | 109 |
| 110 // Doing the handshake should set up FEC config correctly. | 110 // Doing the handshake should set up FEC config correctly. |
| 111 CompleteCryptoHandshake(); | 111 CompleteCryptoHandshake(); |
| 112 | 112 |
| 113 // Verify that headers stream is always protected and data streams are | 113 // Verify that headers stream is always protected and data streams are |
| 114 // optionally protected. | 114 // optionally protected. |
| 115 EXPECT_EQ(FEC_PROTECT_ALWAYS, | 115 EXPECT_EQ(FEC_PROTECT_ALWAYS, QuicSpdySessionPeer::GetHeadersStream( |
| 116 QuicSessionPeer::GetHeadersStream(session_.get())->fec_policy()); | 116 session_.get())->fec_policy()); |
| 117 QuicSpdyClientStream* stream = session_->CreateOutgoingDataStream(); | 117 QuicSpdyClientStream* stream = session_->CreateOutgoingDynamicStream(); |
| 118 ASSERT_TRUE(stream); | 118 ASSERT_TRUE(stream); |
| 119 EXPECT_EQ(FEC_PROTECT_OPTIONAL, stream->fec_policy()); | 119 EXPECT_EQ(FEC_PROTECT_OPTIONAL, stream->fec_policy()); |
| 120 } | 120 } |
| 121 | 121 |
| 122 static bool CheckForDecryptionError(QuicFramer* framer) { | 122 static bool CheckForDecryptionError(QuicFramer* framer) { |
| 123 return framer->error() == QUIC_DECRYPTION_FAILURE; | 123 return framer->error() == QUIC_DECRYPTION_FAILURE; |
| 124 } | 124 } |
| 125 | 125 |
| 126 // Regression test for b/17206611. | 126 // Regression test for b/17206611. |
| 127 TEST_P(ToolsQuicClientSessionTest, InvalidPacketReceived) { | 127 TEST_P(ToolsQuicClientSessionTest, InvalidPacketReceived) { |
| (...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 177 PACKET_6BYTE_SEQUENCE_NUMBER, nullptr)); | 177 PACKET_6BYTE_SEQUENCE_NUMBER, nullptr)); |
| 178 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails(_, _)).Times(1); | 178 EXPECT_CALL(*connection_, SendConnectionCloseWithDetails(_, _)).Times(1); |
| 179 session_->connection()->ProcessUdpPacket(client_address, server_address, | 179 session_->connection()->ProcessUdpPacket(client_address, server_address, |
| 180 *packet); | 180 *packet); |
| 181 } | 181 } |
| 182 | 182 |
| 183 } // namespace | 183 } // namespace |
| 184 } // namespace test | 184 } // namespace test |
| 185 } // namespace tools | 185 } // namespace tools |
| 186 } // namespace net | 186 } // namespace net |
| OLD | NEW |