| 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 |