Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(1008)

Side by Side Diff: net/quic/quic_framer_test.cc

Issue 12806002: Land Recent QUIC Changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: minor comment fix Created 7 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_http_stream_test.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 <algorithm> 5 #include <algorithm>
6 #include <map> 6 #include <map>
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/hash_tables.h" 10 #include "base/hash_tables.h"
11 #include "base/logging.h" 11 #include "base/logging.h"
12 #include "base/memory/scoped_ptr.h" 12 #include "base/memory/scoped_ptr.h"
13 #include "base/port.h" 13 #include "base/port.h"
14 #include "base/stl_util.h" 14 #include "base/stl_util.h"
15 #include "net/quic/crypto/quic_decrypter.h" 15 #include "net/quic/crypto/quic_decrypter.h"
16 #include "net/quic/crypto/quic_encrypter.h" 16 #include "net/quic/crypto/quic_encrypter.h"
17 #include "net/quic/quic_framer.h" 17 #include "net/quic/quic_framer.h"
18 #include "net/quic/quic_protocol.h" 18 #include "net/quic/quic_protocol.h"
19 #include "net/quic/quic_utils.h" 19 #include "net/quic/quic_utils.h"
20 #include "net/quic/test_tools/quic_framer_peer.h"
20 #include "net/quic/test_tools/quic_test_utils.h" 21 #include "net/quic/test_tools/quic_test_utils.h"
21 22
22 using base::hash_set; 23 using base::hash_set;
23 using base::StringPiece; 24 using base::StringPiece;
24 using std::make_pair; 25 using std::make_pair;
25 using std::map; 26 using std::map;
26 using std::numeric_limits; 27 using std::numeric_limits;
27 using std::string; 28 using std::string;
28 using std::vector; 29 using std::vector;
29 30
(...skipping 27 matching lines...) Expand all
57 } 58 }
58 59
59 // Index into the nonce proof of the public reset packet. 60 // Index into the nonce proof of the public reset packet.
60 const size_t kPublicResetPacketNonceProofOffset = 61 const size_t kPublicResetPacketNonceProofOffset =
61 kPublicFlagsOffset + 62 kPublicFlagsOffset +
62 kPublicFlagsSize; 63 kPublicFlagsSize;
63 // Index into the rejected sequence number of the public reset packet. 64 // Index into the rejected sequence number of the public reset packet.
64 const size_t kPublicResetPacketRejectedSequenceNumberOffset = 65 const size_t kPublicResetPacketRejectedSequenceNumberOffset =
65 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize; 66 kPublicResetPacketNonceProofOffset + kPublicResetNonceSize;
66 67
67 class QuicFramerPeer {
68 public:
69 static QuicPacketSequenceNumber CalculatePacketSequenceNumberFromWire(
70 QuicFramer* framer,
71 QuicPacketSequenceNumber packet_sequence_number) {
72 return framer->CalculatePacketSequenceNumberFromWire(
73 packet_sequence_number);
74 }
75 static void SetLastSequenceNumber(
76 QuicFramer* framer,
77 QuicPacketSequenceNumber packet_sequence_number) {
78 framer->last_sequence_number_ = packet_sequence_number;
79 }
80 };
81
82 class TestEncrypter : public QuicEncrypter { 68 class TestEncrypter : public QuicEncrypter {
83 public: 69 public:
84 virtual ~TestEncrypter() {} 70 virtual ~TestEncrypter() {}
85 virtual bool SetKey(StringPiece key) OVERRIDE { 71 virtual bool SetKey(StringPiece key) OVERRIDE {
86 return true; 72 return true;
87 } 73 }
88 virtual bool SetNoncePrefix(StringPiece nonce_prefix) OVERRIDE { 74 virtual bool SetNoncePrefix(StringPiece nonce_prefix) OVERRIDE {
89 return true; 75 return true;
90 } 76 }
91 virtual QuicData* Encrypt(QuicPacketSequenceNumber sequence_number, 77 virtual QuicData* Encrypt(QuicPacketSequenceNumber sequence_number,
92 StringPiece associated_data, 78 StringPiece associated_data,
93 StringPiece plaintext) OVERRIDE { 79 StringPiece plaintext) OVERRIDE {
94 sequence_number_ = sequence_number; 80 sequence_number_ = sequence_number;
95 associated_data_ = associated_data.as_string(); 81 associated_data_ = associated_data.as_string();
96 plaintext_ = plaintext.as_string(); 82 plaintext_ = plaintext.as_string();
97 return new QuicData(plaintext.data(), plaintext.length()); 83 return new QuicData(plaintext.data(), plaintext.length());
98 } 84 }
99 virtual size_t GetKeySize() const OVERRIDE { 85 virtual size_t GetKeySize() const OVERRIDE {
100 return 0; 86 return 0;
101 } 87 }
102 virtual size_t GetNoncePrefixSize() const OVERRIDE { 88 virtual size_t GetNoncePrefixSize() const OVERRIDE {
103 return 0; 89 return 0;
104 } 90 }
105 virtual size_t GetMaxPlaintextSize(size_t ciphertext_size) const OVERRIDE { 91 virtual size_t GetMaxPlaintextSize(size_t ciphertext_size) const OVERRIDE {
106 return ciphertext_size; 92 return ciphertext_size;
107 } 93 }
108 virtual size_t GetCiphertextSize(size_t plaintext_size) const OVERRIDE { 94 virtual size_t GetCiphertextSize(size_t plaintext_size) const OVERRIDE {
109 return plaintext_size; 95 return plaintext_size;
110 } 96 }
97 virtual StringPiece GetKey() const {
98 return StringPiece();
99 }
100 virtual StringPiece GetNoncePrefix() const {
101 return StringPiece();
102 }
111 QuicPacketSequenceNumber sequence_number_; 103 QuicPacketSequenceNumber sequence_number_;
112 string associated_data_; 104 string associated_data_;
113 string plaintext_; 105 string plaintext_;
114 }; 106 };
115 107
116 class TestDecrypter : public QuicDecrypter { 108 class TestDecrypter : public QuicDecrypter {
117 public: 109 public:
118 virtual ~TestDecrypter() {} 110 virtual ~TestDecrypter() {}
119 virtual bool SetKey(StringPiece key) OVERRIDE { 111 virtual bool SetKey(StringPiece key) OVERRIDE {
120 return true; 112 return true;
121 } 113 }
122 virtual bool SetNoncePrefix(StringPiece nonce_prefix) OVERRIDE { 114 virtual bool SetNoncePrefix(StringPiece nonce_prefix) OVERRIDE {
123 return true; 115 return true;
124 } 116 }
125 virtual QuicData* Decrypt(QuicPacketSequenceNumber sequence_number, 117 virtual QuicData* Decrypt(QuicPacketSequenceNumber sequence_number,
126 StringPiece associated_data, 118 StringPiece associated_data,
127 StringPiece ciphertext) OVERRIDE { 119 StringPiece ciphertext) OVERRIDE {
128 sequence_number_ = sequence_number; 120 sequence_number_ = sequence_number;
129 associated_data_ = associated_data.as_string(); 121 associated_data_ = associated_data.as_string();
130 ciphertext_ = ciphertext.as_string(); 122 ciphertext_ = ciphertext.as_string();
131 return new QuicData(ciphertext.data(), ciphertext.length()); 123 return new QuicData(ciphertext.data(), ciphertext.length());
132 } 124 }
125 virtual StringPiece GetKey() const {
126 return StringPiece();
127 }
128 virtual StringPiece GetNoncePrefix() const {
129 return StringPiece();
130 }
133 QuicPacketSequenceNumber sequence_number_; 131 QuicPacketSequenceNumber sequence_number_;
134 string associated_data_; 132 string associated_data_;
135 string ciphertext_; 133 string ciphertext_;
136 }; 134 };
137 135
138 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { 136 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
139 public: 137 public:
140 TestQuicVisitor() 138 TestQuicVisitor()
141 : error_count_(0), 139 : error_count_(0),
142 packet_count_(0), 140 packet_count_(0),
(...skipping 17 matching lines...) Expand all
160 error_count_++; 158 error_count_++;
161 } 159 }
162 160
163 virtual void OnPacket() OVERRIDE {} 161 virtual void OnPacket() OVERRIDE {}
164 162
165 virtual void OnPublicResetPacket( 163 virtual void OnPublicResetPacket(
166 const QuicPublicResetPacket& packet) OVERRIDE { 164 const QuicPublicResetPacket& packet) OVERRIDE {
167 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); 165 public_reset_packet_.reset(new QuicPublicResetPacket(packet));
168 } 166 }
169 167
168 virtual void OnVersionNegotiationPacket(
169 const QuicVersionNegotiationPacket& packet) OVERRIDE {
170 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet));
171 }
172
170 virtual void OnRevivedPacket() OVERRIDE { 173 virtual void OnRevivedPacket() OVERRIDE {
171 revived_packets_++; 174 revived_packets_++;
172 } 175 }
173 176
177 virtual bool OnProtocolVersionMismatch(
178 QuicVersionTag version) OVERRIDE {
179 DCHECK(false);
180 return true;
181 }
182
174 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { 183 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE {
175 packet_count_++; 184 packet_count_++;
176 header_.reset(new QuicPacketHeader(header)); 185 header_.reset(new QuicPacketHeader(header));
177 return accept_packet_; 186 return accept_packet_;
178 } 187 }
179 188
180 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { 189 virtual void OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE {
181 frame_count_++; 190 frame_count_++;
182 stream_frames_.push_back(new QuicStreamFrame(frame)); 191 stream_frames_.push_back(new QuicStreamFrame(frame));
183 } 192 }
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
224 int error_count_; 233 int error_count_;
225 int packet_count_; 234 int packet_count_;
226 int frame_count_; 235 int frame_count_;
227 int fec_count_; 236 int fec_count_;
228 int complete_packets_; 237 int complete_packets_;
229 int revived_packets_; 238 int revived_packets_;
230 bool accept_packet_; 239 bool accept_packet_;
231 240
232 scoped_ptr<QuicPacketHeader> header_; 241 scoped_ptr<QuicPacketHeader> header_;
233 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; 242 scoped_ptr<QuicPublicResetPacket> public_reset_packet_;
243 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_;
234 vector<QuicStreamFrame*> stream_frames_; 244 vector<QuicStreamFrame*> stream_frames_;
235 vector<QuicAckFrame*> ack_frames_; 245 vector<QuicAckFrame*> ack_frames_;
236 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_; 246 vector<QuicCongestionFeedbackFrame*> congestion_feedback_frames_;
237 vector<QuicFecData*> fec_data_; 247 vector<QuicFecData*> fec_data_;
238 string fec_protected_payload_; 248 string fec_protected_payload_;
239 QuicRstStreamFrame rst_stream_frame_; 249 QuicRstStreamFrame rst_stream_frame_;
240 QuicConnectionCloseFrame connection_close_frame_; 250 QuicConnectionCloseFrame connection_close_frame_;
241 QuicGoAwayFrame goaway_frame_; 251 QuicGoAwayFrame goaway_frame_;
242 }; 252 };
243 253
244 class QuicFramerTest : public ::testing::Test { 254 class QuicFramerTest : public ::testing::Test {
245 public: 255 public:
246 QuicFramerTest() 256 QuicFramerTest()
247 : encrypter_(new test::TestEncrypter()), 257 : encrypter_(new test::TestEncrypter()),
248 decrypter_(new test::TestDecrypter()), 258 decrypter_(new test::TestDecrypter()),
249 framer_(kQuicVersion1, decrypter_, encrypter_) { 259 framer_(kQuicVersion1, decrypter_, encrypter_, true) {
250 framer_.set_visitor(&visitor_); 260 framer_.set_visitor(&visitor_);
251 framer_.set_entropy_calculator(&entropy_calculator_); 261 framer_.set_entropy_calculator(&entropy_calculator_);
252 } 262 }
253 263
254 bool CheckEncryption(QuicPacketSequenceNumber sequence_number, 264 bool CheckEncryption(QuicPacketSequenceNumber sequence_number,
255 QuicPacket* packet) { 265 QuicPacket* packet) {
256 if (sequence_number != encrypter_->sequence_number_) { 266 if (sequence_number != encrypter_->sequence_number_) {
257 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected " 267 LOG(ERROR) << "Encrypted incorrect packet sequence number. expected "
258 << sequence_number << " actual: " 268 << sequence_number << " actual: "
259 << encrypter_->sequence_number_; 269 << encrypter_->sequence_number_;
(...skipping 288 matching lines...) Expand 10 before | Expand all | Expand 10 after
548 }; 558 };
549 559
550 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 560 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
551 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 561 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
552 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error()); 562 EXPECT_EQ(QUIC_INVALID_FRAME_DATA, framer_.error());
553 ASSERT_TRUE(visitor_.header_.get()); 563 ASSERT_TRUE(visitor_.header_.get());
554 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210), 564 EXPECT_EQ(GG_UINT64_C(0xFEDCBA9876543210),
555 visitor_.header_->public_header.guid); 565 visitor_.header_->public_header.guid);
556 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 566 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
557 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 567 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
558 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.version); 568 EXPECT_EQ(kQuicVersion1, visitor_.header_->public_header.versions[0]);
559 EXPECT_FALSE(visitor_.header_->fec_flag); 569 EXPECT_FALSE(visitor_.header_->fec_flag);
560 EXPECT_FALSE(visitor_.header_->entropy_flag); 570 EXPECT_FALSE(visitor_.header_->entropy_flag);
561 EXPECT_FALSE(visitor_.header_->fec_entropy_flag); 571 EXPECT_FALSE(visitor_.header_->fec_entropy_flag);
562 EXPECT_EQ(0, visitor_.header_->entropy_hash); 572 EXPECT_EQ(0, visitor_.header_->entropy_hash);
563 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 573 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
564 visitor_.header_->packet_sequence_number); 574 visitor_.header_->packet_sequence_number);
565 EXPECT_EQ(0x00u, visitor_.header_->fec_group); 575 EXPECT_EQ(0x00u, visitor_.header_->fec_group);
566 576
567 // Now test framing boundaries 577 // Now test framing boundaries
568 for (size_t i = 0; i < GetPacketHeaderSize(kIncludeVersion); ++i) { 578 for (size_t i = 0; i < GetPacketHeaderSize(kIncludeVersion); ++i) {
(...skipping 238 matching lines...) Expand 10 before | Expand all | Expand 10 after
807 'o', ' ', 'w', 'o', 817 'o', ' ', 'w', 'o',
808 'r', 'l', 'd', '!', 818 'r', 'l', 'd', '!',
809 }; 819 };
810 820
811 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 821 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
812 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 822 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
813 823
814 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 824 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
815 ASSERT_TRUE(visitor_.header_.get()); 825 ASSERT_TRUE(visitor_.header_.get());
816 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag); 826 EXPECT_TRUE(visitor_.header_.get()->public_header.version_flag);
817 EXPECT_EQ(kQuicVersion1, visitor_.header_.get()->public_header.version); 827 EXPECT_EQ(kQuicVersion1, visitor_.header_.get()->public_header.versions[0]);
818 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); 828 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion));
819 829
820 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 830 ASSERT_EQ(1u, visitor_.stream_frames_.size());
821 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 831 EXPECT_EQ(0u, visitor_.ack_frames_.size());
822 EXPECT_EQ(static_cast<uint64>(0x01020304), 832 EXPECT_EQ(static_cast<uint64>(0x01020304),
823 visitor_.stream_frames_[0]->stream_id); 833 visitor_.stream_frames_[0]->stream_id);
824 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 834 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
825 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 835 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
826 visitor_.stream_frames_[0]->offset); 836 visitor_.stream_frames_[0]->offset);
827 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data); 837 EXPECT_EQ("hello world!", visitor_.stream_frames_[0]->data);
(...skipping 727 matching lines...) Expand 10 before | Expand all | Expand 10 after
1555 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); 1565 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag);
1556 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); 1566 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag);
1557 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), 1567 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789),
1558 visitor_.public_reset_packet_->nonce_proof); 1568 visitor_.public_reset_packet_->nonce_proof);
1559 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), 1569 EXPECT_EQ(GG_UINT64_C(0x123456789ABC),
1560 visitor_.public_reset_packet_->rejected_sequence_number); 1570 visitor_.public_reset_packet_->rejected_sequence_number);
1561 1571
1562 // Now test framing boundaries 1572 // Now test framing boundaries
1563 for (size_t i = 0; i < GetPublicResetPacketSize(); ++i) { 1573 for (size_t i = 0; i < GetPublicResetPacketSize(); ++i) {
1564 string expected_error; 1574 string expected_error;
1575 DLOG(INFO) << "iteration: " << i;
1565 if (i < kPublicFlagsOffset) { 1576 if (i < kPublicFlagsOffset) {
1566 expected_error = "Unable to read GUID."; 1577 expected_error = "Unable to read GUID.";
1567 } else if (i < kPublicResetPacketNonceProofOffset) { 1578 } else if (i < kPublicResetPacketNonceProofOffset) {
1568 expected_error = "Unable to read public flags."; 1579 expected_error = "Unable to read public flags.";
1569 } else if (i < kPublicResetPacketRejectedSequenceNumberOffset) { 1580 } else if (i < kPublicResetPacketRejectedSequenceNumberOffset) {
1570 expected_error = "Unable to read nonce proof."; 1581 expected_error = "Unable to read nonce proof.";
1571 } else { 1582 } else {
1572 expected_error = "Unable to read rejected sequence number."; 1583 expected_error = "Unable to read rejected sequence number.";
1573 } 1584 }
1574 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER); 1585 CheckProcessingFails(packet, i, expected_error, QUIC_INVALID_PACKET_HEADER);
1575 } 1586 }
1576 } 1587 }
1577 1588
1589 TEST_F(QuicFramerTest, VersionNegotiationPacket) {
1590 unsigned char packet[] = {
1591 0x10, 0x32, 0x54, 0x76,
1592 0x98, 0xBA, 0xDC, 0xFE,
1593 // public flags (version)
1594 0x01,
1595 // version tag
1596 'Q', '1', '.', '0',
1597 'Q', '2', '.', '0',
1598 };
1599
1600 QuicFramerPeer::SetIsServer(&framer_, false);
1601
1602 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1603 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1604 ASSERT_EQ(QUIC_NO_ERROR, framer_.error());
1605 ASSERT_TRUE(visitor_.version_negotiation_packet_.get());
1606 EXPECT_EQ(2u, visitor_.version_negotiation_packet_->versions.size());
1607 EXPECT_EQ(kQuicVersion1,
1608 visitor_.version_negotiation_packet_->versions[0]);
1609
1610 for (size_t i = 0; i <= kQuicGuidSize + kPublicFlagsSize; ++i) {
1611 string expected_error;
1612 QuicErrorCode error_code = QUIC_INVALID_PACKET_HEADER;
1613 if (i < kPublicFlagsOffset) {
1614 expected_error = "Unable to read GUID.";
1615 } else if (i < kVersionOffset) {
1616 expected_error = "Unable to read public flags.";
1617 } else {
1618 expected_error = "Unable to read supported version in negotiation.";
1619 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET;
1620 }
1621 CheckProcessingFails(packet, i, expected_error, error_code);
1622 }
1623 }
1624
1578 TEST_F(QuicFramerTest, FecPacket) { 1625 TEST_F(QuicFramerTest, FecPacket) {
1579 unsigned char packet[] = { 1626 unsigned char packet[] = {
1580 // guid 1627 // guid
1581 0x10, 0x32, 0x54, 0x76, 1628 0x10, 0x32, 0x54, 0x76,
1582 0x98, 0xBA, 0xDC, 0xFE, 1629 0x98, 0xBA, 0xDC, 0xFE,
1583 // public flags 1630 // public flags
1584 0x00, 1631 0x00,
1585 // packet sequence number 1632 // packet sequence number
1586 0xBC, 0x9A, 0x78, 0x56, 1633 0xBC, 0x9A, 0x78, 0x56,
1587 0x34, 0x12, 1634 0x34, 0x12,
(...skipping 176 matching lines...) Expand 10 before | Expand all | Expand 10 after
1764 0x54, 0x76, 0x10, 0x32, 1811 0x54, 0x76, 0x10, 0x32,
1765 0xDC, 0xFE, 0x98, 0xBA, 1812 0xDC, 0xFE, 0x98, 0xBA,
1766 // data length 1813 // data length
1767 0x0c, 0x00, 1814 0x0c, 0x00,
1768 // data 1815 // data
1769 'h', 'e', 'l', 'l', 1816 'h', 'e', 'l', 'l',
1770 'o', ' ', 'w', 'o', 1817 'o', ' ', 'w', 'o',
1771 'r', 'l', 'd', '!', 1818 'r', 'l', 'd', '!',
1772 }; 1819 };
1773 1820
1821 QuicFramerPeer::SetIsServer(&framer_, false);
1774 scoped_ptr<QuicPacket> data( 1822 scoped_ptr<QuicPacket> data(
1775 framer_.ConstructFrameDataPacket(header, frames).packet); 1823 framer_.ConstructFrameDataPacket(header, frames).packet);
1776 ASSERT_TRUE(data != NULL); 1824 ASSERT_TRUE(data != NULL);
1777 1825
1778 test::CompareCharArraysWithHexError("constructed packet", 1826 test::CompareCharArraysWithHexError("constructed packet",
1779 data->data(), data->length(), 1827 data->data(), data->length(),
1780 AsChars(packet), arraysize(packet)); 1828 AsChars(packet), arraysize(packet));
1781 } 1829 }
1782 1830
1831 TEST_F(QuicFramerTest, ConstructVersionNegotiationPacket) {
1832 QuicPacketPublicHeader header;
1833 header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1834 header.reset_flag = false;
1835 header.version_flag = true;
1836
1837 unsigned char packet[] = {
1838 0x10, 0x32, 0x54, 0x76,
1839 0x98, 0xBA, 0xDC, 0xFE,
1840 // public flags (version)
1841 0x01,
1842 // version tag
1843 'Q', '1', '.', '0',
1844 'Q', '2', '.', '0',
1845 };
1846
1847 const int kQuicVersion2 = MAKE_TAG('Q', '2', '.', '0');
1848 QuicVersionTagList versions;
1849 versions.push_back(kQuicVersion1);
1850 versions.push_back(kQuicVersion2);
1851 scoped_ptr<QuicEncryptedPacket> data(
1852 framer_.ConstructVersionNegotiationPacket(header, versions));
1853
1854 test::CompareCharArraysWithHexError("constructed packet",
1855 data->data(), data->length(),
1856 AsChars(packet), arraysize(packet));
1857 }
1783 1858
1784 TEST_F(QuicFramerTest, ConstructAckFramePacket) { 1859 TEST_F(QuicFramerTest, ConstructAckFramePacket) {
1785 QuicPacketHeader header; 1860 QuicPacketHeader header;
1786 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); 1861 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210);
1787 header.public_header.reset_flag = false; 1862 header.public_header.reset_flag = false;
1788 header.public_header.version_flag = false; 1863 header.public_header.version_flag = false;
1789 header.fec_flag = false; 1864 header.fec_flag = false;
1790 header.entropy_flag = true; 1865 header.entropy_flag = true;
1791 header.fec_entropy_flag = true; 1866 header.fec_entropy_flag = true;
1792 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 1867 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
(...skipping 820 matching lines...) Expand 10 before | Expand all | Expand 10 after
2613 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2688 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2614 ASSERT_TRUE(visitor_.header_.get()); 2689 ASSERT_TRUE(visitor_.header_.get());
2615 EXPECT_TRUE(visitor_.header_->fec_flag); 2690 EXPECT_TRUE(visitor_.header_->fec_flag);
2616 EXPECT_TRUE(visitor_.header_->entropy_flag); 2691 EXPECT_TRUE(visitor_.header_->entropy_flag);
2617 EXPECT_TRUE(visitor_.header_->fec_entropy_flag); 2692 EXPECT_TRUE(visitor_.header_->fec_entropy_flag);
2618 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); 2693 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash);
2619 }; 2694 };
2620 2695
2621 } // namespace test 2696 } // namespace test
2622 } // namespace net 2697 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_http_stream_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698