| 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/test_tools/quic_test_utils.h" | 5 #include "net/quic/test_tools/quic_test_utils.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 | 8 |
| 9 #include "base/memory/ptr_util.h" | 9 #include "base/memory/ptr_util.h" |
| 10 #include "base/sha1.h" | 10 #include "base/sha1.h" |
| (...skipping 20 matching lines...) Expand all Loading... |
| 31 using testing::Invoke; | 31 using testing::Invoke; |
| 32 using testing::_; | 32 using testing::_; |
| 33 | 33 |
| 34 namespace net { | 34 namespace net { |
| 35 | 35 |
| 36 namespace test { | 36 namespace test { |
| 37 | 37 |
| 38 QuicAckFrame MakeAckFrame(QuicPacketNumber largest_observed) { | 38 QuicAckFrame MakeAckFrame(QuicPacketNumber largest_observed) { |
| 39 QuicAckFrame ack; | 39 QuicAckFrame ack; |
| 40 ack.largest_observed = largest_observed; | 40 ack.largest_observed = largest_observed; |
| 41 ack.entropy_hash = 0; | |
| 42 return ack; | |
| 43 } | |
| 44 | |
| 45 QuicAckFrame MakeAckFrameWithNackRanges(size_t num_nack_ranges, | |
| 46 QuicPacketNumber least_unacked) { | |
| 47 QuicAckFrame ack = MakeAckFrame(2 * num_nack_ranges + least_unacked); | |
| 48 // Add enough missing packets to get num_nack_ranges nack ranges. | |
| 49 for (QuicPacketNumber i = 1; i < 2 * num_nack_ranges; i += 2) { | |
| 50 ack.packets.Add(least_unacked + i); | |
| 51 } | |
| 52 return ack; | 41 return ack; |
| 53 } | 42 } |
| 54 | 43 |
| 55 QuicAckFrame MakeAckFrameWithAckBlocks(size_t num_ack_blocks, | 44 QuicAckFrame MakeAckFrameWithAckBlocks(size_t num_ack_blocks, |
| 56 QuicPacketNumber least_unacked) { | 45 QuicPacketNumber least_unacked) { |
| 57 QuicAckFrame ack = MakeAckFrame(2 * num_ack_blocks + least_unacked); | 46 QuicAckFrame ack = MakeAckFrame(2 * num_ack_blocks + least_unacked); |
| 58 ack.missing = false; | |
| 59 // Add enough received packets to get num_ack_blocks ack blocks. | 47 // Add enough received packets to get num_ack_blocks ack blocks. |
| 60 for (QuicPacketNumber i = 2; i < 2 * num_ack_blocks + 1; i += 2) { | 48 for (QuicPacketNumber i = 2; i < 2 * num_ack_blocks + 1; i += 2) { |
| 61 ack.packets.Add(least_unacked + i); | 49 ack.packets.Add(least_unacked + i); |
| 62 } | 50 } |
| 63 return ack; | 51 return ack; |
| 64 } | 52 } |
| 65 | 53 |
| 66 QuicPacket* BuildUnsizedDataPacket(QuicFramer* framer, | 54 QuicPacket* BuildUnsizedDataPacket(QuicFramer* framer, |
| 67 const QuicPacketHeader& header, | 55 const QuicPacketHeader& header, |
| 68 const QuicFrames& frames) { | 56 const QuicFrames& frames) { |
| (...skipping 569 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 638 Perspective perspective) { | 626 Perspective perspective) { |
| 639 QuicPacketHeader header; | 627 QuicPacketHeader header; |
| 640 header.public_header.connection_id = connection_id; | 628 header.public_header.connection_id = connection_id; |
| 641 header.public_header.connection_id_length = connection_id_length; | 629 header.public_header.connection_id_length = connection_id_length; |
| 642 header.public_header.version_flag = version_flag; | 630 header.public_header.version_flag = version_flag; |
| 643 header.public_header.multipath_flag = multipath_flag; | 631 header.public_header.multipath_flag = multipath_flag; |
| 644 header.public_header.reset_flag = reset_flag; | 632 header.public_header.reset_flag = reset_flag; |
| 645 header.public_header.packet_number_length = packet_number_length; | 633 header.public_header.packet_number_length = packet_number_length; |
| 646 header.path_id = path_id; | 634 header.path_id = path_id; |
| 647 header.packet_number = packet_number; | 635 header.packet_number = packet_number; |
| 648 header.entropy_flag = false; | |
| 649 header.entropy_hash = 0; | |
| 650 QuicStreamFrame stream_frame(1, false, 0, StringPiece(data)); | 636 QuicStreamFrame stream_frame(1, false, 0, StringPiece(data)); |
| 651 QuicFrame frame(&stream_frame); | 637 QuicFrame frame(&stream_frame); |
| 652 QuicFrames frames; | 638 QuicFrames frames; |
| 653 frames.push_back(frame); | 639 frames.push_back(frame); |
| 654 QuicFramer framer( | 640 QuicFramer framer( |
| 655 versions != nullptr ? *versions : CurrentSupportedVersions(), | 641 versions != nullptr ? *versions : CurrentSupportedVersions(), |
| 656 QuicTime::Zero(), perspective); | 642 QuicTime::Zero(), perspective); |
| 657 | 643 |
| 658 std::unique_ptr<QuicPacket> packet( | 644 std::unique_ptr<QuicPacket> packet( |
| 659 BuildUnsizedDataPacket(&framer, header, frames)); | 645 BuildUnsizedDataPacket(&framer, header, frames)); |
| (...skipping 28 matching lines...) Expand all Loading... |
| 688 Perspective perspective) { | 674 Perspective perspective) { |
| 689 QuicPacketHeader header; | 675 QuicPacketHeader header; |
| 690 header.public_header.connection_id = connection_id; | 676 header.public_header.connection_id = connection_id; |
| 691 header.public_header.connection_id_length = connection_id_length; | 677 header.public_header.connection_id_length = connection_id_length; |
| 692 header.public_header.version_flag = version_flag; | 678 header.public_header.version_flag = version_flag; |
| 693 header.public_header.multipath_flag = multipath_flag; | 679 header.public_header.multipath_flag = multipath_flag; |
| 694 header.public_header.reset_flag = reset_flag; | 680 header.public_header.reset_flag = reset_flag; |
| 695 header.public_header.packet_number_length = packet_number_length; | 681 header.public_header.packet_number_length = packet_number_length; |
| 696 header.path_id = path_id; | 682 header.path_id = path_id; |
| 697 header.packet_number = packet_number; | 683 header.packet_number = packet_number; |
| 698 header.entropy_flag = false; | |
| 699 header.entropy_hash = 0; | |
| 700 QuicStreamFrame stream_frame(1, false, 0, StringPiece(data)); | 684 QuicStreamFrame stream_frame(1, false, 0, StringPiece(data)); |
| 701 QuicFrame frame(&stream_frame); | 685 QuicFrame frame(&stream_frame); |
| 702 QuicFrames frames; | 686 QuicFrames frames; |
| 703 frames.push_back(frame); | 687 frames.push_back(frame); |
| 704 QuicFramer framer(versions != nullptr ? *versions : AllSupportedVersions(), | 688 QuicFramer framer(versions != nullptr ? *versions : AllSupportedVersions(), |
| 705 QuicTime::Zero(), perspective); | 689 QuicTime::Zero(), perspective); |
| 706 | 690 |
| 707 std::unique_ptr<QuicPacket> packet( | 691 std::unique_ptr<QuicPacket> packet( |
| 708 BuildUnsizedDataPacket(&framer, header, frames)); | 692 BuildUnsizedDataPacket(&framer, header, frames)); |
| 709 EXPECT_TRUE(packet != nullptr); | 693 EXPECT_TRUE(packet != nullptr); |
| 710 | 694 |
| 711 if (framer.version() <= QUIC_VERSION_33) { | 695 // Now set the frame type to 0x1F, which is an invalid frame type. |
| 712 // Now set the packet's private flags byte to 0xFF, which is an invalid | 696 reinterpret_cast<unsigned char*>( |
| 713 // value. | 697 packet->mutable_data())[GetStartOfEncryptedData( |
| 714 reinterpret_cast<unsigned char*>( | 698 framer.version(), connection_id_length, version_flag, multipath_flag, |
| 715 packet->mutable_data())[GetStartOfEncryptedData( | 699 false /* no diversification nonce */, packet_number_length)] = 0x1F; |
| 716 framer.version(), connection_id_length, version_flag, multipath_flag, | |
| 717 false /* no diversification nonce */, packet_number_length)] = 0xFF; | |
| 718 } else { | |
| 719 // Now set the frame type to 0x1F, which is an invalid frame type. | |
| 720 reinterpret_cast<unsigned char*>( | |
| 721 packet->mutable_data())[GetStartOfEncryptedData( | |
| 722 framer.version(), connection_id_length, version_flag, multipath_flag, | |
| 723 false /* no diversification nonce */, packet_number_length)] = 0x1F; | |
| 724 } | |
| 725 | 700 |
| 726 char* buffer = new char[kMaxPacketSize]; | 701 char* buffer = new char[kMaxPacketSize]; |
| 727 size_t encrypted_length = framer.EncryptPayload( | 702 size_t encrypted_length = framer.EncryptPayload( |
| 728 ENCRYPTION_NONE, path_id, packet_number, *packet, buffer, kMaxPacketSize); | 703 ENCRYPTION_NONE, path_id, packet_number, *packet, buffer, kMaxPacketSize); |
| 729 EXPECT_NE(0u, encrypted_length); | 704 EXPECT_NE(0u, encrypted_length); |
| 730 return new QuicEncryptedPacket(buffer, encrypted_length, true); | 705 return new QuicEncryptedPacket(buffer, encrypted_length, true); |
| 731 } | 706 } |
| 732 | 707 |
| 733 void CompareCharArraysWithHexError(const string& description, | 708 void CompareCharArraysWithHexError(const string& description, |
| 734 const char* actual, | 709 const char* actual, |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 781 std::unique_ptr<QuicData> data( | 756 std::unique_ptr<QuicData> data( |
| 782 crypto_framer.ConstructHandshakeMessage(message)); | 757 crypto_framer.ConstructHandshakeMessage(message)); |
| 783 QuicFramer quic_framer(AllSupportedVersions(), QuicTime::Zero(), | 758 QuicFramer quic_framer(AllSupportedVersions(), QuicTime::Zero(), |
| 784 Perspective::IS_CLIENT); | 759 Perspective::IS_CLIENT); |
| 785 | 760 |
| 786 QuicPacketHeader header; | 761 QuicPacketHeader header; |
| 787 header.public_header.connection_id = connection_id; | 762 header.public_header.connection_id = connection_id; |
| 788 header.public_header.reset_flag = false; | 763 header.public_header.reset_flag = false; |
| 789 header.public_header.version_flag = should_include_version; | 764 header.public_header.version_flag = should_include_version; |
| 790 header.packet_number = 1; | 765 header.packet_number = 1; |
| 791 header.entropy_flag = false; | |
| 792 header.entropy_hash = 0; | |
| 793 | 766 |
| 794 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, | 767 QuicStreamFrame stream_frame(kCryptoStreamId, false, 0, |
| 795 data->AsStringPiece()); | 768 data->AsStringPiece()); |
| 796 | 769 |
| 797 QuicFrame frame(&stream_frame); | 770 QuicFrame frame(&stream_frame); |
| 798 QuicFrames frames; | 771 QuicFrames frames; |
| 799 frames.push_back(frame); | 772 frames.push_back(frame); |
| 800 return BuildUnsizedDataPacket(&quic_framer, header, frames); | 773 return BuildUnsizedDataPacket(&quic_framer, header, frames); |
| 801 } | 774 } |
| 802 | 775 |
| (...skipping 26 matching lines...) Expand all Loading... |
| 829 if (stream_length < ack_length) { | 802 if (stream_length < ack_length) { |
| 830 *payload_length = 1 + ack_length - stream_length; | 803 *payload_length = 1 + ack_length - stream_length; |
| 831 } | 804 } |
| 832 | 805 |
| 833 return NullEncrypter().GetCiphertextSize(*payload_length) + | 806 return NullEncrypter().GetCiphertextSize(*payload_length) + |
| 834 QuicPacketCreator::StreamFramePacketOverhead( | 807 QuicPacketCreator::StreamFramePacketOverhead( |
| 835 version, connection_id_length, include_version, include_path_id, | 808 version, connection_id_length, include_version, include_path_id, |
| 836 include_diversification_nonce, packet_number_length, 0u); | 809 include_diversification_nonce, packet_number_length, 0u); |
| 837 } | 810 } |
| 838 | 811 |
| 839 TestEntropyCalculator::TestEntropyCalculator() {} | |
| 840 | |
| 841 TestEntropyCalculator::~TestEntropyCalculator() {} | |
| 842 | |
| 843 QuicPacketEntropyHash TestEntropyCalculator::EntropyHash( | |
| 844 QuicPacketNumber packet_number) const { | |
| 845 return 1u; | |
| 846 } | |
| 847 | |
| 848 MockEntropyCalculator::MockEntropyCalculator() {} | |
| 849 | |
| 850 MockEntropyCalculator::~MockEntropyCalculator() {} | |
| 851 | |
| 852 QuicConfig DefaultQuicConfig() { | 812 QuicConfig DefaultQuicConfig() { |
| 853 QuicConfig config; | 813 QuicConfig config; |
| 854 config.SetInitialStreamFlowControlWindowToSend( | 814 config.SetInitialStreamFlowControlWindowToSend( |
| 855 kInitialStreamFlowControlWindowForTest); | 815 kInitialStreamFlowControlWindowForTest); |
| 856 config.SetInitialSessionFlowControlWindowToSend( | 816 config.SetInitialSessionFlowControlWindowToSend( |
| 857 kInitialSessionFlowControlWindowForTest); | 817 kInitialSessionFlowControlWindowForTest); |
| 858 return config; | 818 return config; |
| 859 } | 819 } |
| 860 | 820 |
| 861 QuicConfig DefaultQuicConfigStatelessRejects() { | 821 QuicConfig DefaultQuicConfigStatelessRejects() { |
| (...skipping 80 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 942 // strike register worries that we've just overflowed a uint32_t time. | 902 // strike register worries that we've just overflowed a uint32_t time. |
| 943 (*server_connection)->AdvanceTime(connection_start_time); | 903 (*server_connection)->AdvanceTime(connection_start_time); |
| 944 } | 904 } |
| 945 | 905 |
| 946 QuicStreamId QuicClientDataStreamId(int i) { | 906 QuicStreamId QuicClientDataStreamId(int i) { |
| 947 return kClientDataStreamId1 + 2 * i; | 907 return kClientDataStreamId1 + 2 * i; |
| 948 } | 908 } |
| 949 | 909 |
| 950 } // namespace test | 910 } // namespace test |
| 951 } // namespace net | 911 } // namespace net |
| OLD | NEW |