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 461 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
472 &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number)) | 472 &framer_, PACKET_6BYTE_SEQUENCE_NUMBER, wire_sequence_number)) |
473 << "last_sequence_number: " << last_sequence_number | 473 << "last_sequence_number: " << last_sequence_number |
474 << " wire_sequence_number: " << wire_sequence_number; | 474 << " wire_sequence_number: " << wire_sequence_number; |
475 } | 475 } |
476 | 476 |
477 QuicPacket* BuildDataPacket(const QuicPacketHeader& header, | 477 QuicPacket* BuildDataPacket(const QuicPacketHeader& header, |
478 const QuicFrames& frames) { | 478 const QuicFrames& frames) { |
479 return BuildUnsizedDataPacket(&framer_, header, frames); | 479 return BuildUnsizedDataPacket(&framer_, header, frames); |
480 } | 480 } |
481 | 481 |
| 482 QuicPacket* BuildDataPacket(const QuicPacketHeader& header, |
| 483 const QuicFrames& frames, |
| 484 size_t packet_size) { |
| 485 return BuildUnsizedDataPacket(&framer_, header, frames, packet_size); |
| 486 } |
| 487 |
482 test::TestEncrypter* encrypter_; | 488 test::TestEncrypter* encrypter_; |
483 test::TestDecrypter* decrypter_; | 489 test::TestDecrypter* decrypter_; |
484 QuicVersion version_; | 490 QuicVersion version_; |
485 QuicTime start_; | 491 QuicTime start_; |
486 QuicFramer framer_; | 492 QuicFramer framer_; |
487 test::TestQuicVisitor visitor_; | 493 test::TestQuicVisitor visitor_; |
488 test::TestEntropyCalculator entropy_calculator_; | 494 test::TestEntropyCalculator entropy_calculator_; |
489 }; | 495 }; |
490 | 496 |
491 // Run all framer tests with all supported versions of QUIC. | 497 // Run all framer tests with all supported versions of QUIC. |
(...skipping 2894 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3386 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, |
3387 | 3393 |
3388 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, |
3389 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, |
3390 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, | 3396 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, |
3391 | 3397 |
3392 // 0 revived packets. | 3398 // 0 revived packets. |
3393 0x00, | 3399 0x00, |
3394 }; | 3400 }; |
3395 | 3401 |
3396 scoped_ptr<QuicPacket> data( | 3402 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); |
3397 framer_.BuildDataPacket(header, frames, kMaxPacketSize)); | |
3398 ASSERT_TRUE(data != nullptr); | 3403 ASSERT_TRUE(data != nullptr); |
3399 | 3404 |
3400 test::CompareCharArraysWithHexError("constructed packet", | 3405 test::CompareCharArraysWithHexError("constructed packet", |
3401 data->data(), data->length(), | 3406 data->data(), data->length(), |
3402 AsChars(packet), arraysize(packet)); | 3407 AsChars(packet), arraysize(packet)); |
3403 } | 3408 } |
3404 | 3409 |
3405 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { | 3410 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { |
3406 QuicPacketHeader header; | 3411 QuicPacketHeader header; |
3407 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 Loading... |
3449 0x00, 0x00, | 3454 0x00, 0x00, |
3450 // 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). |
3451 0x06, | 3456 0x06, |
3452 // {missing packet delta, further missing packets in range} | 3457 // {missing packet delta, further missing packets in range} |
3453 // 6 nack ranges | 3458 // 6 nack ranges |
3454 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, |
3455 // 0 revived packets. | 3460 // 0 revived packets. |
3456 0x00, | 3461 0x00, |
3457 }; | 3462 }; |
3458 | 3463 |
3459 scoped_ptr<QuicPacket> data(framer_.BuildDataPacket(header, frames, 37u)); | 3464 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); |
3460 ASSERT_TRUE(data != nullptr); | 3465 ASSERT_TRUE(data != nullptr); |
3461 // 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. |
3462 EXPECT_EQ(36u, data->length()); | 3467 EXPECT_EQ(36u, data->length()); |
3463 test::CompareCharArraysWithHexError("constructed packet", | 3468 test::CompareCharArraysWithHexError("constructed packet", |
3464 data->data(), data->length(), | 3469 data->data(), data->length(), |
3465 AsChars(packet), arraysize(packet)); | 3470 AsChars(packet), arraysize(packet)); |
3466 } | 3471 } |
3467 | 3472 |
3468 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { | 3473 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { |
3469 QuicPacketHeader header; | 3474 QuicPacketHeader header; |
(...skipping 547 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4017 | 4022 |
4018 // Create a packet with just the ack. | 4023 // Create a packet with just the ack. |
4019 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4024 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
4020 QuicFrame frame; | 4025 QuicFrame frame; |
4021 frame.type = ACK_FRAME; | 4026 frame.type = ACK_FRAME; |
4022 frame.ack_frame = &ack_frame; | 4027 frame.ack_frame = &ack_frame; |
4023 QuicFrames frames; | 4028 QuicFrames frames; |
4024 frames.push_back(frame); | 4029 frames.push_back(frame); |
4025 | 4030 |
4026 // 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. |
4027 scoped_ptr<QuicPacket> raw_ack_packet( | 4032 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames)); |
4028 framer_.BuildDataPacket(header, frames, kMaxPacketSize)); | |
4029 ASSERT_TRUE(raw_ack_packet != nullptr); | 4033 ASSERT_TRUE(raw_ack_packet != nullptr); |
4030 scoped_ptr<QuicEncryptedPacket> ack_packet( | 4034 scoped_ptr<QuicEncryptedPacket> ack_packet( |
4031 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 4035 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
4032 *raw_ack_packet)); | 4036 *raw_ack_packet)); |
4033 // 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. |
4034 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 4038 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
4035 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 4039 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
4036 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4040 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
4037 EXPECT_TRUE(processed_ack_frame.is_truncated); | 4041 EXPECT_TRUE(processed_ack_frame.is_truncated); |
4038 EXPECT_EQ(510u, processed_ack_frame.largest_observed); | 4042 EXPECT_EQ(510u, processed_ack_frame.largest_observed); |
(...skipping 18 matching lines...) Expand all Loading... |
4057 | 4061 |
4058 // Create a packet with just the ack. | 4062 // Create a packet with just the ack. |
4059 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); | 4063 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(300, 0u); |
4060 QuicFrame frame; | 4064 QuicFrame frame; |
4061 frame.type = ACK_FRAME; | 4065 frame.type = ACK_FRAME; |
4062 frame.ack_frame = &ack_frame; | 4066 frame.ack_frame = &ack_frame; |
4063 QuicFrames frames; | 4067 QuicFrames frames; |
4064 frames.push_back(frame); | 4068 frames.push_back(frame); |
4065 | 4069 |
4066 // 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. |
4067 scoped_ptr<QuicPacket> raw_ack_packet( | 4071 scoped_ptr<QuicPacket> raw_ack_packet(BuildDataPacket(header, frames, 500)); |
4068 framer_.BuildDataPacket(header, frames, 500)); | |
4069 ASSERT_TRUE(raw_ack_packet != nullptr); | 4072 ASSERT_TRUE(raw_ack_packet != nullptr); |
4070 scoped_ptr<QuicEncryptedPacket> ack_packet( | 4073 scoped_ptr<QuicEncryptedPacket> ack_packet( |
4071 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, | 4074 framer_.EncryptPacket(ENCRYPTION_NONE, header.packet_sequence_number, |
4072 *raw_ack_packet)); | 4075 *raw_ack_packet)); |
4073 // 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. |
4074 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); | 4077 ASSERT_TRUE(framer_.ProcessPacket(*ack_packet)); |
4075 ASSERT_EQ(1u, visitor_.ack_frames_.size()); | 4078 ASSERT_EQ(1u, visitor_.ack_frames_.size()); |
4076 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; | 4079 QuicAckFrame& processed_ack_frame = *visitor_.ack_frames_[0]; |
4077 EXPECT_TRUE(processed_ack_frame.is_truncated); | 4080 EXPECT_TRUE(processed_ack_frame.is_truncated); |
4078 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 Loading... |
4259 EXPECT_CALL(visitor, OnPacketComplete()); | 4262 EXPECT_CALL(visitor, OnPacketComplete()); |
4260 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); | 4263 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); |
4261 | 4264 |
4262 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 4265 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
4263 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 4266 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
4264 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 4267 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
4265 } | 4268 } |
4266 | 4269 |
4267 } // namespace test | 4270 } // namespace test |
4268 } // namespace net | 4271 } // namespace net |
OLD | NEW |