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

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

Issue 935333002: Update from https://crrev.com/316786 (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 10 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
« 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 "net/quic/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after
106 ~TestEncrypter() override {} 106 ~TestEncrypter() override {}
107 bool SetKey(StringPiece key) override { return true; } 107 bool SetKey(StringPiece key) override { return true; }
108 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 108 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; }
109 bool Encrypt(StringPiece nonce, 109 bool Encrypt(StringPiece nonce,
110 StringPiece associated_data, 110 StringPiece associated_data,
111 StringPiece plaintext, 111 StringPiece plaintext,
112 unsigned char* output) override { 112 unsigned char* output) override {
113 CHECK(false) << "Not implemented"; 113 CHECK(false) << "Not implemented";
114 return false; 114 return false;
115 } 115 }
116 QuicData* EncryptPacket(QuicPacketSequenceNumber sequence_number, 116 bool EncryptPacket(QuicPacketSequenceNumber sequence_number,
117 StringPiece associated_data, 117 StringPiece associated_data,
118 StringPiece plaintext) override { 118 StringPiece plaintext,
119 char* output,
120 size_t* output_length,
121 size_t max_output_length) override {
119 sequence_number_ = sequence_number; 122 sequence_number_ = sequence_number;
120 associated_data_ = associated_data.as_string(); 123 associated_data_ = associated_data.as_string();
121 plaintext_ = plaintext.as_string(); 124 plaintext_ = plaintext.as_string();
122 return new QuicData(plaintext.data(), plaintext.length()); 125 memcpy(output, plaintext.data(), plaintext.length());
126 *output_length = plaintext.length();
127 return true;
123 } 128 }
124 size_t GetKeySize() const override { return 0; } 129 size_t GetKeySize() const override { return 0; }
125 size_t GetNoncePrefixSize() const override { return 0; } 130 size_t GetNoncePrefixSize() const override { return 0; }
126 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override { 131 size_t GetMaxPlaintextSize(size_t ciphertext_size) const override {
127 return ciphertext_size; 132 return ciphertext_size;
128 } 133 }
129 size_t GetCiphertextSize(size_t plaintext_size) const override { 134 size_t GetCiphertextSize(size_t plaintext_size) const override {
130 return plaintext_size; 135 return plaintext_size;
131 } 136 }
132 StringPiece GetKey() const override { return StringPiece(); } 137 StringPiece GetKey() const override { return StringPiece(); }
133 StringPiece GetNoncePrefix() const override { return StringPiece(); } 138 StringPiece GetNoncePrefix() const override { return StringPiece(); }
134 QuicPacketSequenceNumber sequence_number_; 139 QuicPacketSequenceNumber sequence_number_;
135 string associated_data_; 140 string associated_data_;
136 string plaintext_; 141 string plaintext_;
137 }; 142 };
138 143
139 class TestDecrypter : public QuicDecrypter { 144 class TestDecrypter : public QuicDecrypter {
140 public: 145 public:
141 ~TestDecrypter() override {} 146 ~TestDecrypter() override {}
142 bool SetKey(StringPiece key) override { return true; } 147 bool SetKey(StringPiece key) override { return true; }
143 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; } 148 bool SetNoncePrefix(StringPiece nonce_prefix) override { return true; }
144 QuicData* DecryptPacket(QuicPacketSequenceNumber sequence_number, 149 bool DecryptPacket(QuicPacketSequenceNumber sequence_number,
145 StringPiece associated_data, 150 const StringPiece& associated_data,
146 StringPiece ciphertext) override { 151 const StringPiece& ciphertext,
152 char* output,
153 size_t* output_length,
154 size_t max_output_length) override {
147 sequence_number_ = sequence_number; 155 sequence_number_ = sequence_number;
148 associated_data_ = associated_data.as_string(); 156 associated_data_ = associated_data.as_string();
149 ciphertext_ = ciphertext.as_string(); 157 ciphertext_ = ciphertext.as_string();
150 return new QuicData(ciphertext.data(), ciphertext.length()); 158 memcpy(output, ciphertext.data(), ciphertext.length());
159 *output_length = ciphertext.length();
160 return true;
151 } 161 }
152 StringPiece GetKey() const override { return StringPiece(); } 162 StringPiece GetKey() const override { return StringPiece(); }
153 StringPiece GetNoncePrefix() const override { return StringPiece(); } 163 StringPiece GetNoncePrefix() const override { return StringPiece(); }
154 QuicPacketSequenceNumber sequence_number_; 164 QuicPacketSequenceNumber sequence_number_;
155 string associated_data_; 165 string associated_data_;
156 string ciphertext_; 166 string ciphertext_;
157 }; 167 };
158 168
159 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface { 169 class TestQuicVisitor : public ::net::QuicFramerVisitorInterface {
160 public: 170 public:
161 TestQuicVisitor() 171 TestQuicVisitor()
162 : error_count_(0), 172 : error_count_(0),
163 version_mismatch_(0), 173 version_mismatch_(0),
164 packet_count_(0), 174 packet_count_(0),
165 frame_count_(0), 175 frame_count_(0),
166 fec_count_(0), 176 fec_count_(0),
167 complete_packets_(0), 177 complete_packets_(0),
168 revived_packets_(0), 178 revived_packets_(0),
169 accept_packet_(true), 179 accept_packet_(true),
170 accept_public_header_(true) { 180 accept_public_header_(true) {
171 } 181 }
172 182
173 ~TestQuicVisitor() override { 183 ~TestQuicVisitor() override {
174 STLDeleteElements(&stream_frames_); 184 STLDeleteElements(&stream_frames_);
175 STLDeleteElements(&ack_frames_); 185 STLDeleteElements(&ack_frames_);
176 STLDeleteElements(&stop_waiting_frames_); 186 STLDeleteElements(&stop_waiting_frames_);
177 STLDeleteElements(&ping_frames_); 187 STLDeleteElements(&ping_frames_);
178 STLDeleteElements(&fec_data_); 188 STLDeleteElements(&fec_data_);
189 STLDeleteElements(&stream_data_);
190 STLDeleteElements(&fec_data_redundancy_);
179 } 191 }
180 192
181 void OnError(QuicFramer* f) override { 193 void OnError(QuicFramer* f) override {
182 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) 194 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error())
183 << " (" << f->error() << ")"; 195 << " (" << f->error() << ")";
184 ++error_count_; 196 ++error_count_;
185 } 197 }
186 198
187 void OnPacket() override {} 199 void OnPacket() override {}
188 200
(...skipping 27 matching lines...) Expand all
216 void OnDecryptedPacket(EncryptionLevel level) override {} 228 void OnDecryptedPacket(EncryptionLevel level) override {}
217 229
218 bool OnPacketHeader(const QuicPacketHeader& header) override { 230 bool OnPacketHeader(const QuicPacketHeader& header) override {
219 ++packet_count_; 231 ++packet_count_;
220 header_.reset(new QuicPacketHeader(header)); 232 header_.reset(new QuicPacketHeader(header));
221 return accept_packet_; 233 return accept_packet_;
222 } 234 }
223 235
224 bool OnStreamFrame(const QuicStreamFrame& frame) override { 236 bool OnStreamFrame(const QuicStreamFrame& frame) override {
225 ++frame_count_; 237 ++frame_count_;
226 stream_frames_.push_back(new QuicStreamFrame(frame)); 238 // Save a copy of the data so it is valid after the packet is processed.
239 stream_data_.push_back(frame.GetDataAsString());
240 QuicStreamFrame* stream_frame = new QuicStreamFrame(frame);
241 // Make sure that the stream frame points to this data.
242 stream_frame->data.Clear();
243 stream_frame->data.Append(const_cast<char*>(stream_data_.back()->data()),
244 stream_data_.back()->size());
245 stream_frames_.push_back(stream_frame);
227 return true; 246 return true;
228 } 247 }
229 248
230 void OnFecProtectedPayload(StringPiece payload) override { 249 void OnFecProtectedPayload(StringPiece payload) override {
231 fec_protected_payload_ = payload.as_string(); 250 fec_protected_payload_ = payload.as_string();
232 } 251 }
233 252
234 bool OnAckFrame(const QuicAckFrame& frame) override { 253 bool OnAckFrame(const QuicAckFrame& frame) override {
235 ++frame_count_; 254 ++frame_count_;
236 ack_frames_.push_back(new QuicAckFrame(frame)); 255 ack_frames_.push_back(new QuicAckFrame(frame));
237 return true; 256 return true;
238 } 257 }
239 258
240 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override { 259 bool OnStopWaitingFrame(const QuicStopWaitingFrame& frame) override {
241 ++frame_count_; 260 ++frame_count_;
242 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame)); 261 stop_waiting_frames_.push_back(new QuicStopWaitingFrame(frame));
243 return true; 262 return true;
244 } 263 }
245 264
246 bool OnPingFrame(const QuicPingFrame& frame) override { 265 bool OnPingFrame(const QuicPingFrame& frame) override {
247 ++frame_count_; 266 ++frame_count_;
248 ping_frames_.push_back(new QuicPingFrame(frame)); 267 ping_frames_.push_back(new QuicPingFrame(frame));
249 return true; 268 return true;
250 } 269 }
251 270
252 void OnFecData(const QuicFecData& fec) override { 271 void OnFecData(const QuicFecData& fec) override {
253 ++fec_count_; 272 ++fec_count_;
254 fec_data_.push_back(new QuicFecData(fec)); 273 QuicFecData* fec_data = new QuicFecData();
274 fec_data->fec_group = fec.fec_group;
275 // Save a copy of the data so it is valid after the packet is processed.
276 string* redundancy = new string(fec.redundancy.as_string());
277 fec_data_redundancy_.push_back(redundancy);
278 fec_data->redundancy = StringPiece(*redundancy);
279 fec_data_.push_back(fec_data);
255 } 280 }
256 281
257 void OnPacketComplete() override { ++complete_packets_; } 282 void OnPacketComplete() override { ++complete_packets_; }
258 283
259 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override { 284 bool OnRstStreamFrame(const QuicRstStreamFrame& frame) override {
260 rst_stream_frame_ = frame; 285 rst_stream_frame_ = frame;
261 return true; 286 return true;
262 } 287 }
263 288
264 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override { 289 bool OnConnectionCloseFrame(const QuicConnectionCloseFrame& frame) override {
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
300 vector<QuicAckFrame*> ack_frames_; 325 vector<QuicAckFrame*> ack_frames_;
301 vector<QuicStopWaitingFrame*> stop_waiting_frames_; 326 vector<QuicStopWaitingFrame*> stop_waiting_frames_;
302 vector<QuicPingFrame*> ping_frames_; 327 vector<QuicPingFrame*> ping_frames_;
303 vector<QuicFecData*> fec_data_; 328 vector<QuicFecData*> fec_data_;
304 string fec_protected_payload_; 329 string fec_protected_payload_;
305 QuicRstStreamFrame rst_stream_frame_; 330 QuicRstStreamFrame rst_stream_frame_;
306 QuicConnectionCloseFrame connection_close_frame_; 331 QuicConnectionCloseFrame connection_close_frame_;
307 QuicGoAwayFrame goaway_frame_; 332 QuicGoAwayFrame goaway_frame_;
308 QuicWindowUpdateFrame window_update_frame_; 333 QuicWindowUpdateFrame window_update_frame_;
309 QuicBlockedFrame blocked_frame_; 334 QuicBlockedFrame blocked_frame_;
335 vector<string*> stream_data_;
336 vector<string*> fec_data_redundancy_;
310 }; 337 };
311 338
312 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { 339 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> {
313 public: 340 public:
314 QuicFramerTest() 341 QuicFramerTest()
315 : encrypter_(new test::TestEncrypter()), 342 : encrypter_(new test::TestEncrypter()),
316 decrypter_(new test::TestDecrypter()), 343 decrypter_(new test::TestDecrypter()),
317 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), 344 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))),
318 framer_(QuicSupportedVersions(), start_, true) { 345 framer_(QuicSupportedVersions(), start_, true) {
319 version_ = GetParam(); 346 version_ = GetParam();
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
442 QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number); 469 QuicFramerPeer::SetLastSequenceNumber(&framer_, last_sequence_number);
443 EXPECT_EQ(expected_sequence_number, 470 EXPECT_EQ(expected_sequence_number,
444 QuicFramerPeer::CalculatePacketSequenceNumberFromWire( 471 QuicFramerPeer::CalculatePacketSequenceNumberFromWire(
445 &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number)) 472 &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number))
446 << "last_sequence_number: " << last_sequence_number 473 << "last_sequence_number: " << last_sequence_number
447 << " wire_sequence_number: " << wire_sequence_number; 474 << " wire_sequence_number: " << wire_sequence_number;
448 } 475 }
449 476
450 QuicPacket* BuildDataPacket(const QuicPacketHeader& header, 477 QuicPacket* BuildDataPacket(const QuicPacketHeader& header,
451 const QuicFrames& frames) { 478 const QuicFrames& frames) {
452 return BuildUnsizedDataPacket(&framer_, header, frames).packet; 479 return BuildUnsizedDataPacket(&framer_, header, frames);
480 }
481
482 QuicPacket* BuildDataPacket(const QuicPacketHeader& header,
483 const QuicFrames& frames,
484 size_t packet_size) {
485 return BuildUnsizedDataPacket(&framer_, header, frames, packet_size);
453 } 486 }
454 487
455 test::TestEncrypter* encrypter_; 488 test::TestEncrypter* encrypter_;
456 test::TestDecrypter* decrypter_; 489 test::TestDecrypter* decrypter_;
457 QuicVersion version_; 490 QuicVersion version_;
458 QuicTime start_; 491 QuicTime start_;
459 QuicFramer framer_; 492 QuicFramer framer_;
460 test::TestQuicVisitor visitor_; 493 test::TestQuicVisitor visitor_;
461 test::TestEntropyCalculator entropy_calculator_; 494 test::TestEntropyCalculator entropy_calculator_;
462 }; 495 };
(...skipping 842 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 1338
1306 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 1339 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
1307 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 1340 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1308 1341
1309 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1342 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1310 ASSERT_TRUE(visitor_.header_.get()); 1343 ASSERT_TRUE(visitor_.header_.get());
1311 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); 1344 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
1312 1345
1313 ASSERT_EQ(1u, visitor_.stream_frames_.size()); 1346 ASSERT_EQ(1u, visitor_.stream_frames_.size());
1314 EXPECT_EQ(0u, visitor_.ack_frames_.size()); 1347 EXPECT_EQ(0u, visitor_.ack_frames_.size());
1315 EXPECT_EQ(GG_UINT64_C(0x00020304), 1348 EXPECT_EQ(GG_UINT64_C(0x00020304), visitor_.stream_frames_[0]->stream_id);
1316 visitor_.stream_frames_[0]->stream_id);
1317 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); 1349 EXPECT_TRUE(visitor_.stream_frames_[0]->fin);
1318 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), 1350 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654),
1319 visitor_.stream_frames_[0]->offset); 1351 visitor_.stream_frames_[0]->offset);
1320 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); 1352 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]);
1321 1353
1322 // Now test framing boundaries. 1354 // Now test framing boundaries.
1323 const size_t stream_id_size = 3; 1355 const size_t stream_id_size = 3;
1324 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); 1356 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion);
1325 } 1357 }
1326 1358
(...skipping 2033 matching lines...) Expand 10 before | Expand all | Expand 10 after
3360 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3392 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3361 3393
3362 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3394 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3363 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3395 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3364 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3396 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3365 3397
3366 // 0 revived packets. 3398 // 0 revived packets.
3367 0x00, 3399 0x00,
3368 }; 3400 };
3369 3401
3370 scoped_ptr<QuicPacket> data( 3402 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3371 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
3372 ASSERT_TRUE(data != nullptr); 3403 ASSERT_TRUE(data != nullptr);
3373 3404
3374 test::CompareCharArraysWithHexError("constructed packet", 3405 test::CompareCharArraysWithHexError("constructed packet",
3375 data->data(), data->length(), 3406 data->data(), data->length(),
3376 AsChars(packet), arraysize(packet)); 3407 AsChars(packet), arraysize(packet));
3377 } 3408 }
3378 3409
3379 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 3410 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
3380 QuicPacketHeader header; 3411 QuicPacketHeader header;
3381 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3412 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
3423 0x00, 0x00, 3454 0x00, 0x00,
3424 // num missing packet ranges (limited to 6 by packet size of 37). 3455 // num missing packet ranges (limited to 6 by packet size of 37).
3425 0x06, 3456 0x06,
3426 // {missing packet delta, further missing packets in range} 3457 // {missing packet delta, further missing packets in range}
3427 // 6 nack ranges 3458 // 6 nack ranges
3428 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 3459 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
3429 // 0 revived packets. 3460 // 0 revived packets.
3430 0x00, 3461 0x00,
3431 }; 3462 };
3432 3463
3433 scoped_ptr<QuicPacket> data( 3464 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u));
3434 framer_.BuildDataPacket(header, frames, 37u).packet);
3435 ASSERT_TRUE(data != nullptr); 3465 ASSERT_TRUE(data != nullptr);
3436 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. 3466 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
3437 EXPECT_EQ(36u, data->length()); 3467 EXPECT_EQ(36u, data->length());
3438 test::CompareCharArraysWithHexError("constructed packet", 3468 test::CompareCharArraysWithHexError("constructed packet",
3439 data->data(), data->length(), 3469 data->data(), data->length(),
3440 AsChars(packet), arraysize(packet)); 3470 AsChars(packet), arraysize(packet));
3441 } 3471 }
3442 3472
3443 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3473 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
3444 QuicPacketHeader header; 3474 QuicPacketHeader header;
(...skipping 452 matching lines...) Expand 10 before | Expand all | Expand 10 after
3897 // first fec protected packet offset 3927 // first fec protected packet offset
3898 0x01, 3928 0x01,
3899 3929
3900 // redundancy 3930 // redundancy
3901 'a', 'b', 'c', 'd', 3931 'a', 'b', 'c', 'd',
3902 'e', 'f', 'g', 'h', 3932 'e', 'f', 'g', 'h',
3903 'i', 'j', 'k', 'l', 3933 'i', 'j', 'k', 'l',
3904 'm', 'n', 'o', 'p', 3934 'm', 'n', 'o', 'p',
3905 }; 3935 };
3906 3936
3907 scoped_ptr<QuicPacket> data( 3937 scoped_ptr<QuicPacket> data(framer_.BuildFecPacket(header, fec_data));
3908 framer_.BuildFecPacket(header, fec_data).packet);
3909 ASSERT_TRUE(data != nullptr); 3938 ASSERT_TRUE(data != nullptr);
3910 3939
3911 test::CompareCharArraysWithHexError("constructed packet", 3940 test::CompareCharArraysWithHexError("constructed packet",
3912 data->data(), data->length(), 3941 data->data(), data->length(),
3913 AsChars(packet), arraysize(packet)); 3942 AsChars(packet), arraysize(packet));
3914 } 3943 }
3915 3944
3916 TEST_P(QuicFramerTest, EncryptPacket) { 3945 TEST_P(QuicFramerTest, EncryptPacket) {
3917 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 3946 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
3918 unsigned char packet[] = { 3947 unsigned char packet[] = {
(...skipping 10 matching lines...) Expand all
3929 // first fec protected packet offset 3958 // first fec protected packet offset
3930 0x01, 3959 0x01,
3931 3960
3932 // redundancy 3961 // redundancy
3933 'a', 'b', 'c', 'd', 3962 'a', 'b', 'c', 'd',
3934 'e', 'f', 'g', 'h', 3963 'e', 'f', 'g', 'h',
3935 'i', 'j', 'k', 'l', 3964 'i', 'j', 'k', 'l',
3936 'm', 'n', 'o', 'p', 3965 'm', 'n', 'o', 'p',
3937 }; 3966 };
3938 3967
3939 scoped_ptr<QuicPacket> raw( 3968 scoped_ptr<QuicPacket> raw(new QuicPacket(
3940 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, 3969 AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID,
3941 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 3970 !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER));
3942 PACKET_6BYTE_SEQUENCE_NUMBER));
3943 scoped_ptr<QuicEncryptedPacket> encrypted( 3971 scoped_ptr<QuicEncryptedPacket> encrypted(
3944 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 3972 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
3945 3973
3946 ASSERT_TRUE(encrypted.get() != nullptr); 3974 ASSERT_TRUE(encrypted.get() != nullptr);
3947 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 3975 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
3948 } 3976 }
3949 3977
3950 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { 3978 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) {
3951 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); 3979 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC);
3952 unsigned char packet[] = { 3980 unsigned char packet[] = {
(...skipping 12 matching lines...) Expand all
3965 // first fec protected packet offset 3993 // first fec protected packet offset
3966 0x01, 3994 0x01,
3967 3995
3968 // redundancy 3996 // redundancy
3969 'a', 'b', 'c', 'd', 3997 'a', 'b', 'c', 'd',
3970 'e', 'f', 'g', 'h', 3998 'e', 'f', 'g', 'h',
3971 'i', 'j', 'k', 'l', 3999 'i', 'j', 'k', 'l',
3972 'm', 'n', 'o', 'p', 4000 'm', 'n', 'o', 'p',
3973 }; 4001 };
3974 4002
3975 scoped_ptr<QuicPacket> raw( 4003 scoped_ptr<QuicPacket> raw(new QuicPacket(
3976 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, 4004 AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID,
3977 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, 4005 kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER));
3978 PACKET_6BYTE_SEQUENCE_NUMBER));
3979 scoped_ptr<QuicEncryptedPacket> encrypted( 4006 scoped_ptr<QuicEncryptedPacket> encrypted(
3980 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); 4007 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw));
3981 4008
3982 ASSERT_TRUE(encrypted.get() != nullptr); 4009 ASSERT_TRUE(encrypted.get() != nullptr);
3983 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); 4010 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get()));
3984 } 4011 }
3985 4012
3986 TEST_P(QuicFramerTest, AckTruncationLargePacket) { 4013 TEST_P(QuicFramerTest, AckTruncationLargePacket) {
3987 QuicPacketHeader header; 4014 QuicPacketHeader header;
3988 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 4015 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3989 header.public_header.reset_flag = false; 4016 header.public_header.reset_flag = false;
3990 header.public_header.version_flag = false; 4017 header.public_header.version_flag = false;
3991 header.fec_flag = false; 4018 header.fec_flag = false;
3992 header.entropy_flag = false; 4019 header.entropy_flag = false;
3993 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); 4020 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3994 header.fec_group = 0; 4021 header.fec_group = 0;
3995 4022
3996 // Create a packet with just the ack. 4023 // Create a packet with just the ack.
3997 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4024 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
3998 QuicFrame frame; 4025 QuicFrame frame;
3999 frame.type = ACK_FRAME; 4026 frame.type = ACK_FRAME;
4000 frame.ack_frame = &ack_frame; 4027 frame.ack_frame = &ack_frame;
4001 QuicFrames frames; 4028 QuicFrames frames;
4002 frames.push_back(frame); 4029 frames.push_back(frame);
4003 4030
4004 // Build an ack packet with truncation due to limit in number of nack ranges. 4031 // Build an ack packet with truncation due to limit in number of nack ranges.
4005 scoped_ptr<QuicPacket> raw_ack_packet( 4032 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames));
4006 framer_.BuildDataPacket(header, frames, kMaxPacketSize).packet);
4007 ASSERT_TRUE(raw_ack_packet != nullptr); 4033 ASSERT_TRUE(raw_ack_packet != nullptr);
4008 scoped_ptr<QuicEncryptedPacket> ack_packet( 4034 scoped_ptr<QuicEncryptedPacket> ack_packet(
4009 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, 4035 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
4010 *raw_ack_packet)); 4036 *raw_ack_packet));
4011 // Now make sure we can turn our ack packet back into an ack frame. 4037 // Now make sure we can turn our ack packet back into an ack frame.
4012 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); 4038 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
4013 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 4039 ASSERT_EQ(1u, visitor_.ack_frames_.size());
4014 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; 4040 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4015 EXPECT_TRUE(processed_ack_frame.is_truncated); 4041 EXPECT_TRUE(processed_ack_frame.is_truncated);
4016 EXPECT_EQ(510u, processed_ack_frame.largest_observed); 4042 EXPECT_EQ(510u, processed_ack_frame.largest_observed);
(...skipping 18 matching lines...) Expand all
4035 4061
4036 // Create a packet with just the ack. 4062 // Create a packet with just the ack.
4037 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); 4063 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u);
4038 QuicFrame frame; 4064 QuicFrame frame;
4039 frame.type = ACK_FRAME; 4065 frame.type = ACK_FRAME;
4040 frame.ack_frame = &ack_frame; 4066 frame.ack_frame = &ack_frame;
4041 QuicFrames frames; 4067 QuicFrames frames;
4042 frames.push_back(frame); 4068 frames.push_back(frame);
4043 4069
4044 // Build an ack packet with truncation due to limit in number of nack ranges. 4070 // Build an ack packet with truncation due to limit in number of nack ranges.
4045 scoped_ptr<QuicPacket> raw_ack_packet( 4071 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames, 500));
4046 framer_.BuildDataPacket(header, frames, 500).packet);
4047 ASSERT_TRUE(raw_ack_packet != nullptr); 4072 ASSERT_TRUE(raw_ack_packet != nullptr);
4048 scoped_ptr<QuicEncryptedPacket> ack_packet( 4073 scoped_ptr<QuicEncryptedPacket> ack_packet(
4049 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, 4074 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number,
4050 *raw_ack_packet)); 4075 *raw_ack_packet));
4051 // Now make sure we can turn our ack packet back into an ack frame. 4076 // Now make sure we can turn our ack packet back into an ack frame.
4052 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); 4077 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet));
4053 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 4078 ASSERT_EQ(1u, visitor_.ack_frames_.size());
4054 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; 4079 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0];
4055 EXPECT_TRUE(processed_ack_frame.is_truncated); 4080 EXPECT_TRUE(processed_ack_frame.is_truncated);
4056 EXPECT_EQ(476u, processed_ack_frame.largest_observed); 4081 EXPECT_EQ(476u, processed_ack_frame.largest_observed);
(...skipping 180 matching lines...) Expand 10 before | Expand all | Expand 10 after
4237 EXPECT_CALL(visitor, OnPacketComplete()); 4262 EXPECT_CALL(visitor, OnPacketComplete());
4238 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); 4263 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true));
4239 4264
4240 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 4265 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4241 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 4266 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 4267 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4243 } 4268 }
4244 4269
4245 } // namespace test 4270 } // namespace test
4246 } // namespace net 4271 } // 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