| 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_client_session.h" | 5 #include "net/quic/quic_client_session.h" |
| 6 | 6 |
| 7 #include <vector> | 7 #include <vector> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/base/capturing_net_log.h" | 10 #include "net/base/capturing_net_log.h" |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 79 streams.push_back(stream); | 79 streams.push_back(stream); |
| 80 } | 80 } |
| 81 EXPECT_FALSE(session_.CreateOutgoingReliableStream()); | 81 EXPECT_FALSE(session_.CreateOutgoingReliableStream()); |
| 82 | 82 |
| 83 // Close a stream and ensure I can now open a new one. | 83 // Close a stream and ensure I can now open a new one. |
| 84 session_.CloseStream(streams[0]->id()); | 84 session_.CloseStream(streams[0]->id()); |
| 85 EXPECT_TRUE(session_.CreateOutgoingReliableStream()); | 85 EXPECT_TRUE(session_.CreateOutgoingReliableStream()); |
| 86 } | 86 } |
| 87 | 87 |
| 88 TEST_F(QuicClientSessionTest, GoAwayReceived) { | 88 TEST_F(QuicClientSessionTest, GoAwayReceived) { |
| 89 // Initialize crypto before the client session will create a stream. | 89 if (!Aes128GcmEncrypter::IsSupported()) { |
| 90 ASSERT_TRUE(session_.CryptoConnect(callback_.callback())); | 90 LOG(INFO) << "AES GCM not supported. Test skipped."; |
| 91 // Simulate the server crypto handshake. | 91 return; |
| 92 CryptoHandshakeMessage server_message; | 92 } |
| 93 server_message.set_tag(kSHLO); | 93 |
| 94 session_.GetCryptoStream()->OnHandshakeMessage(server_message); | 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(NULL, session_.CreateOutgoingReliableStream()); | 99 EXPECT_EQ(NULL, session_.CreateOutgoingReliableStream()); |
| 100 } | 100 } |
| 101 | 101 |
| 102 TEST_F(QuicClientSessionTest, Logging) { | 102 TEST_F(QuicClientSessionTest, Logging) { |
| 103 if (!Aes128GcmEncrypter::IsSupported()) { | 103 if (!Aes128GcmEncrypter::IsSupported()) { |
| 104 LOG(INFO) << "AES GCM not supported. Test skipped."; | 104 LOG(INFO) << "AES GCM not supported. Test skipped."; |
| 105 return; | 105 return; |
| 106 } | 106 } |
| 107 | 107 |
| 108 CompleteCryptoHandshake(); | 108 CompleteCryptoHandshake(); |
| 109 | 109 |
| 110 // TODO(rch): Add some helper methods to simplify packet creation in tests. | 110 // TODO(rch): Add some helper methods to simplify packet creation in tests. |
| 111 // Receive a packet, and verify that it was logged. | 111 // Receive a packet, and verify that it was logged. |
| 112 QuicFramer framer(kQuicVersion1, | 112 QuicFramer framer(kQuicVersion1, QuicTime::Zero(), false); |
| 113 QuicDecrypter::Create(kNULL), | |
| 114 QuicEncrypter::Create(kNULL), | |
| 115 QuicTime::Zero(), | |
| 116 false); | |
| 117 QuicRstStreamFrame frame; | 113 QuicRstStreamFrame frame; |
| 118 frame.stream_id = 2; | 114 frame.stream_id = 2; |
| 119 frame.error_code = QUIC_STREAM_CONNECTION_ERROR; | 115 frame.error_code = QUIC_STREAM_CONNECTION_ERROR; |
| 120 frame.error_details = "doh!"; | 116 frame.error_details = "doh!"; |
| 121 | 117 |
| 122 QuicFrames frames; | 118 QuicFrames frames; |
| 123 frames.push_back(QuicFrame(&frame)); | 119 frames.push_back(QuicFrame(&frame)); |
| 124 QuicPacketHeader header; | 120 QuicPacketHeader header; |
| 125 header.public_header.guid = 1; | 121 header.public_header.guid = 1; |
| 126 header.public_header.reset_flag = false; | 122 header.public_header.reset_flag = false; |
| 127 header.public_header.version_flag = false; | 123 header.public_header.version_flag = false; |
| 128 header.packet_sequence_number = 1; | 124 header.packet_sequence_number = 1; |
| 129 header.entropy_flag = false; | 125 header.entropy_flag = false; |
| 130 header.fec_flag = false; | 126 header.fec_flag = false; |
| 131 header.fec_entropy_flag = false; | 127 header.fec_entropy_flag = false; |
| 132 header.fec_group = 0; | 128 header.fec_group = 0; |
| 133 scoped_ptr<QuicPacket> p( | 129 scoped_ptr<QuicPacket> p( |
| 134 framer.ConstructFrameDataPacket(header, frames).packet); | 130 framer.ConstructFrameDataPacket(header, frames).packet); |
| 135 scoped_ptr<QuicEncryptedPacket> packet(framer.EncryptPacket(1, *p)); | 131 scoped_ptr<QuicEncryptedPacket> packet(framer.EncryptPacket( |
| 132 ENCRYPTION_NONE, 1, *p)); |
| 136 IPAddressNumber ip; | 133 IPAddressNumber ip; |
| 137 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); | 134 CHECK(ParseIPLiteralToNumber("192.0.2.33", &ip)); |
| 138 IPEndPoint peer_addr = IPEndPoint(ip, 443); | 135 IPEndPoint peer_addr = IPEndPoint(ip, 443); |
| 139 IPEndPoint self_addr = IPEndPoint(ip, 8435); | 136 IPEndPoint self_addr = IPEndPoint(ip, 8435); |
| 140 | 137 |
| 141 connection_->ProcessUdpPacketInternal(self_addr, peer_addr, *packet); | 138 connection_->ProcessUdpPacketInternal(self_addr, peer_addr, *packet); |
| 142 | 139 |
| 143 // Check that the NetLog was filled reasonably. | 140 // Check that the NetLog was filled reasonably. |
| 144 net::CapturingNetLog::CapturedEntryList entries; | 141 net::CapturingNetLog::CapturedEntryList entries; |
| 145 net_log_.GetEntries(&entries); | 142 net_log_.GetEntries(&entries); |
| (...skipping 20 matching lines...) Expand all Loading... |
| 166 ASSERT_TRUE(entries[pos].GetIntegerValue("error_code", &error_code)); | 163 ASSERT_TRUE(entries[pos].GetIntegerValue("error_code", &error_code)); |
| 167 EXPECT_EQ(frame.error_code, static_cast<QuicRstStreamErrorCode>(error_code)); | 164 EXPECT_EQ(frame.error_code, static_cast<QuicRstStreamErrorCode>(error_code)); |
| 168 std::string details; | 165 std::string details; |
| 169 ASSERT_TRUE(entries[pos].GetStringValue("details", &details)); | 166 ASSERT_TRUE(entries[pos].GetStringValue("details", &details)); |
| 170 EXPECT_EQ(frame.error_details, details); | 167 EXPECT_EQ(frame.error_details, details); |
| 171 } | 168 } |
| 172 | 169 |
| 173 } // namespace | 170 } // namespace |
| 174 } // namespace test | 171 } // namespace test |
| 175 } // namespace net | 172 } // namespace net |
| OLD | NEW |