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_crypto_server_stream.h" | 5 #include "net/quic/quic_crypto_server_stream.h" |
6 | 6 |
7 #include <map> | 7 #include <map> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/memory/scoped_ptr.h" | 10 #include "base/memory/scoped_ptr.h" |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
47 } | 47 } |
48 | 48 |
49 QuicStreamFrame* frame() { return &frame_; } | 49 QuicStreamFrame* frame() { return &frame_; } |
50 | 50 |
51 private: | 51 private: |
52 QuicStreamFrame frame_; | 52 QuicStreamFrame frame_; |
53 | 53 |
54 DISALLOW_COPY_AND_ASSIGN(TestQuicVisitor); | 54 DISALLOW_COPY_AND_ASSIGN(TestQuicVisitor); |
55 }; | 55 }; |
56 | 56 |
57 class TestSession: public QuicSession { | |
58 public: | |
59 TestSession(QuicConnection* connection, bool is_server) | |
60 : QuicSession(connection, is_server) { | |
61 } | |
62 | |
63 MOCK_METHOD1(CreateIncomingReliableStream, | |
64 ReliableQuicStream*(QuicStreamId id)); | |
65 MOCK_METHOD0(GetCryptoStream, QuicCryptoStream*()); | |
66 MOCK_METHOD0(CreateOutgoingReliableStream, ReliableQuicStream*()); | |
67 }; | |
68 | |
69 class QuicCryptoServerStreamTest : public ::testing::Test { | 57 class QuicCryptoServerStreamTest : public ::testing::Test { |
70 public: | 58 public: |
71 QuicCryptoServerStreamTest() | 59 QuicCryptoServerStreamTest() |
72 : guid_(1), | 60 : guid_(1), |
73 addr_(ParseIPLiteralToNumber("192.0.2.33", &ip_) ? | 61 addr_(ParseIPLiteralToNumber("192.0.2.33", &ip_) ? |
74 ip_ : IPAddressNumber(), 1), | 62 ip_ : IPAddressNumber(), 1), |
75 connection_(new PacketSavingConnection(guid_, addr_, true)), | 63 connection_(new PacketSavingConnection(guid_, addr_, true)), |
76 session_(connection_, true), | 64 session_(connection_, true), |
77 crypto_config_(QuicCryptoServerConfig::TESTING), | 65 crypto_config_(QuicCryptoServerConfig::TESTING), |
78 stream_(config_, crypto_config_, &session_) { | 66 stream_(config_, crypto_config_, &session_) { |
| 67 session_.SetCryptoStream(&stream_); |
79 // We advance the clock initially because the default time is zero and the | 68 // We advance the clock initially because the default time is zero and the |
80 // strike register worries that we've just overflowed a uint32 time. | 69 // strike register worries that we've just overflowed a uint32 time. |
81 connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); | 70 connection_->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); |
82 // TODO(rtenneti): Enable testing of ProofSource. | 71 // TODO(rtenneti): Enable testing of ProofSource. |
83 // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting()); | 72 // crypto_config_.SetProofSource(CryptoTestUtils::ProofSourceForTesting()); |
84 | 73 |
85 CryptoTestUtils::SetupCryptoServerConfigForTest( | 74 CryptoTestUtils::SetupCryptoServerConfigForTest( |
86 connection_->clock(), connection_->random_generator(), &config_, | 75 connection_->clock(), connection_->random_generator(), &config_, |
87 &crypto_config_); | 76 &crypto_config_); |
88 } | 77 } |
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
145 } | 134 } |
146 | 135 |
147 QuicGuid guid(1); | 136 QuicGuid guid(1); |
148 IPAddressNumber ip; | 137 IPAddressNumber ip; |
149 ParseIPLiteralToNumber("127.0.0.1", &ip); | 138 ParseIPLiteralToNumber("127.0.0.1", &ip); |
150 IPEndPoint addr(ip, 0); | 139 IPEndPoint addr(ip, 0); |
151 PacketSavingConnection* client_conn = | 140 PacketSavingConnection* client_conn = |
152 new PacketSavingConnection(guid, addr, false); | 141 new PacketSavingConnection(guid, addr, false); |
153 PacketSavingConnection* server_conn = | 142 PacketSavingConnection* server_conn = |
154 new PacketSavingConnection(guid, addr, false); | 143 new PacketSavingConnection(guid, addr, false); |
155 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1000000)); | 144 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); |
156 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1000000)); | 145 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(100000)); |
157 | 146 |
158 scoped_ptr<TestSession> client_session(new TestSession(client_conn, true)); | 147 scoped_ptr<TestSession> client_session(new TestSession(client_conn, true)); |
159 scoped_ptr<TestSession> server_session(new TestSession(server_conn, true)); | 148 scoped_ptr<TestSession> server_session(new TestSession(server_conn, true)); |
160 | 149 |
161 QuicConfig client_config; | 150 QuicConfig client_config; |
162 QuicCryptoClientConfig client_crypto_config; | 151 QuicCryptoClientConfig client_crypto_config; |
163 | 152 |
164 client_config.SetDefaults(); | 153 client_config.SetDefaults(); |
165 client_crypto_config.SetDefaults(); | 154 client_crypto_config.SetDefaults(); |
166 | 155 |
167 scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream( | 156 scoped_ptr<QuicCryptoClientStream> client(new QuicCryptoClientStream( |
168 "test.example.com", client_config, client_session.get(), | 157 "test.example.com", client_config, client_session.get(), |
169 &client_crypto_config)); | 158 &client_crypto_config)); |
| 159 client_session->SetCryptoStream(client.get()); |
170 | 160 |
171 // Do a first handshake in order to prime the client config with the server's | 161 // Do a first handshake in order to prime the client config with the server's |
172 // information. | 162 // information. |
173 CHECK(client->CryptoConnect()); | 163 CHECK(client->CryptoConnect()); |
174 CHECK_EQ(1u, client_conn->packets_.size()); | 164 CHECK_EQ(1u, client_conn->packets_.size()); |
175 | 165 |
176 scoped_ptr<QuicCryptoServerStream> server( | 166 scoped_ptr<QuicCryptoServerStream> server( |
177 new QuicCryptoServerStream(config_, crypto_config_, | 167 new QuicCryptoServerStream(config_, crypto_config_, |
178 server_session.get())); | 168 server_session.get())); |
| 169 server_session->SetCryptoStream(server.get()); |
179 | 170 |
180 CryptoTestUtils::CommunicateHandshakeMessages( | 171 CryptoTestUtils::CommunicateHandshakeMessages( |
181 client_conn, client.get(), server_conn, server.get()); | 172 client_conn, client.get(), server_conn, server.get()); |
182 EXPECT_EQ(2, client->num_sent_client_hellos()); | 173 EXPECT_EQ(2, client->num_sent_client_hellos()); |
183 | 174 |
184 // Now do another handshake, hopefully in 0-RTT. | 175 // Now do another handshake, hopefully in 0-RTT. |
185 LOG(INFO) << "Resetting for 0-RTT handshake attempt"; | 176 LOG(INFO) << "Resetting for 0-RTT handshake attempt"; |
186 | 177 |
187 client_conn = new PacketSavingConnection(guid, addr, false); | 178 client_conn = new PacketSavingConnection(guid, addr, false); |
188 server_conn = new PacketSavingConnection(guid, addr, false); | 179 server_conn = new PacketSavingConnection(guid, addr, false); |
189 // We need to advance time past the strike-server window so that it's | 180 // We need to advance time past the strike-server window so that it's |
190 // authoritative in this time span. | 181 // authoritative in this time span. |
191 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1002000)); | 182 client_conn->AdvanceTime(QuicTime::Delta::FromSeconds(102000)); |
192 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(1002000)); | 183 server_conn->AdvanceTime(QuicTime::Delta::FromSeconds(102000)); |
193 | 184 |
194 // This causes the client's nonce to be different and thus stops the | 185 // This causes the client's nonce to be different and thus stops the |
195 // strike-register from rejecting the repeated nonce. | 186 // strike-register from rejecting the repeated nonce. |
196 client_conn->random_generator()->Reseed(NULL, 0); | 187 client_conn->random_generator()->Reseed(NULL, 0); |
197 client_session.reset(new TestSession(client_conn, true)); | 188 client_session.reset(new TestSession(client_conn, true)); |
198 server_session.reset(new TestSession(server_conn, true)); | 189 server_session.reset(new TestSession(server_conn, true)); |
199 client.reset(new QuicCryptoClientStream( | 190 client.reset(new QuicCryptoClientStream( |
200 "test.example.com", client_config, client_session.get(), | 191 "test.example.com", client_config, client_session.get(), |
201 &client_crypto_config)); | 192 &client_crypto_config)); |
| 193 client_session->SetCryptoStream(client.get()); |
| 194 |
202 server.reset(new QuicCryptoServerStream(config_, crypto_config_, | 195 server.reset(new QuicCryptoServerStream(config_, crypto_config_, |
203 server_session.get())); | 196 server_session.get())); |
| 197 server_session->SetCryptoStream(server.get()); |
204 | 198 |
205 CHECK(client->CryptoConnect()); | 199 CHECK(client->CryptoConnect()); |
206 | 200 |
207 CryptoTestUtils::CommunicateHandshakeMessages( | 201 CryptoTestUtils::CommunicateHandshakeMessages( |
208 client_conn, client.get(), server_conn, server.get()); | 202 client_conn, client.get(), server_conn, server.get()); |
209 EXPECT_EQ(1, client->num_sent_client_hellos()); | 203 EXPECT_EQ(1, client->num_sent_client_hellos()); |
210 } | 204 } |
211 | 205 |
212 TEST_F(QuicCryptoServerStreamTest, MessageAfterHandshake) { | 206 TEST_F(QuicCryptoServerStreamTest, MessageAfterHandshake) { |
213 if (!Aes128GcmEncrypter::IsSupported()) { | 207 if (!Aes128GcmEncrypter::IsSupported()) { |
(...skipping 18 matching lines...) Expand all Loading... |
232 message_.set_tag(kSHLO); | 226 message_.set_tag(kSHLO); |
233 ConstructHandshakeMessage(); | 227 ConstructHandshakeMessage(); |
234 EXPECT_CALL(*connection_, SendConnectionClose( | 228 EXPECT_CALL(*connection_, SendConnectionClose( |
235 QUIC_INVALID_CRYPTO_MESSAGE_TYPE)); | 229 QUIC_INVALID_CRYPTO_MESSAGE_TYPE)); |
236 stream_.ProcessData(message_data_->data(), message_data_->length()); | 230 stream_.ProcessData(message_data_->data(), message_data_->length()); |
237 } | 231 } |
238 | 232 |
239 } // namespace | 233 } // namespace |
240 } // namespace test | 234 } // namespace test |
241 } // namespace net | 235 } // namespace net |
OLD | NEW |