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_packet_creator.h" | 5 #include "net/quic/quic_packet_creator.h" |
6 | 6 |
7 #include "base/stl_util.h" | 7 #include "base/stl_util.h" |
8 #include "net/quic/crypto/null_encrypter.h" | 8 #include "net/quic/crypto/null_encrypter.h" |
9 #include "net/quic/crypto/quic_decrypter.h" | 9 #include "net/quic/crypto/quic_decrypter.h" |
10 #include "net/quic/crypto/quic_encrypter.h" | 10 #include "net/quic/crypto/quic_encrypter.h" |
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
459 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 459 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
460 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 460 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
461 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 461 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
462 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 462 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
463 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 463 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
464 } | 464 } |
465 ProcessPacket(serialized.packet); | 465 ProcessPacket(serialized.packet); |
466 delete serialized.packet; | 466 delete serialized.packet; |
467 } | 467 } |
468 | 468 |
| 469 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { |
| 470 scoped_ptr<QuicStreamFrame> stream_frame( |
| 471 new QuicStreamFrame(kCryptoStreamId, /*fin=*/ false, /*offset=*/ 0, |
| 472 MakeIOVector("fake handshake message data"))); |
| 473 frames_.push_back(QuicFrame(stream_frame.get())); |
| 474 SerializedPacket serialized = |
| 475 creator_.ReserializeAllFrames(frames_, |
| 476 creator_.next_sequence_number_length()); |
| 477 |
| 478 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), |
| 479 serialized.packet->length()); |
| 480 delete serialized.packet; |
| 481 } |
| 482 |
| 483 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { |
| 484 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 485 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 486 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 487 for (int delta = -5; delta <= 0; ++delta) { |
| 488 string data(capacity + delta, 'A'); |
| 489 size_t bytes_free = 0 - delta; |
| 490 |
| 491 scoped_ptr<QuicStreamFrame> stream_frame( |
| 492 new QuicStreamFrame(kCryptoStreamId, /*fin=*/ false, kOffset, |
| 493 MakeIOVector(data))); |
| 494 frames_.push_back(QuicFrame(stream_frame.get())); |
| 495 SerializedPacket serialized = |
| 496 creator_.ReserializeAllFrames(frames_, |
| 497 creator_.next_sequence_number_length()); |
| 498 |
| 499 // If there is not enough space in the packet to fit a padding frame |
| 500 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| 501 // will not be padded. |
| 502 if (bytes_free < 3) { |
| 503 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) |
| 504 - bytes_free, serialized.packet->length()); |
| 505 } else { |
| 506 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), |
| 507 serialized.packet->length()); |
| 508 } |
| 509 |
| 510 delete serialized.packet; |
| 511 frames_.clear(); |
| 512 } |
| 513 } |
| 514 |
469 TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) { | 515 TEST_P(QuicPacketCreatorTest, SerializeConnectionClose) { |
470 QuicConnectionCloseFrame frame; | 516 QuicConnectionCloseFrame frame; |
471 frame.error_code = QUIC_NO_ERROR; | 517 frame.error_code = QUIC_NO_ERROR; |
472 frame.error_details = "error"; | 518 frame.error_details = "error"; |
473 | 519 |
474 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame); | 520 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame); |
475 ASSERT_EQ(1u, serialized.sequence_number); | 521 ASSERT_EQ(1u, serialized.sequence_number); |
476 ASSERT_EQ(1u, creator_.sequence_number()); | 522 ASSERT_EQ(1u, creator_.sequence_number()); |
477 | 523 |
478 InSequence s; | 524 InSequence s; |
(...skipping 274 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
753 client_framer_.ProcessPacket(*encrypted); | 799 client_framer_.ProcessPacket(*encrypted); |
754 } | 800 } |
755 | 801 |
756 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { | 802 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { |
757 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 803 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
758 creator_.next_sequence_number_length()); | 804 creator_.next_sequence_number_length()); |
759 | 805 |
760 size_t max_packets_per_fec_group = 10; | 806 size_t max_packets_per_fec_group = 10; |
761 creator_.set_max_packets_per_fec_group(max_packets_per_fec_group); | 807 creator_.set_max_packets_per_fec_group(max_packets_per_fec_group); |
762 creator_.set_sequence_number(64 - max_packets_per_fec_group); | 808 creator_.set_sequence_number(64 - max_packets_per_fec_group); |
763 creator_.UpdateSequenceNumberLength(2, 10000); | 809 creator_.UpdateSequenceNumberLength(2, 10000 / kDefaultMaxPacketSize); |
764 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 810 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
765 creator_.next_sequence_number_length()); | 811 creator_.next_sequence_number_length()); |
766 | 812 |
767 creator_.set_sequence_number(64 * 256 - max_packets_per_fec_group); | 813 creator_.set_sequence_number(64 * 256 - max_packets_per_fec_group); |
768 creator_.UpdateSequenceNumberLength(2, 10000); | 814 creator_.UpdateSequenceNumberLength(2, 10000 / kDefaultMaxPacketSize); |
769 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, | 815 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, |
770 creator_.next_sequence_number_length()); | 816 creator_.next_sequence_number_length()); |
771 | 817 |
772 creator_.set_sequence_number(64 * 256 * 256 - max_packets_per_fec_group); | 818 creator_.set_sequence_number(64 * 256 * 256 - max_packets_per_fec_group); |
773 creator_.UpdateSequenceNumberLength(2, 10000); | 819 creator_.UpdateSequenceNumberLength(2, 10000 / kDefaultMaxPacketSize); |
774 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, | 820 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, |
775 creator_.next_sequence_number_length()); | 821 creator_.next_sequence_number_length()); |
776 | 822 |
777 creator_.set_sequence_number( | 823 creator_.set_sequence_number( |
778 GG_UINT64_C(64) * 256 * 256 * 256 * 256 - max_packets_per_fec_group); | 824 GG_UINT64_C(64) * 256 * 256 * 256 * 256 - max_packets_per_fec_group); |
779 creator_.UpdateSequenceNumberLength(2, 10000); | 825 creator_.UpdateSequenceNumberLength(2, 10000 / kDefaultMaxPacketSize); |
780 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, | 826 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, |
781 creator_.next_sequence_number_length()); | 827 creator_.next_sequence_number_length()); |
782 } | 828 } |
783 | 829 |
784 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) { | 830 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) { |
785 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 831 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
786 creator_.next_sequence_number_length()); | 832 creator_.next_sequence_number_length()); |
787 | 833 |
788 creator_.UpdateSequenceNumberLength(1, 10000); | 834 creator_.UpdateSequenceNumberLength(1, 10000 / kDefaultMaxPacketSize); |
789 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, | 835 EXPECT_EQ(PACKET_1BYTE_SEQUENCE_NUMBER, |
790 creator_.next_sequence_number_length()); | 836 creator_.next_sequence_number_length()); |
791 | 837 |
792 creator_.UpdateSequenceNumberLength(1, 10000 * 256); | 838 creator_.UpdateSequenceNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); |
793 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, | 839 EXPECT_EQ(PACKET_2BYTE_SEQUENCE_NUMBER, |
794 creator_.next_sequence_number_length()); | 840 creator_.next_sequence_number_length()); |
795 | 841 |
796 creator_.UpdateSequenceNumberLength(1, 10000 * 256 * 256); | 842 creator_.UpdateSequenceNumberLength( |
| 843 1, 10000 * 256 * 256 / kDefaultMaxPacketSize); |
797 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, | 844 EXPECT_EQ(PACKET_4BYTE_SEQUENCE_NUMBER, |
798 creator_.next_sequence_number_length()); | 845 creator_.next_sequence_number_length()); |
799 | 846 |
800 creator_.UpdateSequenceNumberLength( | 847 creator_.UpdateSequenceNumberLength( |
801 1, GG_UINT64_C(1000) * 256 * 256 * 256 * 256); | 848 1, GG_UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); |
802 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, | 849 EXPECT_EQ(PACKET_6BYTE_SEQUENCE_NUMBER, |
803 creator_.next_sequence_number_length()); | 850 creator_.next_sequence_number_length()); |
804 } | 851 } |
805 | 852 |
806 TEST_P(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) { | 853 TEST_P(QuicPacketCreatorTest, CreateStreamFrameWithNotifier) { |
807 // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only | 854 // Ensure that if CreateStreamFrame does not consume any data (e.g. a FIN only |
808 // frame) then any QuicAckNotifier that is passed in still gets attached to | 855 // frame) then any QuicAckNotifier that is passed in still gets attached to |
809 // the frame. | 856 // the frame. |
810 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); | 857 scoped_refptr<MockAckNotifierDelegate> delegate(new MockAckNotifierDelegate); |
811 QuicAckNotifier notifier(delegate.get()); | 858 QuicAckNotifier notifier(delegate.get()); |
(...skipping 214 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1026 // After 64 calls, BoolSource will refresh the bucket - make sure it does. | 1073 // After 64 calls, BoolSource will refresh the bucket - make sure it does. |
1027 mock_random_.ChangeValue(); | 1074 mock_random_.ChangeValue(); |
1028 } | 1075 } |
1029 | 1076 |
1030 delete frames_[0].stream_frame; | 1077 delete frames_[0].stream_frame; |
1031 } | 1078 } |
1032 | 1079 |
1033 } // namespace | 1080 } // namespace |
1034 } // namespace test | 1081 } // namespace test |
1035 } // namespace net | 1082 } // namespace net |
OLD | NEW |