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_connection.h" | 5 #include "net/quic/quic_connection.h" |
6 | 6 |
7 #include "base/basictypes.h" | 7 #include "base/basictypes.h" |
8 #include "base/bind.h" | 8 #include "base/bind.h" |
9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
10 #include "net/base/net_errors.h" | 10 #include "net/base/net_errors.h" |
(...skipping 1328 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1339 | 1339 |
1340 TEST_P(QuicConnectionTest, TooManySentPackets) { | 1340 TEST_P(QuicConnectionTest, TooManySentPackets) { |
1341 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1341 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
1342 | 1342 |
1343 for (int i = 0; i < 1100; ++i) { | 1343 for (int i = 0; i < 1100; ++i) { |
1344 SendStreamDataToPeer(1, "foo", 3 * i, !kFin, nullptr); | 1344 SendStreamDataToPeer(1, "foo", 3 * i, !kFin, nullptr); |
1345 } | 1345 } |
1346 | 1346 |
1347 // Ack packet 1, which leaves more than the limit outstanding. | 1347 // Ack packet 1, which leaves more than the limit outstanding. |
1348 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); | 1348 EXPECT_CALL(*send_algorithm_, OnCongestionEvent(true, _, _, _)); |
1349 if (FLAGS_quic_too_many_outstanding_packets) { | 1349 EXPECT_CALL(visitor_, OnConnectionClosed( |
1350 EXPECT_CALL(visitor_, | 1350 QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, false)); |
1351 OnConnectionClosed(QUIC_TOO_MANY_OUTSTANDING_SENT_PACKETS, | |
1352 false)); | |
1353 } | |
1354 // We're receive buffer limited, so the connection won't try to write more. | 1351 // We're receive buffer limited, so the connection won't try to write more. |
1355 EXPECT_CALL(visitor_, OnCanWrite()).Times(0); | 1352 EXPECT_CALL(visitor_, OnCanWrite()).Times(0); |
1356 | 1353 |
1357 // Nack every packet except the last one, leaving a huge gap. | 1354 // Nack every packet except the last one, leaving a huge gap. |
1358 QuicAckFrame frame1 = InitAckFrame(1100); | 1355 QuicAckFrame frame1 = InitAckFrame(1100); |
1359 for (QuicPacketSequenceNumber i = 1; i < 1100; ++i) { | 1356 for (QuicPacketSequenceNumber i = 1; i < 1100; ++i) { |
1360 NackPacket(i, &frame1); | 1357 NackPacket(i, &frame1); |
1361 } | 1358 } |
1362 ProcessAckPacket(&frame1); | 1359 ProcessAckPacket(&frame1); |
1363 } | 1360 } |
1364 | 1361 |
1365 TEST_P(QuicConnectionTest, TooManyReceivedPackets) { | 1362 TEST_P(QuicConnectionTest, TooManyReceivedPackets) { |
1366 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); | 1363 EXPECT_CALL(visitor_, OnSuccessfulVersionNegotiation(_)); |
1367 | 1364 EXPECT_CALL(visitor_, OnConnectionClosed( |
1368 if (FLAGS_quic_too_many_outstanding_packets) { | 1365 QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, false)); |
1369 EXPECT_CALL(visitor_, | |
1370 OnConnectionClosed(QUIC_TOO_MANY_OUTSTANDING_RECEIVED_PACKETS, | |
1371 false)); | |
1372 } | |
1373 | 1366 |
1374 // Miss every other packet for 1000 packets. | 1367 // Miss every other packet for 1000 packets. |
1375 for (QuicPacketSequenceNumber i = 1; i < 1000; ++i) { | 1368 for (QuicPacketSequenceNumber i = 1; i < 1000; ++i) { |
1376 ProcessPacket(i * 2); | 1369 ProcessPacket(i * 2); |
1377 if (!connection_.connected()) { | 1370 if (!connection_.connected()) { |
1378 break; | 1371 break; |
1379 } | 1372 } |
1380 } | 1373 } |
1381 } | 1374 } |
1382 | 1375 |
(...skipping 1153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2536 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); | 2529 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); |
2537 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 2530 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
2538 | 2531 |
2539 SendStreamDataToPeer(2, "bar", 0, !kFin, nullptr); | 2532 SendStreamDataToPeer(2, "bar", 0, !kFin, nullptr); |
2540 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); | 2533 EXPECT_CALL(*send_algorithm_, OnPacketSent(_, _, _, _, _)).Times(1); |
2541 | 2534 |
2542 connection_.RetransmitUnackedPackets(ALL_INITIAL_RETRANSMISSION); | 2535 connection_.RetransmitUnackedPackets(ALL_INITIAL_RETRANSMISSION); |
2543 } | 2536 } |
2544 | 2537 |
2545 TEST_P(QuicConnectionTest, DelayForwardSecureEncryptionUntilClientIsReady) { | 2538 TEST_P(QuicConnectionTest, DelayForwardSecureEncryptionUntilClientIsReady) { |
2546 ValueRestore<bool> old_flag(&FLAGS_enable_quic_delay_forward_security, true); | |
2547 | |
2548 // A TaggingEncrypter puts kTagSize copies of the given byte (0x02 here) at | 2539 // A TaggingEncrypter puts kTagSize copies of the given byte (0x02 here) at |
2549 // the end of the packet. We can test this to check which encrypter was used. | 2540 // the end of the packet. We can test this to check which encrypter was used. |
2550 use_tagging_decrypter(); | 2541 use_tagging_decrypter(); |
2551 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); | 2542 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); |
2552 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 2543 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
2553 SendAckPacketToPeer(); | 2544 SendAckPacketToPeer(); |
2554 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet()); | 2545 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet()); |
2555 | 2546 |
2556 // Set a forward-secure encrypter but do not make it the default, and verify | 2547 // Set a forward-secure encrypter but do not make it the default, and verify |
2557 // that it is not yet used. | 2548 // that it is not yet used. |
2558 connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, | 2549 connection_.SetEncrypter(ENCRYPTION_FORWARD_SECURE, |
2559 new TaggingEncrypter(0x03)); | 2550 new TaggingEncrypter(0x03)); |
2560 SendAckPacketToPeer(); | 2551 SendAckPacketToPeer(); |
2561 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet()); | 2552 EXPECT_EQ(0x02020202u, writer_->final_bytes_of_last_packet()); |
2562 | 2553 |
2563 // Now simulate receipt of a forward-secure packet and verify that the | 2554 // Now simulate receipt of a forward-secure packet and verify that the |
2564 // forward-secure encrypter is now used. | 2555 // forward-secure encrypter is now used. |
2565 connection_.OnDecryptedPacket(ENCRYPTION_FORWARD_SECURE); | 2556 connection_.OnDecryptedPacket(ENCRYPTION_FORWARD_SECURE); |
2566 SendAckPacketToPeer(); | 2557 SendAckPacketToPeer(); |
2567 EXPECT_EQ(0x03030303u, writer_->final_bytes_of_last_packet()); | 2558 EXPECT_EQ(0x03030303u, writer_->final_bytes_of_last_packet()); |
2568 } | 2559 } |
2569 | 2560 |
2570 TEST_P(QuicConnectionTest, DelayForwardSecureEncryptionUntilManyPacketSent) { | 2561 TEST_P(QuicConnectionTest, DelayForwardSecureEncryptionUntilManyPacketSent) { |
2571 ValueRestore<bool> old_flag(&FLAGS_enable_quic_delay_forward_security, true); | |
2572 | |
2573 // Set a congestion window of 10 packets. | 2562 // Set a congestion window of 10 packets. |
2574 QuicPacketCount congestion_window = 10; | 2563 QuicPacketCount congestion_window = 10; |
2575 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( | 2564 EXPECT_CALL(*send_algorithm_, GetCongestionWindow()).WillRepeatedly( |
2576 Return(congestion_window * kDefaultMaxPacketSize)); | 2565 Return(congestion_window * kDefaultMaxPacketSize)); |
2577 | 2566 |
2578 // A TaggingEncrypter puts kTagSize copies of the given byte (0x02 here) at | 2567 // A TaggingEncrypter puts kTagSize copies of the given byte (0x02 here) at |
2579 // the end of the packet. We can test this to check which encrypter was used. | 2568 // the end of the packet. We can test this to check which encrypter was used. |
2580 use_tagging_decrypter(); | 2569 use_tagging_decrypter(); |
2581 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); | 2570 connection_.SetEncrypter(ENCRYPTION_INITIAL, new TaggingEncrypter(0x02)); |
2582 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); | 2571 connection_.SetDefaultEncryptionLevel(ENCRYPTION_INITIAL); |
(...skipping 1672 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4255 QuicBlockedFrame blocked; | 4244 QuicBlockedFrame blocked; |
4256 blocked.stream_id = 3; | 4245 blocked.stream_id = 3; |
4257 EXPECT_CALL(visitor_, OnBlockedFrames(_)); | 4246 EXPECT_CALL(visitor_, OnBlockedFrames(_)); |
4258 ProcessFramePacket(QuicFrame(&blocked)); | 4247 ProcessFramePacket(QuicFrame(&blocked)); |
4259 EXPECT_TRUE(ack_alarm->IsSet()); | 4248 EXPECT_TRUE(ack_alarm->IsSet()); |
4260 } | 4249 } |
4261 | 4250 |
4262 } // namespace | 4251 } // namespace |
4263 } // namespace test | 4252 } // namespace test |
4264 } // namespace net | 4253 } // namespace net |
OLD | NEW |