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_dispatcher.h" | 5 #include "net/tools/quic/quic_dispatcher.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "base/strings/string_piece.h" | 9 #include "base/strings/string_piece.h" |
10 #include "net/quic/crypto/crypto_handshake.h" | 10 #include "net/quic/crypto/crypto_handshake.h" |
(...skipping 251 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
262 .WillOnce(Invoke( | 262 .WillOnce(Invoke( |
263 reinterpret_cast<MockConnection*>(session1_->connection()), | 263 reinterpret_cast<MockConnection*>(session1_->connection()), |
264 &MockConnection::ReallyProcessUdpPacket)); | 264 &MockConnection::ReallyProcessUdpPacket)); |
265 dispatcher_.ProcessPacket(IPEndPoint(), client_address, *encrypted); | 265 dispatcher_.ProcessPacket(IPEndPoint(), client_address, *encrypted); |
266 EXPECT_TRUE(time_wait_list_manager_->IsConnectionIdInTimeWait(connection_id)); | 266 EXPECT_TRUE(time_wait_list_manager_->IsConnectionIdInTimeWait(connection_id)); |
267 | 267 |
268 // Dispatcher forwards subsequent packets for this connection_id to the time | 268 // Dispatcher forwards subsequent packets for this connection_id to the time |
269 // wait list manager. | 269 // wait list manager. |
270 EXPECT_CALL(*time_wait_list_manager_, | 270 EXPECT_CALL(*time_wait_list_manager_, |
271 ProcessPacket(_, _, connection_id, _, _)).Times(1); | 271 ProcessPacket(_, _, connection_id, _, _)).Times(1); |
272 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _)) | 272 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _)) |
273 .Times(0); | 273 .Times(0); |
274 ProcessPacket(client_address, connection_id, true, "foo"); | 274 ProcessPacket(client_address, connection_id, true, "foo"); |
275 } | 275 } |
276 | 276 |
277 TEST_F(QuicDispatcherTest, NoVersionPacketToTimeWaitListManager) { | 277 TEST_F(QuicDispatcherTest, NoVersionPacketToTimeWaitListManager) { |
278 CreateTimeWaitListManager(); | 278 CreateTimeWaitListManager(); |
279 | 279 |
280 IPEndPoint client_address(net::test::Loopback4(), 1); | 280 IPEndPoint client_address(net::test::Loopback4(), 1); |
281 QuicConnectionId connection_id = 1; | 281 QuicConnectionId connection_id = 1; |
282 // Dispatcher forwards all packets for this connection_id to the time wait | 282 // Dispatcher forwards all packets for this connection_id to the time wait |
283 // list manager. | 283 // list manager. |
284 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); | 284 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); |
285 EXPECT_CALL(*time_wait_list_manager_, | 285 EXPECT_CALL(*time_wait_list_manager_, |
286 ProcessPacket(_, _, connection_id, _, _)).Times(1); | 286 ProcessPacket(_, _, connection_id, _, _)).Times(1); |
287 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _)) | 287 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _)) |
288 .Times(1); | 288 .Times(1); |
289 ProcessPacket(client_address, connection_id, false, "data"); | 289 ProcessPacket(client_address, connection_id, false, "data"); |
290 } | 290 } |
291 | 291 |
292 TEST_F(QuicDispatcherTest, ProcessPacketWithZeroPort) { | 292 TEST_F(QuicDispatcherTest, ProcessPacketWithZeroPort) { |
293 CreateTimeWaitListManager(); | 293 CreateTimeWaitListManager(); |
294 | 294 |
295 IPEndPoint client_address(net::test::Loopback4(), 0); | 295 IPEndPoint client_address(net::test::Loopback4(), 0); |
296 server_address_ = IPEndPoint(net::test::Any4(), 5); | 296 server_address_ = IPEndPoint(net::test::Any4(), 5); |
297 | 297 |
298 // dispatcher_ should drop this packet. | 298 // dispatcher_ should drop this packet. |
299 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address)).Times(0); | 299 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address)).Times(0); |
300 EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, _, _, _)).Times(0); | 300 EXPECT_CALL(*time_wait_list_manager_, ProcessPacket(_, _, _, _, _)).Times(0); |
301 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _)) | 301 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _)) |
302 .Times(0); | 302 .Times(0); |
303 ProcessPacket(client_address, 1, true, "foo"); | 303 ProcessPacket(client_address, 1, true, "foo"); |
304 } | 304 } |
305 | 305 |
306 TEST_F(QuicDispatcherTest, OKSeqNoPacketProcessed) { | 306 TEST_F(QuicDispatcherTest, OKSeqNoPacketProcessed) { |
307 IPEndPoint client_address(net::test::Loopback4(), 1); | 307 IPEndPoint client_address(net::test::Loopback4(), 1); |
308 QuicConnectionId connection_id = 1; | 308 QuicConnectionId connection_id = 1; |
309 server_address_ = IPEndPoint(net::test::Any4(), 5); | 309 server_address_ = IPEndPoint(net::test::Any4(), 5); |
310 | 310 |
311 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address)) | 311 EXPECT_CALL(dispatcher_, CreateQuicSession(1, _, client_address)) |
(...skipping 11 matching lines...) Expand all Loading... |
323 TEST_F(QuicDispatcherTest, TooBigSeqNoPacketToTimeWaitListManager) { | 323 TEST_F(QuicDispatcherTest, TooBigSeqNoPacketToTimeWaitListManager) { |
324 CreateTimeWaitListManager(); | 324 CreateTimeWaitListManager(); |
325 | 325 |
326 IPEndPoint client_address(net::test::Loopback4(), 1); | 326 IPEndPoint client_address(net::test::Loopback4(), 1); |
327 QuicConnectionId connection_id = 1; | 327 QuicConnectionId connection_id = 1; |
328 // Dispatcher forwards this packet for this connection_id to the time wait | 328 // Dispatcher forwards this packet for this connection_id to the time wait |
329 // list manager. | 329 // list manager. |
330 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); | 330 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); |
331 EXPECT_CALL(*time_wait_list_manager_, | 331 EXPECT_CALL(*time_wait_list_manager_, |
332 ProcessPacket(_, _, connection_id, _, _)).Times(1); | 332 ProcessPacket(_, _, connection_id, _, _)).Times(1); |
333 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _)) | 333 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _)) |
334 .Times(1); | 334 .Times(1); |
335 // A packet whose sequence number is one to large to be allowed to start a | 335 // A packet whose sequence number is one to large to be allowed to start a |
336 // connection. | 336 // connection. |
337 ProcessPacket(client_address, connection_id, true, "data", | 337 ProcessPacket(client_address, connection_id, true, "data", |
338 PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_SEQUENCE_NUMBER, | 338 PACKET_8BYTE_CONNECTION_ID, PACKET_6BYTE_SEQUENCE_NUMBER, |
339 QuicDispatcher::kMaxReasonableInitialSequenceNumber + 1); | 339 QuicDispatcher::kMaxReasonableInitialSequenceNumber + 1); |
340 } | 340 } |
341 | 341 |
342 // Verify the stopgap test: Packets with truncated connection IDs should be | 342 // Verify the stopgap test: Packets with truncated connection IDs should be |
343 // dropped. | 343 // dropped. |
344 class QuicDispatcherTestStrayPacketConnectionId | 344 class QuicDispatcherTestStrayPacketConnectionId |
345 : public QuicDispatcherTest, | 345 : public QuicDispatcherTest, |
346 public ::testing::WithParamInterface<QuicConnectionIdLength> {}; | 346 public ::testing::WithParamInterface<QuicConnectionIdLength> {}; |
347 | 347 |
348 // Packets with truncated connection IDs should be dropped. | 348 // Packets with truncated connection IDs should be dropped. |
349 TEST_P(QuicDispatcherTestStrayPacketConnectionId, | 349 TEST_P(QuicDispatcherTestStrayPacketConnectionId, |
350 StrayPacketTruncatedConnectionId) { | 350 StrayPacketTruncatedConnectionId) { |
351 const QuicConnectionIdLength connection_id_length = GetParam(); | 351 const QuicConnectionIdLength connection_id_length = GetParam(); |
352 | 352 |
353 CreateTimeWaitListManager(); | 353 CreateTimeWaitListManager(); |
354 | 354 |
355 IPEndPoint client_address(net::test::Loopback4(), 1); | 355 IPEndPoint client_address(net::test::Loopback4(), 1); |
356 QuicConnectionId connection_id = 1; | 356 QuicConnectionId connection_id = 1; |
357 // Dispatcher drops this packet. | 357 // Dispatcher drops this packet. |
358 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); | 358 EXPECT_CALL(dispatcher_, CreateQuicSession(_, _, _)).Times(0); |
359 EXPECT_CALL(*time_wait_list_manager_, | 359 EXPECT_CALL(*time_wait_list_manager_, |
360 ProcessPacket(_, _, connection_id, _, _)).Times(0); | 360 ProcessPacket(_, _, connection_id, _, _)).Times(0); |
361 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _)) | 361 EXPECT_CALL(*time_wait_list_manager_, AddConnectionIdToTimeWait(_, _, _, _)) |
362 .Times(0); | 362 .Times(0); |
363 ProcessPacket(client_address, connection_id, true, "data", | 363 ProcessPacket(client_address, connection_id, true, "data", |
364 connection_id_length, PACKET_6BYTE_SEQUENCE_NUMBER); | 364 connection_id_length, PACKET_6BYTE_SEQUENCE_NUMBER); |
365 } | 365 } |
366 | 366 |
367 INSTANTIATE_TEST_CASE_P(ConnectionIdLength, | 367 INSTANTIATE_TEST_CASE_P(ConnectionIdLength, |
368 QuicDispatcherTestStrayPacketConnectionId, | 368 QuicDispatcherTestStrayPacketConnectionId, |
369 ::testing::Values(PACKET_0BYTE_CONNECTION_ID, | 369 ::testing::Values(PACKET_0BYTE_CONNECTION_ID, |
370 PACKET_1BYTE_CONNECTION_ID, | 370 PACKET_1BYTE_CONNECTION_ID, |
371 PACKET_4BYTE_CONNECTION_ID)); | 371 PACKET_4BYTE_CONNECTION_ID)); |
(...skipping 189 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
561 // And we'll resume where we left off when we get another call. | 561 // And we'll resume where we left off when we get another call. |
562 EXPECT_CALL(*connection2(), OnCanWrite()); | 562 EXPECT_CALL(*connection2(), OnCanWrite()); |
563 dispatcher_.OnCanWrite(); | 563 dispatcher_.OnCanWrite(); |
564 EXPECT_FALSE(dispatcher_.HasPendingWrites()); | 564 EXPECT_FALSE(dispatcher_.HasPendingWrites()); |
565 } | 565 } |
566 | 566 |
567 } // namespace | 567 } // namespace |
568 } // namespace test | 568 } // namespace test |
569 } // namespace tools | 569 } // namespace tools |
570 } // namespace net | 570 } // namespace net |
OLD | NEW |