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_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 153 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
164 packet_count_(0), | 164 packet_count_(0), |
165 frame_count_(0), | 165 frame_count_(0), |
166 fec_count_(0), | 166 fec_count_(0), |
167 complete_packets_(0), | 167 complete_packets_(0), |
168 revived_packets_(0), | 168 revived_packets_(0), |
169 accept_packet_(true), | 169 accept_packet_(true), |
170 accept_public_header_(true) { | 170 accept_public_header_(true) { |
171 } | 171 } |
172 | 172 |
173 ~TestQuicVisitor() override { | 173 ~TestQuicVisitor() override { |
174 STLDeleteElements(&stream_frames_); | 174 stream_frames_.clear(); |
175 STLDeleteElements(&ack_frames_); | 175 STLDeleteElements(&ack_frames_); |
176 STLDeleteElements(&stop_waiting_frames_); | 176 STLDeleteElements(&stop_waiting_frames_); |
177 STLDeleteElements(&ping_frames_); | 177 STLDeleteElements(&ping_frames_); |
178 STLDeleteElements(&fec_data_); | 178 STLDeleteElements(&fec_data_); |
| 179 STLDeleteElements(&stream_data_); |
179 } | 180 } |
180 | 181 |
181 void OnError(QuicFramer* f) override { | 182 void OnError(QuicFramer* f) override { |
182 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) | 183 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) |
183 << " (" << f->error() << ")"; | 184 << " (" << f->error() << ")"; |
184 ++error_count_; | 185 ++error_count_; |
185 } | 186 } |
186 | 187 |
187 void OnPacket() override {} | 188 void OnPacket() override {} |
188 | 189 |
(...skipping 27 matching lines...) Expand all Loading... |
216 void OnDecryptedPacket(EncryptionLevel level) override {} | 217 void OnDecryptedPacket(EncryptionLevel level) override {} |
217 | 218 |
218 bool OnPacketHeader(const QuicPacketHeader& header) override { | 219 bool OnPacketHeader(const QuicPacketHeader& header) override { |
219 ++packet_count_; | 220 ++packet_count_; |
220 header_.reset(new QuicPacketHeader(header)); | 221 header_.reset(new QuicPacketHeader(header)); |
221 return accept_packet_; | 222 return accept_packet_; |
222 } | 223 } |
223 | 224 |
224 bool OnStreamFrame(const QuicStreamFrame& frame) override { | 225 bool OnStreamFrame(const QuicStreamFrame& frame) override { |
225 ++frame_count_; | 226 ++frame_count_; |
226 stream_frames_.push_back(new QuicStreamFrame(frame)); | 227 // Save a copy of the data so it is valid after the packet is processed. |
| 228 stream_data_.push_back(frame.GetDataAsString()); |
| 229 QuicStreamFrame stream_frame(frame); |
| 230 // Make sure that the stream frame points to this data. |
| 231 stream_frame.data.Clear(); |
| 232 stream_frame.data.Append(const_cast<char*>(stream_data_.back()->data()), |
| 233 stream_data_.back()->size()); |
| 234 stream_frames_.push_back(stream_frame); |
227 return true; | 235 return true; |
228 } | 236 } |
229 | 237 |
230 void OnFecProtectedPayload(StringPiece payload) override { | 238 void OnFecProtectedPayload(StringPiece payload) override { |
231 fec_protected_payload_ = payload.as_string(); | 239 fec_protected_payload_ = payload.as_string(); |
232 } | 240 } |
233 | 241 |
234 bool OnAckFrame(const QuicAckFrame& frame) override { | 242 bool OnAckFrame(const QuicAckFrame& frame) override { |
235 ++frame_count_; | 243 ++frame_count_; |
236 ack_frames_.push_back(new QuicAckFrame(frame)); | 244 ack_frames_.push_back(new QuicAckFrame(frame)); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
289 int fec_count_; | 297 int fec_count_; |
290 int complete_packets_; | 298 int complete_packets_; |
291 int revived_packets_; | 299 int revived_packets_; |
292 bool accept_packet_; | 300 bool accept_packet_; |
293 bool accept_public_header_; | 301 bool accept_public_header_; |
294 | 302 |
295 scoped_ptr<QuicPacketHeader> header_; | 303 scoped_ptr<QuicPacketHeader> header_; |
296 scoped_ptr<QuicPacketPublicHeader> public_header_; | 304 scoped_ptr<QuicPacketPublicHeader> public_header_; |
297 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; | 305 scoped_ptr<QuicPublicResetPacket> public_reset_packet_; |
298 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; | 306 scoped_ptr<QuicVersionNegotiationPacket> version_negotiation_packet_; |
299 vector<QuicStreamFrame*> stream_frames_; | 307 vector<QuicStreamFrame> stream_frames_; |
300 vector<QuicAckFrame*> ack_frames_; | 308 vector<QuicAckFrame*> ack_frames_; |
301 vector<QuicStopWaitingFrame*> stop_waiting_frames_; | 309 vector<QuicStopWaitingFrame*> stop_waiting_frames_; |
302 vector<QuicPingFrame*> ping_frames_; | 310 vector<QuicPingFrame*> ping_frames_; |
303 vector<QuicFecData*> fec_data_; | 311 vector<QuicFecData*> fec_data_; |
304 string fec_protected_payload_; | 312 string fec_protected_payload_; |
305 QuicRstStreamFrame rst_stream_frame_; | 313 QuicRstStreamFrame rst_stream_frame_; |
306 QuicConnectionCloseFrame connection_close_frame_; | 314 QuicConnectionCloseFrame connection_close_frame_; |
307 QuicGoAwayFrame goaway_frame_; | 315 QuicGoAwayFrame goaway_frame_; |
308 QuicWindowUpdateFrame window_update_frame_; | 316 QuicWindowUpdateFrame window_update_frame_; |
309 QuicBlockedFrame blocked_frame_; | 317 QuicBlockedFrame blocked_frame_; |
| 318 vector<string*> stream_data_; |
310 }; | 319 }; |
311 | 320 |
312 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { | 321 class QuicFramerTest : public ::testing::TestWithParam<QuicVersion> { |
313 public: | 322 public: |
314 QuicFramerTest() | 323 QuicFramerTest() |
315 : encrypter_(new test::TestEncrypter()), | 324 : encrypter_(new test::TestEncrypter()), |
316 decrypter_(new test::TestDecrypter()), | 325 decrypter_(new test::TestDecrypter()), |
317 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), | 326 start_(QuicTime::Zero().Add(QuicTime::Delta::FromMicroseconds(0x10))), |
318 framer_(QuicSupportedVersions(), start_, true) { | 327 framer_(QuicSupportedVersions(), start_, true) { |
319 version_ = GetParam(); | 328 version_ = GetParam(); |
(...skipping 79 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
399 size_t len, | 408 size_t len, |
400 string expected_error, | 409 string expected_error, |
401 QuicErrorCode error_code) { | 410 QuicErrorCode error_code) { |
402 QuicEncryptedPacket encrypted(AsChars(packet), len, false); | 411 QuicEncryptedPacket encrypted(AsChars(packet), len, false); |
403 EXPECT_FALSE(framer_.ProcessPacket(encrypted)) << "len: " << len; | 412 EXPECT_FALSE(framer_.ProcessPacket(encrypted)) << "len: " << len; |
404 EXPECT_EQ(expected_error, framer_.detailed_error()) << "len: " << len; | 413 EXPECT_EQ(expected_error, framer_.detailed_error()) << "len: " << len; |
405 EXPECT_EQ(error_code, framer_.error()) << "len: " << len; | 414 EXPECT_EQ(error_code, framer_.error()) << "len: " << len; |
406 } | 415 } |
407 | 416 |
408 // Checks if the supplied string matches data in the supplied StreamFrame. | 417 // Checks if the supplied string matches data in the supplied StreamFrame. |
409 void CheckStreamFrameData(string str, QuicStreamFrame* frame) { | 418 void CheckStreamFrameData(string str, const QuicStreamFrame& frame) { |
410 scoped_ptr<string> frame_data(frame->GetDataAsString()); | 419 scoped_ptr<string> frame_data(frame.GetDataAsString()); |
411 EXPECT_EQ(str, *frame_data); | 420 EXPECT_EQ(str, *frame_data); |
412 } | 421 } |
413 | 422 |
414 void CheckStreamFrameBoundaries(unsigned char* packet, | 423 void CheckStreamFrameBoundaries(unsigned char* packet, |
415 size_t stream_id_size, | 424 size_t stream_id_size, |
416 bool include_version) { | 425 bool include_version) { |
417 // Now test framing boundaries. | 426 // Now test framing boundaries. |
418 for (size_t i = kQuicFrameTypeSize; i < GetMinStreamFrameSize(); ++i) { | 427 for (size_t i = kQuicFrameTypeSize; i < GetMinStreamFrameSize(); ++i) { |
419 string expected_error; | 428 string expected_error; |
420 if (i < kQuicFrameTypeSize + stream_id_size) { | 429 if (i < kQuicFrameTypeSize + stream_id_size) { |
(...skipping 837 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1258 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1267 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1259 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1268 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1260 | 1269 |
1261 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1270 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1262 ASSERT_TRUE(visitor_.header_.get()); | 1271 ASSERT_TRUE(visitor_.header_.get()); |
1263 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1272 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1264 | 1273 |
1265 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1274 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1266 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1275 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1267 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1276 EXPECT_EQ(static_cast<uint64>(0x01020304), |
1268 visitor_.stream_frames_[0]->stream_id); | 1277 visitor_.stream_frames_[0].stream_id); |
1269 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1278 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1270 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1279 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1271 visitor_.stream_frames_[0]->offset); | |
1272 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1280 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1273 | 1281 |
1274 // Now test framing boundaries. | 1282 // Now test framing boundaries. |
1275 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); | 1283 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, !kIncludeVersion); |
1276 } | 1284 } |
1277 | 1285 |
1278 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { | 1286 TEST_P(QuicFramerTest, StreamFrame3ByteStreamId) { |
1279 unsigned char packet[] = { | 1287 unsigned char packet[] = { |
1280 // public flags (8 byte connection_id) | 1288 // public flags (8 byte connection_id) |
1281 0x3C, | 1289 0x3C, |
(...skipping 23 matching lines...) Expand all Loading... |
1305 | 1313 |
1306 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1314 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1307 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1315 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1308 | 1316 |
1309 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1317 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1310 ASSERT_TRUE(visitor_.header_.get()); | 1318 ASSERT_TRUE(visitor_.header_.get()); |
1311 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1319 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1312 | 1320 |
1313 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1321 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1314 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1322 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1315 EXPECT_EQ(GG_UINT64_C(0x00020304), | 1323 EXPECT_EQ(GG_UINT64_C(0x00020304), visitor_.stream_frames_[0].stream_id); |
1316 visitor_.stream_frames_[0]->stream_id); | 1324 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1317 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1325 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1318 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | |
1319 visitor_.stream_frames_[0]->offset); | |
1320 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1326 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1321 | 1327 |
1322 // Now test framing boundaries. | 1328 // Now test framing boundaries. |
1323 const size_t stream_id_size = 3; | 1329 const size_t stream_id_size = 3; |
1324 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1330 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
1325 } | 1331 } |
1326 | 1332 |
1327 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { | 1333 TEST_P(QuicFramerTest, StreamFrame2ByteStreamId) { |
1328 unsigned char packet[] = { | 1334 unsigned char packet[] = { |
1329 // public flags (8 byte connection_id) | 1335 // public flags (8 byte connection_id) |
(...skipping 25 matching lines...) Expand all Loading... |
1355 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1361 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1356 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1362 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1357 | 1363 |
1358 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1364 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1359 ASSERT_TRUE(visitor_.header_.get()); | 1365 ASSERT_TRUE(visitor_.header_.get()); |
1360 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1366 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1361 | 1367 |
1362 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1368 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1363 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1369 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1364 EXPECT_EQ(static_cast<uint64>(0x00000304), | 1370 EXPECT_EQ(static_cast<uint64>(0x00000304), |
1365 visitor_.stream_frames_[0]->stream_id); | 1371 visitor_.stream_frames_[0].stream_id); |
1366 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1372 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1367 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1373 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1368 visitor_.stream_frames_[0]->offset); | |
1369 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1374 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1370 | 1375 |
1371 // Now test framing boundaries. | 1376 // Now test framing boundaries. |
1372 const size_t stream_id_size = 2; | 1377 const size_t stream_id_size = 2; |
1373 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1378 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
1374 } | 1379 } |
1375 | 1380 |
1376 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { | 1381 TEST_P(QuicFramerTest, StreamFrame1ByteStreamId) { |
1377 unsigned char packet[] = { | 1382 unsigned char packet[] = { |
1378 // public flags (8 byte connection_id) | 1383 // public flags (8 byte connection_id) |
(...skipping 25 matching lines...) Expand all Loading... |
1404 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 1409 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
1405 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 1410 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
1406 | 1411 |
1407 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1412 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1408 ASSERT_TRUE(visitor_.header_.get()); | 1413 ASSERT_TRUE(visitor_.header_.get()); |
1409 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); | 1414 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion)); |
1410 | 1415 |
1411 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1416 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1412 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1417 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1413 EXPECT_EQ(static_cast<uint64>(0x00000004), | 1418 EXPECT_EQ(static_cast<uint64>(0x00000004), |
1414 visitor_.stream_frames_[0]->stream_id); | 1419 visitor_.stream_frames_[0].stream_id); |
1415 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1420 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1416 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1421 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1417 visitor_.stream_frames_[0]->offset); | |
1418 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1422 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1419 | 1423 |
1420 // Now test framing boundaries. | 1424 // Now test framing boundaries. |
1421 const size_t stream_id_size = 1; | 1425 const size_t stream_id_size = 1; |
1422 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); | 1426 CheckStreamFrameBoundaries(packet, stream_id_size, !kIncludeVersion); |
1423 } | 1427 } |
1424 | 1428 |
1425 TEST_P(QuicFramerTest, StreamFrameWithVersion) { | 1429 TEST_P(QuicFramerTest, StreamFrameWithVersion) { |
1426 unsigned char packet[] = { | 1430 unsigned char packet[] = { |
1427 // public flags (version, 8 byte connection_id) | 1431 // public flags (version, 8 byte connection_id) |
(...skipping 29 matching lines...) Expand all Loading... |
1457 | 1461 |
1458 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 1462 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
1459 ASSERT_TRUE(visitor_.header_.get()); | 1463 ASSERT_TRUE(visitor_.header_.get()); |
1460 EXPECT_TRUE(visitor_.header_->public_header.version_flag); | 1464 EXPECT_TRUE(visitor_.header_->public_header.version_flag); |
1461 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); | 1465 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); |
1462 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); | 1466 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion)); |
1463 | 1467 |
1464 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1468 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1465 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1469 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1466 EXPECT_EQ(static_cast<uint64>(0x01020304), | 1470 EXPECT_EQ(static_cast<uint64>(0x01020304), |
1467 visitor_.stream_frames_[0]->stream_id); | 1471 visitor_.stream_frames_[0].stream_id); |
1468 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1472 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1469 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1473 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1470 visitor_.stream_frames_[0]->offset); | |
1471 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1474 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1472 | 1475 |
1473 // Now test framing boundaries. | 1476 // Now test framing boundaries. |
1474 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); | 1477 CheckStreamFrameBoundaries(packet, kQuicMaxStreamIdSize, kIncludeVersion); |
1475 } | 1478 } |
1476 | 1479 |
1477 TEST_P(QuicFramerTest, RejectPacket) { | 1480 TEST_P(QuicFramerTest, RejectPacket) { |
1478 visitor_.accept_packet_ = false; | 1481 visitor_.accept_packet_ = false; |
1479 | 1482 |
1480 unsigned char packet[] = { | 1483 unsigned char packet[] = { |
(...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1576 EXPECT_TRUE(visitor_.header_->entropy_flag); | 1579 EXPECT_TRUE(visitor_.header_->entropy_flag); |
1577 EXPECT_EQ(1 << (header.packet_sequence_number % 8), | 1580 EXPECT_EQ(1 << (header.packet_sequence_number % 8), |
1578 visitor_.header_->entropy_hash); | 1581 visitor_.header_->entropy_hash); |
1579 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 1582 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
1580 visitor_.header_->packet_sequence_number); | 1583 visitor_.header_->packet_sequence_number); |
1581 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); | 1584 EXPECT_EQ(NOT_IN_FEC_GROUP, visitor_.header_->is_in_fec_group); |
1582 EXPECT_EQ(0x00u, visitor_.header_->fec_group); | 1585 EXPECT_EQ(0x00u, visitor_.header_->fec_group); |
1583 | 1586 |
1584 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1587 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1585 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1588 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1586 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1589 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0].stream_id); |
1587 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1590 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1588 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1591 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1589 visitor_.stream_frames_[0]->offset); | |
1590 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1592 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1591 } | 1593 } |
1592 | 1594 |
1593 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { | 1595 TEST_P(QuicFramerTest, StreamFrameInFecGroup) { |
1594 unsigned char packet[] = { | 1596 unsigned char packet[] = { |
1595 // public flags (8 byte connection_id) | 1597 // public flags (8 byte connection_id) |
1596 0x3C, | 1598 0x3C, |
1597 // connection_id | 1599 // connection_id |
1598 0x10, 0x32, 0x54, 0x76, | 1600 0x10, 0x32, 0x54, 0x76, |
1599 0x98, 0xBA, 0xDC, 0xFE, | 1601 0x98, 0xBA, 0xDC, 0xFE, |
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1632 const size_t fec_offset = | 1634 const size_t fec_offset = |
1633 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, | 1635 GetStartOfFecProtectedData(PACKET_8BYTE_CONNECTION_ID, |
1634 !kIncludeVersion, | 1636 !kIncludeVersion, |
1635 PACKET_6BYTE_SEQUENCE_NUMBER); | 1637 PACKET_6BYTE_SEQUENCE_NUMBER); |
1636 EXPECT_EQ( | 1638 EXPECT_EQ( |
1637 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), | 1639 string(AsChars(packet) + fec_offset, arraysize(packet) - fec_offset), |
1638 visitor_.fec_protected_payload_); | 1640 visitor_.fec_protected_payload_); |
1639 | 1641 |
1640 ASSERT_EQ(1u, visitor_.stream_frames_.size()); | 1642 ASSERT_EQ(1u, visitor_.stream_frames_.size()); |
1641 EXPECT_EQ(0u, visitor_.ack_frames_.size()); | 1643 EXPECT_EQ(0u, visitor_.ack_frames_.size()); |
1642 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0]->stream_id); | 1644 EXPECT_EQ(GG_UINT64_C(0x01020304), visitor_.stream_frames_[0].stream_id); |
1643 EXPECT_TRUE(visitor_.stream_frames_[0]->fin); | 1645 EXPECT_TRUE(visitor_.stream_frames_[0].fin); |
1644 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), | 1646 EXPECT_EQ(GG_UINT64_C(0xBA98FEDC32107654), visitor_.stream_frames_[0].offset); |
1645 visitor_.stream_frames_[0]->offset); | |
1646 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); | 1647 CheckStreamFrameData("hello world!", visitor_.stream_frames_[0]); |
1647 } | 1648 } |
1648 | 1649 |
1649 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { | 1650 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) { |
1650 unsigned char packet[] = { | 1651 unsigned char packet[] = { |
1651 // public flags (8 byte connection_id) | 1652 // public flags (8 byte connection_id) |
1652 0x3C, | 1653 0x3C, |
1653 // connection_id | 1654 // connection_id |
1654 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, | 1655 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, |
1655 // packet sequence number | 1656 // packet sequence number |
(...skipping 2273 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3929 // first fec protected packet offset | 3930 // first fec protected packet offset |
3930 0x01, | 3931 0x01, |
3931 | 3932 |
3932 // redundancy | 3933 // redundancy |
3933 'a', 'b', 'c', 'd', | 3934 'a', 'b', 'c', 'd', |
3934 'e', 'f', 'g', 'h', | 3935 'e', 'f', 'g', 'h', |
3935 'i', 'j', 'k', 'l', | 3936 'i', 'j', 'k', 'l', |
3936 'm', 'n', 'o', 'p', | 3937 'm', 'n', 'o', 'p', |
3937 }; | 3938 }; |
3938 | 3939 |
3939 scoped_ptr<QuicPacket> raw( | 3940 scoped_ptr<QuicPacket> raw(new QuicPacket( |
3940 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3941 AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID, |
3941 PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, | 3942 !kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER)); |
3942 PACKET_6BYTE_SEQUENCE_NUMBER)); | |
3943 scoped_ptr<QuicEncryptedPacket> encrypted( | 3943 scoped_ptr<QuicEncryptedPacket> encrypted( |
3944 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3944 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
3945 | 3945 |
3946 ASSERT_TRUE(encrypted.get() != nullptr); | 3946 ASSERT_TRUE(encrypted.get() != nullptr); |
3947 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3947 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
3948 } | 3948 } |
3949 | 3949 |
3950 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { | 3950 TEST_P(QuicFramerTest, EncryptPacketWithVersionFlag) { |
3951 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); | 3951 QuicPacketSequenceNumber sequence_number = GG_UINT64_C(0x123456789ABC); |
3952 unsigned char packet[] = { | 3952 unsigned char packet[] = { |
(...skipping 12 matching lines...) Expand all Loading... |
3965 // first fec protected packet offset | 3965 // first fec protected packet offset |
3966 0x01, | 3966 0x01, |
3967 | 3967 |
3968 // redundancy | 3968 // redundancy |
3969 'a', 'b', 'c', 'd', | 3969 'a', 'b', 'c', 'd', |
3970 'e', 'f', 'g', 'h', | 3970 'e', 'f', 'g', 'h', |
3971 'i', 'j', 'k', 'l', | 3971 'i', 'j', 'k', 'l', |
3972 'm', 'n', 'o', 'p', | 3972 'm', 'n', 'o', 'p', |
3973 }; | 3973 }; |
3974 | 3974 |
3975 scoped_ptr<QuicPacket> raw( | 3975 scoped_ptr<QuicPacket> raw(new QuicPacket( |
3976 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3976 AsChars(packet), arraysize(packet), false, PACKET_8BYTE_CONNECTION_ID, |
3977 PACKET_8BYTE_CONNECTION_ID, kIncludeVersion, | 3977 kIncludeVersion, PACKET_6BYTE_SEQUENCE_NUMBER)); |
3978 PACKET_6BYTE_SEQUENCE_NUMBER)); | |
3979 scoped_ptr<QuicEncryptedPacket> encrypted( | 3978 scoped_ptr<QuicEncryptedPacket> encrypted( |
3980 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3979 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
3981 | 3980 |
3982 ASSERT_TRUE(encrypted.get() != nullptr); | 3981 ASSERT_TRUE(encrypted.get() != nullptr); |
3983 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3982 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
3984 } | 3983 } |
3985 | 3984 |
3986 TEST_P(QuicFramerTest, AckTruncationLargePacket) { | 3985 TEST_P(QuicFramerTest, AckTruncationLargePacket) { |
3987 QuicPacketHeader header; | 3986 QuicPacketHeader header; |
3988 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); | 3987 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); |
(...skipping 248 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4237 EXPECT_CALL(visitor, OnPacketComplete()); | 4236 EXPECT_CALL(visitor, OnPacketComplete()); |
4238 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 4237 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
4239 | 4238 |
4240 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4239 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
4241 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4240 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
4242 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4241 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
4243 } | 4242 } |
4244 | 4243 |
4245 } // namespace test | 4244 } // namespace test |
4246 } // namespace net | 4245 } // namespace net |
OLD | NEW |