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

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

Issue 2403193003: Landing Recent QUIC changes until 9:41 AM, Oct 10, 2016 UTC-7 (Closed)
Patch Set: git cl format Created 4 years, 2 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/core/quic_framer.cc ('k') | net/quic/core/quic_packet_creator.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/core/quic_framer.h" 5 #include "net/quic/core/quic_framer.h"
6 6
7 #include <string.h> 7 #include <string.h>
8 8
9 #include <algorithm> 9 #include <algorithm>
10 #include <map> 10 #include <map>
(...skipping 225 matching lines...) Expand 10 before | Expand all | Expand 10 after
236 return accept_public_header_; 236 return accept_public_header_;
237 } 237 }
238 238
239 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override { 239 bool OnUnauthenticatedHeader(const QuicPacketHeader& header) override {
240 return true; 240 return true;
241 } 241 }
242 242
243 void OnDecryptedPacket(EncryptionLevel level) override {} 243 void OnDecryptedPacket(EncryptionLevel level) override {}
244 244
245 bool OnPacketHeader(const QuicPacketHeader& header) override { 245 bool OnPacketHeader(const QuicPacketHeader& header) override {
246 if (header.fec_flag) {
247 // Drop any FEC packet.
248 return false;
249 }
250 ++packet_count_; 246 ++packet_count_;
251 header_.reset(new QuicPacketHeader(header)); 247 header_.reset(new QuicPacketHeader(header));
252 return accept_packet_; 248 return accept_packet_;
253 } 249 }
254 250
255 bool OnStreamFrame(const QuicStreamFrame& frame) override { 251 bool OnStreamFrame(const QuicStreamFrame& frame) override {
256 ++frame_count_; 252 ++frame_count_;
257 // Save a copy of the data so it is valid after the packet is processed. 253 // Save a copy of the data so it is valid after the packet is processed.
258 string* string_data = new string(); 254 string* string_data = new string();
259 StringPiece(frame.data_buffer, frame.data_length) 255 StringPiece(frame.data_buffer, frame.data_length)
(...skipping 419 matching lines...) Expand 10 before | Expand all | Expand 10 after
679 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 675 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
680 : arraysize(packet_34), 676 : arraysize(packet_34),
681 false); 677 false);
682 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 678 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
683 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 679 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
684 ASSERT_TRUE(visitor_.header_.get()); 680 ASSERT_TRUE(visitor_.header_.get());
685 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 681 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
686 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 682 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
687 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 683 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
688 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 684 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
689 EXPECT_FALSE(visitor_.header_->fec_flag);
690 EXPECT_FALSE(visitor_.header_->entropy_flag); 685 EXPECT_FALSE(visitor_.header_->entropy_flag);
691 EXPECT_EQ(0, visitor_.header_->entropy_hash); 686 EXPECT_EQ(0, visitor_.header_->entropy_hash);
692 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 687 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
693 688
694 // Now test framing boundaries. 689 // Now test framing boundaries.
695 for (size_t i = 0; 690 for (size_t i = 0;
696 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 691 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
697 !kIncludeVersion, !kIncludePathId, 692 !kIncludeVersion, !kIncludePathId,
698 !kIncludeDiversificationNonce, 693 !kIncludeDiversificationNonce,
699 PACKET_6BYTE_PACKET_NUMBER); 694 PACKET_6BYTE_PACKET_NUMBER);
(...skipping 49 matching lines...) Expand 10 before | Expand all | Expand 10 after
749 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 744 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
750 : arraysize(packet_34), 745 : arraysize(packet_34),
751 false); 746 false);
752 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 747 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
753 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 748 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
754 ASSERT_TRUE(visitor_.header_.get()); 749 ASSERT_TRUE(visitor_.header_.get());
755 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 750 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
756 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 751 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
757 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 752 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
758 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 753 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
759 EXPECT_FALSE(visitor_.header_->fec_flag);
760 EXPECT_FALSE(visitor_.header_->entropy_flag); 754 EXPECT_FALSE(visitor_.header_->entropy_flag);
761 EXPECT_EQ(0, visitor_.header_->entropy_hash); 755 EXPECT_EQ(0, visitor_.header_->entropy_hash);
762 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 756 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
763 757
764 // Now test framing boundaries. 758 // Now test framing boundaries.
765 for (size_t i = 0; 759 for (size_t i = 0;
766 i < GetPacketHeaderSize(framer_.version(), PACKET_0BYTE_CONNECTION_ID, 760 i < GetPacketHeaderSize(framer_.version(), PACKET_0BYTE_CONNECTION_ID,
767 !kIncludeVersion, !kIncludePathId, 761 !kIncludeVersion, !kIncludePathId,
768 !kIncludeDiversificationNonce, 762 !kIncludeDiversificationNonce,
769 PACKET_6BYTE_PACKET_NUMBER); 763 PACKET_6BYTE_PACKET_NUMBER);
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
824 : arraysize(packet_34), 818 : arraysize(packet_34),
825 false); 819 false);
826 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 820 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
827 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 821 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
828 ASSERT_TRUE(visitor_.header_.get()); 822 ASSERT_TRUE(visitor_.header_.get());
829 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 823 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
830 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 824 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
831 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 825 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
832 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 826 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
833 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); 827 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]);
834 EXPECT_FALSE(visitor_.header_->fec_flag);
835 EXPECT_FALSE(visitor_.header_->entropy_flag); 828 EXPECT_FALSE(visitor_.header_->entropy_flag);
836 EXPECT_EQ(0, visitor_.header_->entropy_hash); 829 EXPECT_EQ(0, visitor_.header_->entropy_hash);
837 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 830 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
838 831
839 // Now test framing boundaries. 832 // Now test framing boundaries.
840 for (size_t i = 0; 833 for (size_t i = 0;
841 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 834 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
842 kIncludeVersion, !kIncludePathId, 835 kIncludeVersion, !kIncludePathId,
843 !kIncludeDiversificationNonce, 836 !kIncludeDiversificationNonce,
844 PACKET_6BYTE_PACKET_NUMBER); 837 PACKET_6BYTE_PACKET_NUMBER);
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
900 false); 893 false);
901 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 894 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
902 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 895 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
903 ASSERT_TRUE(visitor_.header_.get()); 896 ASSERT_TRUE(visitor_.header_.get());
904 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, kIncludePathId, 897 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, kIncludePathId,
905 !kIncludeDiversificationNonce)); 898 !kIncludeDiversificationNonce));
906 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 899 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
907 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag); 900 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag);
908 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 901 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
909 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 902 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
910 EXPECT_FALSE(visitor_.header_->fec_flag);
911 EXPECT_FALSE(visitor_.header_->entropy_flag); 903 EXPECT_FALSE(visitor_.header_->entropy_flag);
912 EXPECT_EQ(0, visitor_.header_->entropy_hash); 904 EXPECT_EQ(0, visitor_.header_->entropy_hash);
913 EXPECT_EQ(kPathId, visitor_.header_->path_id); 905 EXPECT_EQ(kPathId, visitor_.header_->path_id);
914 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 906 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
915 907
916 // Now test framing boundaries. 908 // Now test framing boundaries.
917 for (size_t i = 0; 909 for (size_t i = 0;
918 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 910 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
919 !kIncludeVersion, kIncludePathId, 911 !kIncludeVersion, kIncludePathId,
920 !kIncludeDiversificationNonce, 912 !kIncludeDiversificationNonce,
(...skipping 62 matching lines...) Expand 10 before | Expand all | Expand 10 after
983 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 975 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
984 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 976 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
985 ASSERT_TRUE(visitor_.header_.get()); 977 ASSERT_TRUE(visitor_.header_.get());
986 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, kIncludePathId, 978 EXPECT_TRUE(CheckDecryption(encrypted, kIncludeVersion, kIncludePathId,
987 !kIncludeDiversificationNonce)); 979 !kIncludeDiversificationNonce));
988 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 980 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
989 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag); 981 EXPECT_TRUE(visitor_.header_->public_header.multipath_flag);
990 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 982 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
991 EXPECT_TRUE(visitor_.header_->public_header.version_flag); 983 EXPECT_TRUE(visitor_.header_->public_header.version_flag);
992 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]); 984 EXPECT_EQ(GetParam(), visitor_.header_->public_header.versions[0]);
993 EXPECT_FALSE(visitor_.header_->fec_flag);
994 EXPECT_FALSE(visitor_.header_->entropy_flag); 985 EXPECT_FALSE(visitor_.header_->entropy_flag);
995 EXPECT_EQ(0, visitor_.header_->entropy_hash); 986 EXPECT_EQ(0, visitor_.header_->entropy_hash);
996 EXPECT_EQ(kPathId, visitor_.header_->path_id); 987 EXPECT_EQ(kPathId, visitor_.header_->path_id);
997 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 988 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
998 989
999 // Now test framing boundaries. 990 // Now test framing boundaries.
1000 for (size_t i = 0; 991 for (size_t i = 0;
1001 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 992 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
1002 !kIncludeVersion, kIncludePathId, 993 !kIncludeVersion, kIncludePathId,
1003 !kIncludeDiversificationNonce, 994 !kIncludeDiversificationNonce,
(...skipping 224 matching lines...) Expand 10 before | Expand all | Expand 10 after
1228 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 1219 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
1229 : arraysize(packet_34), 1220 : arraysize(packet_34),
1230 false); 1221 false);
1231 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1222 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1232 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 1223 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1233 ASSERT_TRUE(visitor_.header_.get()); 1224 ASSERT_TRUE(visitor_.header_.get());
1234 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 1225 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1235 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 1226 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
1236 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1227 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1237 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1228 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1238 EXPECT_FALSE(visitor_.header_->fec_flag);
1239 EXPECT_FALSE(visitor_.header_->entropy_flag); 1229 EXPECT_FALSE(visitor_.header_->entropy_flag);
1240 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1230 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1241 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 1231 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
1242 1232
1243 // Now test framing boundaries. 1233 // Now test framing boundaries.
1244 for (size_t i = 0; 1234 for (size_t i = 0;
1245 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 1235 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
1246 !kIncludeVersion, !kIncludePathId, 1236 !kIncludeVersion, !kIncludePathId,
1247 !kIncludeDiversificationNonce, 1237 !kIncludeDiversificationNonce,
1248 PACKET_4BYTE_PACKET_NUMBER); 1238 PACKET_4BYTE_PACKET_NUMBER);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1305 false); 1295 false);
1306 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1296 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1307 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 1297 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1308 ASSERT_TRUE(visitor_.header_.get()); 1298 ASSERT_TRUE(visitor_.header_.get());
1309 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 1299 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1310 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 1300 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
1311 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1301 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1312 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1302 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1313 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, 1303 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER,
1314 visitor_.header_->public_header.packet_number_length); 1304 visitor_.header_->public_header.packet_number_length);
1315 EXPECT_FALSE(visitor_.header_->fec_flag);
1316 EXPECT_FALSE(visitor_.header_->entropy_flag); 1305 EXPECT_FALSE(visitor_.header_->entropy_flag);
1317 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1306 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1318 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 1307 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
1319 1308
1320 // Now test framing boundaries. 1309 // Now test framing boundaries.
1321 for (size_t i = 0; 1310 for (size_t i = 0;
1322 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 1311 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
1323 !kIncludeVersion, !kIncludePathId, 1312 !kIncludeVersion, !kIncludePathId,
1324 !kIncludeDiversificationNonce, 1313 !kIncludeDiversificationNonce,
1325 PACKET_2BYTE_PACKET_NUMBER); 1314 PACKET_2BYTE_PACKET_NUMBER);
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
1382 false); 1371 false);
1383 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1372 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1384 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 1373 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1385 ASSERT_TRUE(visitor_.header_.get()); 1374 ASSERT_TRUE(visitor_.header_.get());
1386 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 1375 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1387 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 1376 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
1388 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1377 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1389 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1378 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1390 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, 1379 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1391 visitor_.header_->public_header.packet_number_length); 1380 visitor_.header_->public_header.packet_number_length);
1392 EXPECT_FALSE(visitor_.header_->fec_flag);
1393 EXPECT_FALSE(visitor_.header_->entropy_flag); 1381 EXPECT_FALSE(visitor_.header_->entropy_flag);
1394 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1382 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1395 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 1383 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
1396 1384
1397 // Now test framing boundaries. 1385 // Now test framing boundaries.
1398 for (size_t i = 0; 1386 for (size_t i = 0;
1399 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 1387 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
1400 !kIncludeVersion, !kIncludePathId, 1388 !kIncludeVersion, !kIncludePathId,
1401 !kIncludeDiversificationNonce, 1389 !kIncludeDiversificationNonce,
1402 PACKET_1BYTE_PACKET_NUMBER); 1390 PACKET_1BYTE_PACKET_NUMBER);
(...skipping 22 matching lines...) Expand all
1425 } 1413 }
1426 1414
1427 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) { 1415 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) {
1428 FLAGS_quic_packet_numbers_largest_received = true; 1416 FLAGS_quic_packet_numbers_largest_received = true;
1429 // Test the case when a packet is received from the past and future packet 1417 // Test the case when a packet is received from the past and future packet
1430 // numbers are still calculated relative to the largest received packet. 1418 // numbers are still calculated relative to the largest received packet.
1431 QuicPacketHeader header; 1419 QuicPacketHeader header;
1432 header.public_header.connection_id = kConnectionId; 1420 header.public_header.connection_id = kConnectionId;
1433 header.public_header.reset_flag = false; 1421 header.public_header.reset_flag = false;
1434 header.public_header.version_flag = false; 1422 header.public_header.version_flag = false;
1435 header.fec_flag = false;
1436 header.entropy_flag = false; 1423 header.entropy_flag = false;
1437 header.packet_number = kPacketNumber - 2; 1424 header.packet_number = kPacketNumber - 2;
1438 1425
1439 QuicPaddingFrame padding_frame; 1426 QuicPaddingFrame padding_frame;
1440 QuicFrames frames; 1427 QuicFrames frames;
1441 frames.push_back(QuicFrame(padding_frame)); 1428 frames.push_back(QuicFrame(padding_frame));
1442 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 1429 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
1443 ASSERT_TRUE(data != nullptr); 1430 ASSERT_TRUE(data != nullptr);
1444 1431
1445 QuicEncryptedPacket encrypted(data->data(), data->length(), false); 1432 QuicEncryptedPacket encrypted(data->data(), data->length(), false);
(...skipping 231 matching lines...) Expand 10 before | Expand all | Expand 10 after
1677 // frame type (padding) 1664 // frame type (padding)
1678 0x00, 1665 0x00,
1679 0x00, 0x00, 0x00, 0x00 1666 0x00, 0x00, 0x00, 0x00
1680 }; 1667 };
1681 // clang-format on 1668 // clang-format on
1682 CheckProcessingFails(packet, arraysize(packet), 1669 CheckProcessingFails(packet, arraysize(packet),
1683 "Illegal private flags value.", 1670 "Illegal private flags value.",
1684 QUIC_INVALID_PACKET_HEADER); 1671 QUIC_INVALID_PACKET_HEADER);
1685 }; 1672 };
1686 1673
1687 TEST_P(QuicFramerTest, InvalidFECGroupOffset) {
1688 if (framer_.version() > QUIC_VERSION_33) {
1689 return;
1690 }
1691 // clang-format off
1692 unsigned char packet[] = {
1693 // public flags (8 byte connection_id)
1694 0x38,
1695 // connection_id
1696 0x10, 0x32, 0x54, 0x76,
1697 0x98, 0xBA, 0xDC, 0xFE,
1698 // packet number
1699 0x01, 0x00, 0x00, 0x00,
1700 0x00, 0x00,
1701 // private flags (fec group)
1702 0x02,
1703 // first fec protected packet offset
1704 0x10
1705 };
1706 // clang-format on
1707 if (framer_.version() > QUIC_VERSION_31) {
1708 CheckProcessingFails(packet, arraysize(packet),
1709 "Illegal private flags value.",
1710 QUIC_INVALID_PACKET_HEADER);
1711 } else {
1712 CheckProcessingFails(packet, arraysize(packet),
1713 "First fec protected packet offset must be less "
1714 "than the packet number.",
1715 QUIC_INVALID_PACKET_HEADER);
1716 }
1717 };
1718
1719 TEST_P(QuicFramerTest, PaddingFrame) { 1674 TEST_P(QuicFramerTest, PaddingFrame) {
1720 // clang-format off 1675 // clang-format off
1721 unsigned char packet[] = { 1676 unsigned char packet[] = {
1722 // public flags (8 byte connection_id) 1677 // public flags (8 byte connection_id)
1723 0x38, 1678 0x38,
1724 // connection_id 1679 // connection_id
1725 0x10, 0x32, 0x54, 0x76, 1680 0x10, 0x32, 0x54, 0x76,
1726 0x98, 0xBA, 0xDC, 0xFE, 1681 0x98, 0xBA, 0xDC, 0xFE,
1727 // packet number 1682 // packet number
1728 0xBC, 0x9A, 0x78, 0x56, 1683 0xBC, 0x9A, 0x78, 0x56,
(...skipping 640 matching lines...) Expand 10 before | Expand all | Expand 10 after
2369 // clang-format on 2324 // clang-format on
2370 2325
2371 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2326 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2372 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2327 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2373 2328
2374 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2329 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2375 ASSERT_TRUE(visitor_.public_header_.get()); 2330 ASSERT_TRUE(visitor_.public_header_.get());
2376 ASSERT_FALSE(visitor_.header_.get()); 2331 ASSERT_FALSE(visitor_.header_.get());
2377 } 2332 }
2378 2333
2379 TEST_P(QuicFramerTest, AckFrameTwoTimestamp) {
2380 // clang-format off
2381 unsigned char packet[] = {
2382 // public flags (8 byte connection_id)
2383 0x38,
2384 // connection_id
2385 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2386 // packet number
2387 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
2388 // private flags (entropy)
2389 0x01,
2390
2391 // frame type (ack frame)
2392 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2393 0x6C,
2394 // entropy hash of all received packets.
2395 0xBA,
2396 // largest observed packet number
2397 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
2398 // Zero delta time.
2399 0x00, 0x00,
2400 // Number of timestamps.
2401 0x02,
2402 // Delta from largest observed.
2403 0x01,
2404 // Delta time.
2405 0x10, 0x32, 0x54, 0x76,
2406 // Delta from largest observed.
2407 0x02,
2408 // Delta time.
2409 0x10, 0x32,
2410 // num missing packets
2411 0x01,
2412 // missing packet delta
2413 0x01,
2414 // 0 more missing packets in range.
2415 0x00,
2416 // Number of revived packets.
2417 0x00,
2418 };
2419 // clang-format on
2420
2421 if (framer_.version() > QUIC_VERSION_31) {
2422 return;
2423 }
2424
2425 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2426 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2427
2428 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2429 ASSERT_TRUE(visitor_.header_.get());
2430 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2431 !kIncludeDiversificationNonce));
2432
2433 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2434 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2435 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2436 EXPECT_EQ(0xBA, frame.entropy_hash);
2437 EXPECT_EQ(kLargestObserved, frame.largest_observed);
2438 ASSERT_EQ(1u, frame.packets.NumPacketsSlow());
2439 ASSERT_EQ(2u, frame.received_packet_times.size());
2440 EXPECT_EQ(kMissingPacket, frame.packets.Min());
2441
2442 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
2443 const size_t kLargestObservedOffset =
2444 kReceivedEntropyOffset + kQuicEntropyHashSize;
2445 const size_t kMissingDeltaTimeOffset =
2446 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
2447 const size_t kNumTimestampsOffset =
2448 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2449 const size_t kTimestampDeltaLargestObserved1 =
2450 kNumTimestampsOffset + kQuicNumTimestampsSize;
2451 const size_t kTimestampTimeDeltaLargestObserved1 =
2452 kTimestampDeltaLargestObserved1 + 1;
2453 const size_t kTimestampDeltaLargestObserved2 =
2454 kTimestampTimeDeltaLargestObserved1 + 4;
2455 const size_t kTimestampTimeDeltaLargestObserved2 =
2456 kTimestampDeltaLargestObserved2 + 1;
2457 const size_t kNumMissingPacketOffset =
2458 kTimestampTimeDeltaLargestObserved2 + 2;
2459 const size_t kMissingPacketsOffset =
2460 kNumMissingPacketOffset + kNumberOfNackRangesSize;
2461 const size_t kMissingPacketsRange =
2462 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
2463 const size_t kRevivedPacketsLength =
2464 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
2465 // Now test framing boundaries.
2466 const size_t ack_frame_size =
2467 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
2468 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2469 string expected_error;
2470 if (i < kLargestObservedOffset) {
2471 expected_error = "Unable to read entropy hash for received packets.";
2472 } else if (i < kMissingDeltaTimeOffset) {
2473 expected_error = "Unable to read largest observed.";
2474 } else if (i < kNumTimestampsOffset) {
2475 expected_error = "Unable to read ack delay time.";
2476 } else if (i < kTimestampDeltaLargestObserved1) {
2477 expected_error = "Unable to read num received packets.";
2478 } else if (i < kTimestampTimeDeltaLargestObserved1) {
2479 expected_error = "Unable to read sequence delta in received packets.";
2480 } else if (i < kTimestampDeltaLargestObserved2) {
2481 expected_error = "Unable to read time delta in received packets.";
2482 } else if (i < kTimestampTimeDeltaLargestObserved2) {
2483 expected_error = "Unable to read sequence delta in received packets.";
2484 } else if (i < kNumMissingPacketOffset) {
2485 expected_error =
2486 "Unable to read incremental time delta in received packets.";
2487 } else if (i < kMissingPacketsOffset) {
2488 expected_error = "Unable to read num missing packet ranges.";
2489 } else if (i < kMissingPacketsRange) {
2490 expected_error = "Unable to read missing packet number delta.";
2491 } else if (i < kRevivedPacketsLength) {
2492 expected_error = "Unable to read missing packet number range.";
2493 } else {
2494 expected_error = "Unable to read num revived packets.";
2495 }
2496 CheckProcessingFails(
2497 packet,
2498 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2499 !kIncludeVersion, !kIncludePathId,
2500 !kIncludeDiversificationNonce,
2501 PACKET_6BYTE_PACKET_NUMBER),
2502 expected_error, QUIC_INVALID_ACK_DATA);
2503 }
2504 }
2505
2506 TEST_P(QuicFramerTest, AckFrameTwoTimestampVersion32) { 2334 TEST_P(QuicFramerTest, AckFrameTwoTimestampVersion32) {
2507 // clang-format off 2335 // clang-format off
2508 unsigned char packet[] = { 2336 unsigned char packet[] = {
2509 // public flags (8 byte connection_id) 2337 // public flags (8 byte connection_id)
2510 0x3C, 2338 0x3C,
2511 // connection_id 2339 // connection_id
2512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2340 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2513 // packet number 2341 // packet number
2514 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2342 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
2515 // private flags (entropy) 2343 // private flags (entropy)
(...skipping 20 matching lines...) Expand all
2536 0x10, 0x32, 2364 0x10, 0x32,
2537 // num missing packets 2365 // num missing packets
2538 0x01, 2366 0x01,
2539 // missing packet delta 2367 // missing packet delta
2540 0x01, 2368 0x01,
2541 // 0 more missing packets in range. 2369 // 0 more missing packets in range.
2542 0x00, 2370 0x00,
2543 }; 2371 };
2544 // clang-format on 2372 // clang-format on
2545 2373
2546 if (framer_.version() <= QUIC_VERSION_31 || 2374 if (framer_.version() > QUIC_VERSION_33) {
2547 framer_.version() > QUIC_VERSION_33) {
2548 return; 2375 return;
2549 } 2376 }
2550 2377
2551 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2378 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2552 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2379 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2553 2380
2554 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2381 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2555 ASSERT_TRUE(visitor_.header_.get()); 2382 ASSERT_TRUE(visitor_.header_.get());
2556 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2383 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2557 !kIncludeDiversificationNonce)); 2384 !kIncludeDiversificationNonce));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2613 CheckProcessingFails( 2440 CheckProcessingFails(
2614 packet, 2441 packet,
2615 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2442 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2616 !kIncludeVersion, !kIncludePathId, 2443 !kIncludeVersion, !kIncludePathId,
2617 !kIncludeDiversificationNonce, 2444 !kIncludeDiversificationNonce,
2618 PACKET_6BYTE_PACKET_NUMBER), 2445 PACKET_6BYTE_PACKET_NUMBER),
2619 expected_error, QUIC_INVALID_ACK_DATA); 2446 expected_error, QUIC_INVALID_ACK_DATA);
2620 } 2447 }
2621 } 2448 }
2622 2449
2623 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { 2450 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) {
2624 // clang-format off 2451 // clang-format off
2625 unsigned char packet[] = { 2452 unsigned char packet[] = {
2626 // public flags (8 byte connection_id) 2453 // public flags (8 byte connection_id)
2627 0x38, 2454 0x3C,
2628 // connection_id 2455 // connection_id
2629 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2456 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2630 // packet number 2457 // packet number
2631 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2458 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
2632 // private flags (entropy) 2459 // private flags (entropy)
2633 0x01, 2460 0x01,
2634 2461
2635 // frame type (ack frame) 2462 // frame type (ack frame)
2636 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 2463 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2637 0x6C, 2464 0x6C,
2638 // entropy hash of all received packets. 2465 // entropy hash of all received packets.
2639 0xBA, 2466 0xBA,
2640 // largest observed packet number 2467 // largest observed packet number
2641 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, 2468 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
2642 // Zero delta time. 2469 // Zero delta time.
2643 0x00, 0x00, 2470 0x00, 0x00,
2644 // Number of timestamps. 2471 // Number of timestamps.
2645 0x01, 2472 0x01,
2646 // Delta from largest observed. 2473 // Delta from largest observed.
2647 0x01, 2474 0x01,
2648 // Delta time. 2475 // Delta time.
2649 0x10, 0x32, 0x54, 0x76, 2476 0x10, 0x32, 0x54, 0x76,
2650 // num missing packets 2477 // num missing packets
2651 0x01, 2478 0x01,
2652 // missing packet delta 2479 // missing packet delta
2653 0x01, 2480 0x01,
2654 // 0 more missing packets in range. 2481 // 0 more missing packets in range.
2655 0x00, 2482 0x00,
2656 // Number of revived packets.
2657 0x00,
2658 }; 2483 };
2659 // clang-format on 2484 // clang-format on
2660 2485
2661 if (framer_.version() > QUIC_VERSION_31) { 2486 if (framer_.version() > QUIC_VERSION_33) {
2662 return; 2487 return;
2663 } 2488 }
2664 2489
2665 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2490 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2666 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2491 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2667 2492
2668 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2493 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2669 ASSERT_TRUE(visitor_.header_.get()); 2494 ASSERT_TRUE(visitor_.header_.get());
2670 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2495 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2671 !kIncludeDiversificationNonce)); 2496 !kIncludeDiversificationNonce));
(...skipping 14 matching lines...) Expand all
2686 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 2511 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
2687 const size_t kNumTimestampsOffset = 2512 const size_t kNumTimestampsOffset =
2688 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; 2513 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2689 const size_t kTimestampDeltaLargestObserved = 2514 const size_t kTimestampDeltaLargestObserved =
2690 kNumTimestampsOffset + kQuicNumTimestampsSize; 2515 kNumTimestampsOffset + kQuicNumTimestampsSize;
2691 const size_t kTimestampTimeDeltaLargestObserved = 2516 const size_t kTimestampTimeDeltaLargestObserved =
2692 kTimestampDeltaLargestObserved + 1; 2517 kTimestampDeltaLargestObserved + 1;
2693 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; 2518 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4;
2694 const size_t kMissingPacketsOffset = 2519 const size_t kMissingPacketsOffset =
2695 kNumMissingPacketOffset + kNumberOfNackRangesSize; 2520 kNumMissingPacketOffset + kNumberOfNackRangesSize;
2696 const size_t kMissingPacketsRange =
2697 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
2698 const size_t kRevivedPacketsLength =
2699 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
2700 // Now test framing boundaries. 2521 // Now test framing boundaries.
2701 const size_t ack_frame_size = 2522 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER;
2702 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
2703 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { 2523 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2704 string expected_error; 2524 string expected_error;
2705 if (i < kLargestObservedOffset) { 2525 if (i < kLargestObservedOffset) {
2706 expected_error = "Unable to read entropy hash for received packets."; 2526 expected_error = "Unable to read entropy hash for received packets.";
2707 } else if (i < kMissingDeltaTimeOffset) { 2527 } else if (i < kMissingDeltaTimeOffset) {
2708 expected_error = "Unable to read largest observed."; 2528 expected_error = "Unable to read largest observed.";
2709 } else if (i < kNumTimestampsOffset) { 2529 } else if (i < kNumTimestampsOffset) {
2710 expected_error = "Unable to read ack delay time."; 2530 expected_error = "Unable to read ack delay time.";
2711 } else if (i < kTimestampDeltaLargestObserved) { 2531 } else if (i < kTimestampDeltaLargestObserved) {
2712 expected_error = "Unable to read num received packets."; 2532 expected_error = "Unable to read num received packets.";
2713 } else if (i < kTimestampTimeDeltaLargestObserved) { 2533 } else if (i < kTimestampTimeDeltaLargestObserved) {
2714 expected_error = "Unable to read sequence delta in received packets."; 2534 expected_error = "Unable to read sequence delta in received packets.";
2715 } else if (i < kNumMissingPacketOffset) { 2535 } else if (i < kNumMissingPacketOffset) {
2716 expected_error = "Unable to read time delta in received packets."; 2536 expected_error = "Unable to read time delta in received packets.";
2717 } else if (i < kMissingPacketsOffset) { 2537 } else if (i < kMissingPacketsOffset) {
2718 expected_error = "Unable to read num missing packet ranges."; 2538 expected_error = "Unable to read num missing packet ranges.";
2719 } else if (i < kMissingPacketsRange) { 2539 } else {
2720 expected_error = "Unable to read missing packet number delta."; 2540 expected_error = "Unable to read missing packet number delta.";
2721 } else if (i < kRevivedPacketsLength) {
2722 expected_error = "Unable to read missing packet number range.";
2723 } else {
2724 expected_error = "Unable to read num revived packets.";
2725 } 2541 }
2726 CheckProcessingFails( 2542 CheckProcessingFails(
2727 packet, 2543 packet,
2728 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2544 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2729 !kIncludeVersion, !kIncludePathId, 2545 !kIncludeVersion, !kIncludePathId,
2730 !kIncludeDiversificationNonce, 2546 !kIncludeDiversificationNonce,
2731 PACKET_6BYTE_PACKET_NUMBER), 2547 PACKET_6BYTE_PACKET_NUMBER),
2732 expected_error, QUIC_INVALID_ACK_DATA); 2548 expected_error, QUIC_INVALID_ACK_DATA);
2733 } 2549 }
2734 } 2550 }
2735 2551
2736 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) { 2552 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) {
2737 // clang-format off 2553 // clang-format off
2738 unsigned char packet[] = { 2554 unsigned char packet[] = {
2739 // public flags (8 byte connection_id) 2555 // public flags (8 byte connection_id)
2740 0x3C, 2556 0x3C,
2741 // connection_id 2557 // connection_id
2742 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2558 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2743 // packet number 2559 // packet number
2744 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2560 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
2745 // private flags (entropy)
2746 0x01,
2747 2561
2748 // frame type (ack frame) 2562 // frame type (ack frame)
2749 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 2563 // (one ack block, 2 byte largest observed, 2 byte block length)
2750 0x6C, 2564 0x45,
2751 // entropy hash of all received packets. 2565 // largest acked
2752 0xBA, 2566 0x34, 0x12,
2753 // largest observed packet number
2754 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
2755 // Zero delta time. 2567 // Zero delta time.
2756 0x00, 0x00, 2568 0x00, 0x00,
2757 // Number of timestamps. 2569 // first ack block length.
2758 0x01, 2570 0x34, 0x12,
2759 // Delta from largest observed. 2571 // num timestamps.
2760 0x01,
2761 // Delta time.
2762 0x10, 0x32, 0x54, 0x76,
2763 // num missing packets
2764 0x01,
2765 // missing packet delta
2766 0x01,
2767 // 0 more missing packets in range.
2768 0x00, 2572 0x00,
2769 }; 2573 };
2770 // clang-format on 2574 // clang-format on
2771 2575
2772 if (framer_.version() <= QUIC_VERSION_31 || 2576 if (framer_.version() <= QUIC_VERSION_33) {
2773 framer_.version() > QUIC_VERSION_33) {
2774 return; 2577 return;
2775 } 2578 }
2776 2579
2777 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2580 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2778 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2581 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2779 2582
2780 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2583 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2781 ASSERT_TRUE(visitor_.header_.get()); 2584 ASSERT_TRUE(visitor_.header_.get());
2782 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2585 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2783 !kIncludeDiversificationNonce)); 2586 !kIncludeDiversificationNonce));
2784 2587
2785 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2588 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2786 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2589 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2787 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 2590 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2788 EXPECT_EQ(0xBA, frame.entropy_hash); 2591 EXPECT_EQ(kSmallLargestObserved, frame.largest_observed);
2789 EXPECT_EQ(kLargestObserved, frame.largest_observed); 2592 EXPECT_FALSE(frame.missing);
2790 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); 2593 ASSERT_EQ(4660u, frame.packets.NumPacketsSlow());
2791 ASSERT_EQ(1u, frame.received_packet_times.size());
2792 EXPECT_EQ(kMissingPacket, frame.packets.Min());
2793 2594
2794 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 2595 const size_t kLargestAckedOffset = kQuicFrameTypeSize;
2795 const size_t kLargestObservedOffset = 2596 const size_t kLargestAckedDeltaTimeOffset =
2796 kReceivedEntropyOffset + kQuicEntropyHashSize; 2597 kLargestAckedOffset + PACKET_2BYTE_PACKET_NUMBER;
2797 const size_t kMissingDeltaTimeOffset = 2598 const size_t kFirstAckBlockLengthOffset =
2798 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 2599 kLargestAckedDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2799 const size_t kNumTimestampsOffset = 2600 const size_t kNumTimestampsOffset =
2800 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; 2601 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER;
2801 const size_t kTimestampDeltaLargestObserved =
2802 kNumTimestampsOffset + kQuicNumTimestampsSize;
2803 const size_t kTimestampTimeDeltaLargestObserved =
2804 kTimestampDeltaLargestObserved + 1;
2805 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4;
2806 const size_t kMissingPacketsOffset =
2807 kNumMissingPacketOffset + kNumberOfNackRangesSize;
2808 // Now test framing boundaries. 2602 // Now test framing boundaries.
2809 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; 2603 const size_t ack_frame_size =
2604 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER;
2810 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { 2605 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2811 string expected_error; 2606 string expected_error;
2812 if (i < kLargestObservedOffset) { 2607 if (i < kLargestAckedDeltaTimeOffset) {
2813 expected_error = "Unable to read entropy hash for received packets."; 2608 expected_error = "Unable to read largest acked.";
2814 } else if (i < kMissingDeltaTimeOffset) { 2609 } else if (i < kFirstAckBlockLengthOffset) {
2815 expected_error = "Unable to read largest observed."; 2610 expected_error = "Unable to read ack delay time.";
2816 } else if (i < kNumTimestampsOffset) { 2611 } else if (i < kNumTimestampsOffset) {
2817 expected_error = "Unable to read ack delay time."; 2612 expected_error = "Unable to read first ack block length.";
2818 } else if (i < kTimestampDeltaLargestObserved) { 2613 } else {
2819 expected_error = "Unable to read num received packets."; 2614 expected_error = "Unable to read num received packets.";
2820 } else if (i < kTimestampTimeDeltaLargestObserved) {
2821 expected_error = "Unable to read sequence delta in received packets.";
2822 } else if (i < kNumMissingPacketOffset) {
2823 expected_error = "Unable to read time delta in received packets.";
2824 } else if (i < kMissingPacketsOffset) {
2825 expected_error = "Unable to read num missing packet ranges.";
2826 } else {
2827 expected_error = "Unable to read missing packet number delta.";
2828 } 2615 }
2829 CheckProcessingFails( 2616 CheckProcessingFails(
2830 packet, 2617 packet,
2831 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2618 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2832 !kIncludeVersion, !kIncludePathId, 2619 !kIncludeVersion, !kIncludePathId,
2833 !kIncludeDiversificationNonce, 2620 !kIncludeDiversificationNonce,
2834 PACKET_6BYTE_PACKET_NUMBER), 2621 PACKET_6BYTE_PACKET_NUMBER),
2835 expected_error, QUIC_INVALID_ACK_DATA); 2622 expected_error, QUIC_INVALID_ACK_DATA);
2836 } 2623 }
2837 } 2624 }
2838 2625
2839 TEST_P(QuicFramerTest, AckFrame) { 2626 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) {
2840 // clang-format off 2627 // clang-format off
2841 unsigned char packet[] = { 2628 unsigned char packet[] = {
2842 // public flags (8 byte connection_id) 2629 // public flags (8 byte connection_id)
2843 0x3C, 2630 0x3C,
2844 // connection_id 2631 // connection_id
2845 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2632 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2846 // packet number 2633 // packet number
2847 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
2848 // private flags (entropy)
2849 0x01,
2850
2851 // frame type (ack frame)
2852 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2853 0x6C,
2854 // entropy hash of all received packets.
2855 0xBA,
2856 // largest observed packet number
2857 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
2858 // Zero delta time.
2859 0x00, 0x00,
2860 // Number of timestamps.
2861 0x00,
2862 // num missing packets
2863 0x01,
2864 // missing packet delta
2865 0x01,
2866 // 0 more missing packets in range.
2867 0x00,
2868 // Number of revived packets.
2869 0x00,
2870 };
2871 // clang-format on
2872
2873 if (framer_.version() > QUIC_VERSION_31) {
2874 return;
2875 }
2876
2877 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2878 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2879
2880 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2881 ASSERT_TRUE(visitor_.header_.get());
2882 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2883 !kIncludeDiversificationNonce));
2884
2885 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2886 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2887 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2888 EXPECT_EQ(0xBA, frame.entropy_hash);
2889 EXPECT_EQ(kLargestObserved, frame.largest_observed);
2890 ASSERT_EQ(1u, frame.packets.NumPacketsSlow());
2891 EXPECT_EQ(kMissingPacket, frame.packets.Min());
2892
2893 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
2894 const size_t kLargestObservedOffset =
2895 kReceivedEntropyOffset + kQuicEntropyHashSize;
2896 const size_t kMissingDeltaTimeOffset =
2897 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
2898 const size_t kNumTimestampsOffset =
2899 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2900 const size_t kNumMissingPacketOffset =
2901 kNumTimestampsOffset + kQuicNumTimestampsSize;
2902 const size_t kMissingPacketsOffset =
2903 kNumMissingPacketOffset + kNumberOfNackRangesSize;
2904 const size_t kMissingPacketsRange =
2905 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
2906 const size_t kRevivedPacketsLength =
2907 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
2908 // Now test framing boundaries.
2909 const size_t ack_frame_size =
2910 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
2911 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2912 string expected_error;
2913 if (i < kLargestObservedOffset) {
2914 expected_error = "Unable to read entropy hash for received packets.";
2915 } else if (i < kMissingDeltaTimeOffset) {
2916 expected_error = "Unable to read largest observed.";
2917 } else if (i < kNumTimestampsOffset) {
2918 expected_error = "Unable to read ack delay time.";
2919 } else if (i < kNumMissingPacketOffset) {
2920 expected_error = "Unable to read num received packets.";
2921 } else if (i < kMissingPacketsOffset) {
2922 expected_error = "Unable to read num missing packet ranges.";
2923 } else if (i < kMissingPacketsRange) {
2924 expected_error = "Unable to read missing packet number delta.";
2925 } else if (i < kRevivedPacketsLength) {
2926 expected_error = "Unable to read missing packet number range.";
2927 } else {
2928 expected_error = "Unable to read num revived packets.";
2929 }
2930 CheckProcessingFails(
2931 packet,
2932 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2933 !kIncludeVersion, !kIncludePathId,
2934 !kIncludeDiversificationNonce,
2935 PACKET_6BYTE_PACKET_NUMBER),
2936 expected_error, QUIC_INVALID_ACK_DATA);
2937 }
2938 }
2939
2940 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) {
2941 // clang-format off
2942 unsigned char packet[] = {
2943 // public flags (8 byte connection_id)
2944 0x3C,
2945 // connection_id
2946 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2947 // packet number
2948 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
2949
2950 // frame type (ack frame)
2951 // (one ack block, 2 byte largest observed, 2 byte block length)
2952 0x45,
2953 // largest acked
2954 0x34, 0x12,
2955 // Zero delta time.
2956 0x00, 0x00,
2957 // first ack block length.
2958 0x34, 0x12,
2959 // num timestamps.
2960 0x00,
2961 };
2962 // clang-format on
2963
2964 if (framer_.version() <= QUIC_VERSION_33) {
2965 return;
2966 }
2967
2968 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2969 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2970
2971 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2972 ASSERT_TRUE(visitor_.header_.get());
2973 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2974 !kIncludeDiversificationNonce));
2975
2976 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2977 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2978 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2979 EXPECT_EQ(kSmallLargestObserved, frame.largest_observed);
2980 EXPECT_FALSE(frame.missing);
2981 ASSERT_EQ(4660u, frame.packets.NumPacketsSlow());
2982
2983 const size_t kLargestAckedOffset = kQuicFrameTypeSize;
2984 const size_t kLargestAckedDeltaTimeOffset =
2985 kLargestAckedOffset + PACKET_2BYTE_PACKET_NUMBER;
2986 const size_t kFirstAckBlockLengthOffset =
2987 kLargestAckedDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2988 const size_t kNumTimestampsOffset =
2989 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER;
2990 // Now test framing boundaries.
2991 const size_t ack_frame_size =
2992 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER;
2993 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2994 string expected_error;
2995 if (i < kLargestAckedDeltaTimeOffset) {
2996 expected_error = "Unable to read largest acked.";
2997 } else if (i < kFirstAckBlockLengthOffset) {
2998 expected_error = "Unable to read ack delay time.";
2999 } else if (i < kNumTimestampsOffset) {
3000 expected_error = "Unable to read first ack block length.";
3001 } else {
3002 expected_error = "Unable to read num received packets.";
3003 }
3004 CheckProcessingFails(
3005 packet,
3006 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
3007 !kIncludeVersion, !kIncludePathId,
3008 !kIncludeDiversificationNonce,
3009 PACKET_6BYTE_PACKET_NUMBER),
3010 expected_error, QUIC_INVALID_ACK_DATA);
3011 }
3012 }
3013
3014 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) {
3015 // clang-format off
3016 unsigned char packet[] = {
3017 // public flags (8 byte connection_id)
3018 0x3C,
3019 // connection_id
3020 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3021 // packet number
3022 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 2634 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3023 2635
3024 // frame type (ack frame) 2636 // frame type (ack frame)
3025 // (more than one ack block, 2 byte largest observed, 2 byte block length) 2637 // (more than one ack block, 2 byte largest observed, 2 byte block length)
3026 0x65, 2638 0x65,
3027 // largest acked 2639 // largest acked
3028 0x34, 0x12, 2640 0x34, 0x12,
3029 // Zero delta time. 2641 // Zero delta time.
3030 0x00, 0x00, 2642 0x00, 0x00,
3031 // num ack blocks ranges. 2643 // num ack blocks ranges.
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
3187 0x00, 2799 0x00,
3188 // num missing packets 2800 // num missing packets
3189 0x01, 2801 0x01,
3190 // missing packet delta 2802 // missing packet delta
3191 0x01, 2803 0x01,
3192 // 0 more missing packets in range. 2804 // 0 more missing packets in range.
3193 0x00, 2805 0x00,
3194 }; 2806 };
3195 // clang-format on 2807 // clang-format on
3196 2808
3197 if (framer_.version() <= QUIC_VERSION_31 || 2809 if (framer_.version() > QUIC_VERSION_33) {
3198 framer_.version() > QUIC_VERSION_33) {
3199 return; 2810 return;
3200 } 2811 }
3201 2812
3202 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2813 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3203 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2814 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3204 2815
3205 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2816 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3206 ASSERT_TRUE(visitor_.header_.get()); 2817 ASSERT_TRUE(visitor_.header_.get());
3207 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2818 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3208 !kIncludeDiversificationNonce)); 2819 !kIncludeDiversificationNonce));
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
3246 CheckProcessingFails( 2857 CheckProcessingFails(
3247 packet, 2858 packet,
3248 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2859 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
3249 !kIncludeVersion, !kIncludePathId, 2860 !kIncludeVersion, !kIncludePathId,
3250 !kIncludeDiversificationNonce, 2861 !kIncludeDiversificationNonce,
3251 PACKET_6BYTE_PACKET_NUMBER), 2862 PACKET_6BYTE_PACKET_NUMBER),
3252 expected_error, QUIC_INVALID_ACK_DATA); 2863 expected_error, QUIC_INVALID_ACK_DATA);
3253 } 2864 }
3254 } 2865 }
3255 2866
3256 TEST_P(QuicFramerTest, AckFrameRevivedPackets) {
3257 // clang-format off
3258 unsigned char packet[] = {
3259 // public flags (8 byte connection_id)
3260 0x38,
3261 // connection_id
3262 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3263 // packet number
3264 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
3265 // private flags (entropy)
3266 0x01,
3267
3268 // frame type (ack frame)
3269 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3270 0x6C,
3271 // entropy hash of all received packets.
3272 0xBA,
3273 // largest observed packet number
3274 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
3275 // Zero delta time.
3276 0x00, 0x00,
3277 // num received packets.
3278 0x00,
3279 // num missing packets
3280 0x01,
3281 // missing packet delta
3282 0x01,
3283 // 0 more missing packets in range.
3284 0x00,
3285 // Number of revived packets.
3286 0x01,
3287 // Revived packet number.
3288 0xBE, 0x9A, 0x78, 0x56, 0x34, 0x12,
3289 // Number of revived packets.
3290 0x00,
3291 };
3292 // clang-format on
3293
3294 if (framer_.version() > QUIC_VERSION_31) {
3295 return;
3296 }
3297
3298 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3299 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3300
3301 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3302 ASSERT_TRUE(visitor_.header_.get());
3303 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3304 !kIncludeDiversificationNonce));
3305
3306 EXPECT_EQ(0u, visitor_.stream_frames_.size());
3307 ASSERT_EQ(1u, visitor_.ack_frames_.size());
3308 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
3309 EXPECT_EQ(0xBA, frame.entropy_hash);
3310 EXPECT_EQ(kLargestObserved, frame.largest_observed);
3311 ASSERT_EQ(1u, frame.packets.NumPacketsSlow());
3312 EXPECT_EQ(kMissingPacket, frame.packets.Min());
3313
3314 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
3315 const size_t kLargestObservedOffset =
3316 kReceivedEntropyOffset + kQuicEntropyHashSize;
3317 const size_t kMissingDeltaTimeOffset =
3318 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
3319 const size_t kNumTimestampsOffset =
3320 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
3321 const size_t kNumMissingPacketOffset =
3322 kNumTimestampsOffset + kQuicNumTimestampsSize;
3323 const size_t kMissingPacketsOffset =
3324 kNumMissingPacketOffset + kNumberOfNackRangesSize;
3325 const size_t kMissingPacketsRange =
3326 kMissingPacketsOffset + PACKET_1BYTE_PACKET_NUMBER;
3327 const size_t kRevivedPacketsLength =
3328 kMissingPacketsRange + PACKET_1BYTE_PACKET_NUMBER;
3329 const size_t kRevivedPacketSequenceNumberLength =
3330 kRevivedPacketsLength + PACKET_1BYTE_PACKET_NUMBER;
3331 // Now test framing boundaries.
3332 const size_t ack_frame_size =
3333 kRevivedPacketSequenceNumberLength + PACKET_6BYTE_PACKET_NUMBER;
3334 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
3335 string expected_error;
3336 if (i < kReceivedEntropyOffset) {
3337 expected_error = "Unable to read least unacked delta.";
3338 } else if (i < kLargestObservedOffset) {
3339 expected_error = "Unable to read entropy hash for received packets.";
3340 } else if (i < kMissingDeltaTimeOffset) {
3341 expected_error = "Unable to read largest observed.";
3342 } else if (i < kNumTimestampsOffset) {
3343 expected_error = "Unable to read ack delay time.";
3344 } else if (i < kNumMissingPacketOffset) {
3345 expected_error = "Unable to read num received packets.";
3346 } else if (i < kMissingPacketsOffset) {
3347 expected_error = "Unable to read num missing packet ranges.";
3348 } else if (i < kMissingPacketsRange) {
3349 expected_error = "Unable to read missing packet number delta.";
3350 } else if (i < kRevivedPacketsLength) {
3351 expected_error = "Unable to read missing packet number range.";
3352 } else if (i < kRevivedPacketSequenceNumberLength) {
3353 expected_error = "Unable to read num revived packets.";
3354 } else {
3355 expected_error = "Unable to read revived packet.";
3356 }
3357 CheckProcessingFails(
3358 packet,
3359 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
3360 !kIncludeVersion, !kIncludePathId,
3361 !kIncludeDiversificationNonce,
3362 PACKET_6BYTE_PACKET_NUMBER),
3363 expected_error, QUIC_INVALID_ACK_DATA);
3364 }
3365 }
3366
3367 TEST_P(QuicFramerTest, AckFrameNoNacks) {
3368 // clang-format off
3369 unsigned char packet[] = {
3370 // public flags (8 byte connection_id)
3371 static_cast<unsigned char>(
3372 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
3373 // connection_id
3374 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3375 // packet number
3376 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
3377 // private flags (entropy)
3378 0x01,
3379
3380 // frame type (ack frame)
3381 // (no nacks, not truncated, 6 byte largest observed, 1 byte delta)
3382 0x4C,
3383 // entropy hash of all received packets.
3384 0xBA,
3385 // largest observed packet number
3386 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
3387 // Zero delta time.
3388 0x00, 0x00,
3389 // Number of received packets.
3390 0x00,
3391 };
3392 // clang-format on
3393 if (framer_.version() >= QUIC_VERSION_31) {
3394 return;
3395 }
3396
3397 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3398 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3399
3400 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3401 ASSERT_TRUE(visitor_.header_.get());
3402 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3403 !kIncludeDiversificationNonce));
3404
3405 EXPECT_EQ(0u, visitor_.stream_frames_.size());
3406 ASSERT_EQ(1u, visitor_.ack_frames_.size());
3407 QuicAckFrame* frame = visitor_.ack_frames_[0];
3408 EXPECT_EQ(0xBA, frame->entropy_hash);
3409 EXPECT_EQ(kLargestObserved, frame->largest_observed);
3410 ASSERT_TRUE(frame->packets.Empty());
3411
3412 // Verify that the packet re-serializes identically.
3413 QuicFrames frames;
3414 frames.push_back(QuicFrame(frame));
3415 std::unique_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
3416 ASSERT_TRUE(data != nullptr);
3417
3418 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3419 data->length(), AsChars(packet),
3420 arraysize(packet));
3421 }
3422
3423 TEST_P(QuicFramerTest, AckFrame500Nacks) {
3424 // clang-format off
3425 unsigned char packet[] = {
3426 // public flags (8 byte connection_id)
3427 static_cast<unsigned char>(
3428 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
3429 // connection_id
3430 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3431 // packet number
3432 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
3433 // private flags (entropy)
3434 0x01,
3435
3436 // frame type (ack frame)
3437 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3438 0x6C,
3439 // entropy hash of all received packets.
3440 0xBA,
3441 // largest observed packet number
3442 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
3443 // Zero delta time.
3444 0x00, 0x00,
3445 // No received packets.
3446 0x00,
3447 // num missing packet ranges
3448 0x02,
3449 // missing packet delta
3450 0x01,
3451 // 243 more missing packets in range.
3452 // The ranges are listed in this order so the re-constructed packet
3453 // matches.
3454 0xF3,
3455 // No gap between ranges
3456 0x00,
3457 // 255 more missing packets in range.
3458 0xFF,
3459 // No revived packets.
3460 0x00,
3461 };
3462 // clang-format on
3463
3464 if (framer_.version() > QUIC_VERSION_31) {
3465 return;
3466 }
3467
3468 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3469 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3470
3471 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3472 ASSERT_TRUE(visitor_.header_.get());
3473 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3474 !kIncludeDiversificationNonce));
3475
3476 EXPECT_EQ(0u, visitor_.stream_frames_.size());
3477 ASSERT_EQ(1u, visitor_.ack_frames_.size());
3478 QuicAckFrame* frame = visitor_.ack_frames_[0];
3479 EXPECT_EQ(0xBA, frame->entropy_hash);
3480 EXPECT_EQ(kLargestObserved, frame->largest_observed);
3481 ASSERT_EQ(500u, frame->packets.NumPacketsSlow());
3482 EXPECT_EQ(kMissingPacket - 499, frame->packets.Min());
3483 EXPECT_EQ(kMissingPacket, frame->packets.Max());
3484
3485 // Verify that the packet re-serializes identically.
3486 QuicFrames frames;
3487 frames.push_back(QuicFrame(frame));
3488 std::unique_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames));
3489 ASSERT_TRUE(data != nullptr);
3490
3491 test::CompareCharArraysWithHexError("constructed packet", data->data(),
3492 data->length(), AsChars(packet),
3493 arraysize(packet));
3494 }
3495
3496 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) { 2867 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) {
3497 // clang-format off 2868 // clang-format off
3498 unsigned char packet[] = { 2869 unsigned char packet[] = {
3499 // public flags (8 byte connection_id) 2870 // public flags (8 byte connection_id)
3500 static_cast<unsigned char>( 2871 static_cast<unsigned char>(
3501 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 2872 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
3502 // connection_id 2873 // connection_id
3503 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2874 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3504 // packet number 2875 // packet number
3505 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2876 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
(...skipping 19 matching lines...) Expand all
3525 // The ranges are listed in this order so the re-constructed packet 2896 // The ranges are listed in this order so the re-constructed packet
3526 // matches. 2897 // matches.
3527 0xF3, 2898 0xF3,
3528 // No gap between ranges 2899 // No gap between ranges
3529 0x00, 2900 0x00,
3530 // 255 more missing packets in range. 2901 // 255 more missing packets in range.
3531 0xFF, 2902 0xFF,
3532 }; 2903 };
3533 // clang-format on 2904 // clang-format on
3534 2905
3535 if (framer_.version() <= QUIC_VERSION_31 || 2906 if (framer_.version() > QUIC_VERSION_33) {
3536 framer_.version() > QUIC_VERSION_33) {
3537 return; 2907 return;
3538 } 2908 }
3539 2909
3540 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2910 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3541 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2911 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3542 2912
3543 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2913 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3544 ASSERT_TRUE(visitor_.header_.get()); 2914 ASSERT_TRUE(visitor_.header_.get());
3545 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2915 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3546 !kIncludeDiversificationNonce)); 2916 !kIncludeDiversificationNonce));
(...skipping 959 matching lines...) Expand 10 before | Expand all | Expand 10 after
4506 } else if (i < kVersionOffset) { 3876 } else if (i < kVersionOffset) {
4507 expected_error = "Unable to read ConnectionId."; 3877 expected_error = "Unable to read ConnectionId.";
4508 } else { 3878 } else {
4509 expected_error = "Unable to read supported version in negotiation."; 3879 expected_error = "Unable to read supported version in negotiation.";
4510 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET; 3880 error_code = QUIC_INVALID_VERSION_NEGOTIATION_PACKET;
4511 } 3881 }
4512 CheckProcessingFails(packet, i, expected_error, error_code); 3882 CheckProcessingFails(packet, i, expected_error, error_code);
4513 } 3883 }
4514 } 3884 }
4515 3885
4516 TEST_P(QuicFramerTest, DropFecPacket) {
4517 // clang-format off
4518 unsigned char packet[] = {
4519 // public flags (8 byte connection_id)
4520 0x38,
4521 // connection_id
4522 0x10, 0x32, 0x54, 0x76,
4523 0x98, 0xBA, 0xDC, 0xFE,
4524 // packet number
4525 0xBC, 0x9A, 0x78, 0x56,
4526 0x34, 0x12,
4527 // private flags (fec group & FEC)
4528 0x06,
4529 // first fec protected packet offset
4530 0x01,
4531
4532 // redundancy
4533 'a', 'b', 'c', 'd',
4534 'e', 'f', 'g', 'h',
4535 'i', 'j', 'k', 'l',
4536 'm', 'n', 'o', 'p',
4537 };
4538 if (framer_.version() > QUIC_VERSION_33) {
4539 return;
4540 }
4541 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4542 if (framer_.version() <= QUIC_VERSION_31) {
4543 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4544 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4545 } else {
4546 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
4547 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
4548 }
4549 EXPECT_FALSE(visitor_.header_.get());
4550 }
4551
4552 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { 3886 TEST_P(QuicFramerTest, BuildPaddingFramePacket) {
4553 QuicPacketHeader header; 3887 QuicPacketHeader header;
4554 header.public_header.connection_id = kConnectionId; 3888 header.public_header.connection_id = kConnectionId;
4555 header.public_header.reset_flag = false; 3889 header.public_header.reset_flag = false;
4556 header.public_header.version_flag = false; 3890 header.public_header.version_flag = false;
4557 header.fec_flag = false;
4558 header.entropy_flag = false; 3891 header.entropy_flag = false;
4559 header.packet_number = kPacketNumber; 3892 header.packet_number = kPacketNumber;
4560 3893
4561 QuicPaddingFrame padding_frame; 3894 QuicPaddingFrame padding_frame;
4562 3895
4563 QuicFrames frames; 3896 QuicFrames frames;
4564 frames.push_back(QuicFrame(padding_frame)); 3897 frames.push_back(QuicFrame(padding_frame));
4565 3898
4566 // clang-format off 3899 // clang-format off
4567 unsigned char packet[kMaxPacketSize] = { 3900 unsigned char packet[kMaxPacketSize] = {
(...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after
4613 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 3946 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
4614 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 3947 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
4615 : arraysize(packet_34)); 3948 : arraysize(packet_34));
4616 } 3949 }
4617 3950
4618 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) { 3951 TEST_P(QuicFramerTest, Build4ByteSequenceNumberPaddingFramePacket) {
4619 QuicPacketHeader header; 3952 QuicPacketHeader header;
4620 header.public_header.connection_id = kConnectionId; 3953 header.public_header.connection_id = kConnectionId;
4621 header.public_header.reset_flag = false; 3954 header.public_header.reset_flag = false;
4622 header.public_header.version_flag = false; 3955 header.public_header.version_flag = false;
4623 header.fec_flag = false;
4624 header.entropy_flag = false; 3956 header.entropy_flag = false;
4625 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER; 3957 header.public_header.packet_number_length = PACKET_4BYTE_PACKET_NUMBER;
4626 header.packet_number = kPacketNumber; 3958 header.packet_number = kPacketNumber;
4627 3959
4628 QuicPaddingFrame padding_frame; 3960 QuicPaddingFrame padding_frame;
4629 3961
4630 QuicFrames frames; 3962 QuicFrames frames;
4631 frames.push_back(QuicFrame(padding_frame)); 3963 frames.push_back(QuicFrame(padding_frame));
4632 3964
4633 // clang-format off 3965 // clang-format off
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4678 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 4010 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
4679 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 4011 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
4680 : arraysize(packet_34)); 4012 : arraysize(packet_34));
4681 } 4013 }
4682 4014
4683 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) { 4015 TEST_P(QuicFramerTest, Build2ByteSequenceNumberPaddingFramePacket) {
4684 QuicPacketHeader header; 4016 QuicPacketHeader header;
4685 header.public_header.connection_id = kConnectionId; 4017 header.public_header.connection_id = kConnectionId;
4686 header.public_header.reset_flag = false; 4018 header.public_header.reset_flag = false;
4687 header.public_header.version_flag = false; 4019 header.public_header.version_flag = false;
4688 header.fec_flag = false;
4689 header.entropy_flag = false; 4020 header.entropy_flag = false;
4690 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER; 4021 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER;
4691 header.packet_number = kPacketNumber; 4022 header.packet_number = kPacketNumber;
4692 4023
4693 QuicPaddingFrame padding_frame; 4024 QuicPaddingFrame padding_frame;
4694 4025
4695 QuicFrames frames; 4026 QuicFrames frames;
4696 frames.push_back(QuicFrame(padding_frame)); 4027 frames.push_back(QuicFrame(padding_frame));
4697 4028
4698 // clang-format off 4029 // clang-format off
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4743 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 4074 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
4744 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 4075 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
4745 : arraysize(packet_34)); 4076 : arraysize(packet_34));
4746 } 4077 }
4747 4078
4748 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) { 4079 TEST_P(QuicFramerTest, Build1ByteSequenceNumberPaddingFramePacket) {
4749 QuicPacketHeader header; 4080 QuicPacketHeader header;
4750 header.public_header.connection_id = kConnectionId; 4081 header.public_header.connection_id = kConnectionId;
4751 header.public_header.reset_flag = false; 4082 header.public_header.reset_flag = false;
4752 header.public_header.version_flag = false; 4083 header.public_header.version_flag = false;
4753 header.fec_flag = false;
4754 header.entropy_flag = false; 4084 header.entropy_flag = false;
4755 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER; 4085 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER;
4756 header.packet_number = kPacketNumber; 4086 header.packet_number = kPacketNumber;
4757 4087
4758 QuicPaddingFrame padding_frame; 4088 QuicPaddingFrame padding_frame;
4759 4089
4760 QuicFrames frames; 4090 QuicFrames frames;
4761 frames.push_back(QuicFrame(padding_frame)); 4091 frames.push_back(QuicFrame(padding_frame));
4762 4092
4763 // clang-format off 4093 // clang-format off
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
4808 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 4138 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
4809 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 4139 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
4810 : arraysize(packet_34)); 4140 : arraysize(packet_34));
4811 } 4141 }
4812 4142
4813 TEST_P(QuicFramerTest, BuildStreamFramePacket) { 4143 TEST_P(QuicFramerTest, BuildStreamFramePacket) {
4814 QuicPacketHeader header; 4144 QuicPacketHeader header;
4815 header.public_header.connection_id = kConnectionId; 4145 header.public_header.connection_id = kConnectionId;
4816 header.public_header.reset_flag = false; 4146 header.public_header.reset_flag = false;
4817 header.public_header.version_flag = false; 4147 header.public_header.version_flag = false;
4818 header.fec_flag = false;
4819 header.entropy_flag = true; 4148 header.entropy_flag = true;
4820 header.packet_number = kPacketNumber; 4149 header.packet_number = kPacketNumber;
4821 4150
4822 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, 4151 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
4823 StringPiece("hello world!")); 4152 StringPiece("hello world!"));
4824 4153
4825 QuicFrames frames; 4154 QuicFrames frames;
4826 frames.push_back(QuicFrame(&stream_frame)); 4155 frames.push_back(QuicFrame(&stream_frame));
4827 4156
4828 // clang-format off 4157 // clang-format off
(...skipping 54 matching lines...) Expand 10 before | Expand all | Expand 10 after
4883 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 4212 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
4884 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 4213 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
4885 : arraysize(packet_34)); 4214 : arraysize(packet_34));
4886 } 4215 }
4887 4216
4888 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) { 4217 TEST_P(QuicFramerTest, BuildStreamFramePacketWithVersionFlag) {
4889 QuicPacketHeader header; 4218 QuicPacketHeader header;
4890 header.public_header.connection_id = kConnectionId; 4219 header.public_header.connection_id = kConnectionId;
4891 header.public_header.reset_flag = false; 4220 header.public_header.reset_flag = false;
4892 header.public_header.version_flag = true; 4221 header.public_header.version_flag = true;
4893 header.fec_flag = false;
4894 header.entropy_flag = true; 4222 header.entropy_flag = true;
4895 header.packet_number = kPacketNumber; 4223 header.packet_number = kPacketNumber;
4896 4224
4897 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, 4225 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
4898 StringPiece("hello world!")); 4226 StringPiece("hello world!"));
4899 4227
4900 QuicFrames frames; 4228 QuicFrames frames;
4901 frames.push_back(QuicFrame(&stream_frame)); 4229 frames.push_back(QuicFrame(&stream_frame));
4902 4230
4903 // clang-format off 4231 // clang-format off
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
4954 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 4282 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
4955 : arraysize(packet_34)); 4283 : arraysize(packet_34));
4956 } 4284 }
4957 4285
4958 TEST_P(QuicFramerTest, BuildStreamFramePacketWithMultipathFlag) { 4286 TEST_P(QuicFramerTest, BuildStreamFramePacketWithMultipathFlag) {
4959 QuicPacketHeader header; 4287 QuicPacketHeader header;
4960 header.public_header.connection_id = kConnectionId; 4288 header.public_header.connection_id = kConnectionId;
4961 header.public_header.multipath_flag = true; 4289 header.public_header.multipath_flag = true;
4962 header.public_header.reset_flag = false; 4290 header.public_header.reset_flag = false;
4963 header.public_header.version_flag = false; 4291 header.public_header.version_flag = false;
4964 header.fec_flag = false;
4965 header.entropy_flag = true; 4292 header.entropy_flag = true;
4966 header.path_id = kPathId; 4293 header.path_id = kPathId;
4967 header.packet_number = kPacketNumber; 4294 header.packet_number = kPacketNumber;
4968 4295
4969 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, 4296 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
4970 StringPiece("hello world!")); 4297 StringPiece("hello world!"));
4971 4298
4972 QuicFrames frames; 4299 QuicFrames frames;
4973 frames.push_back(QuicFrame(&stream_frame)); 4300 frames.push_back(QuicFrame(&stream_frame));
4974 4301
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
5035 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 4362 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
5036 : arraysize(packet_34)); 4363 : arraysize(packet_34));
5037 } 4364 }
5038 4365
5039 TEST_P(QuicFramerTest, BuildStreamFramePacketWithBothVersionAndMultipathFlag) { 4366 TEST_P(QuicFramerTest, BuildStreamFramePacketWithBothVersionAndMultipathFlag) {
5040 QuicPacketHeader header; 4367 QuicPacketHeader header;
5041 header.public_header.connection_id = kConnectionId; 4368 header.public_header.connection_id = kConnectionId;
5042 header.public_header.multipath_flag = true; 4369 header.public_header.multipath_flag = true;
5043 header.public_header.reset_flag = false; 4370 header.public_header.reset_flag = false;
5044 header.public_header.version_flag = true; 4371 header.public_header.version_flag = true;
5045 header.fec_flag = false;
5046 header.entropy_flag = true; 4372 header.entropy_flag = true;
5047 header.path_id = kPathId; 4373 header.path_id = kPathId;
5048 header.packet_number = kPacketNumber; 4374 header.packet_number = kPacketNumber;
5049 4375
5050 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset, 4376 QuicStreamFrame stream_frame(kStreamId, true, kStreamOffset,
5051 StringPiece("hello world!")); 4377 StringPiece("hello world!"));
5052 4378
5053 QuicFrames frames; 4379 QuicFrames frames;
5054 frames.push_back(QuicFrame(&stream_frame)); 4380 frames.push_back(QuicFrame(&stream_frame));
5055 4381
(...skipping 89 matching lines...) Expand 10 before | Expand all | Expand 10 after
5145 4471
5146 TEST_P(QuicFramerTest, BuildAckFramePacket) { 4472 TEST_P(QuicFramerTest, BuildAckFramePacket) {
5147 if (framer_.version() > QUIC_VERSION_33) { 4473 if (framer_.version() > QUIC_VERSION_33) {
5148 return; 4474 return;
5149 } 4475 }
5150 4476
5151 QuicPacketHeader header; 4477 QuicPacketHeader header;
5152 header.public_header.connection_id = kConnectionId; 4478 header.public_header.connection_id = kConnectionId;
5153 header.public_header.reset_flag = false; 4479 header.public_header.reset_flag = false;
5154 header.public_header.version_flag = false; 4480 header.public_header.version_flag = false;
5155 header.fec_flag = false;
5156 header.entropy_flag = true; 4481 header.entropy_flag = true;
5157 header.packet_number = kPacketNumber; 4482 header.packet_number = kPacketNumber;
5158 4483
5159 QuicAckFrame ack_frame; 4484 QuicAckFrame ack_frame;
5160 ack_frame.entropy_hash = 0x43; 4485 ack_frame.entropy_hash = 0x43;
5161 ack_frame.largest_observed = kLargestObserved; 4486 ack_frame.largest_observed = kLargestObserved;
5162 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 4487 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
5163 ack_frame.packets.Add(kMissingPacket); 4488 ack_frame.packets.Add(kMissingPacket);
5164 4489
5165 QuicFrames frames; 4490 QuicFrames frames;
5166 frames.push_back(QuicFrame(&ack_frame)); 4491 frames.push_back(QuicFrame(&ack_frame));
5167 4492
5168 // clang-format off 4493 // clang-format off
5169 unsigned char packet[] = { 4494 unsigned char packet[] = {
5170 // public flags (8 byte connection_id) 4495 // public flags (8 byte connection_id)
5171 0x3C,
5172 // connection_id
5173 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5174 // packet number
5175 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5176 // private flags (entropy)
5177 0x01,
5178
5179 // frame type (ack frame)
5180 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
5181 0x6C,
5182 // entropy hash of all received packets.
5183 0x43,
5184 // largest observed packet number
5185 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
5186 // Zero delta time.
5187 0x00, 0x00,
5188 // num received packets.
5189 0x00,
5190 // num missing packet ranges
5191 0x01,
5192 // missing packet delta
5193 0x01,
5194 // 0 more missing packets in range.
5195 0x00,
5196 // 0 revived packets.
5197 0x00,
5198 };
5199 // clang-format on
5200
5201 // clang-format off
5202 unsigned char packet_version32[] = {
5203 // public flags (8 byte connection_id)
5204 static_cast<unsigned char>( 4496 static_cast<unsigned char>(
5205 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 4497 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
5206 // connection_id 4498 // connection_id
5207 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 4499 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5208 // packet number 4500 // packet number
5209 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 4501 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5210 // private flags (entropy) 4502 // private flags (entropy)
5211 0x01, 4503 0x01,
5212 4504
5213 // frame type (ack frame) 4505 // frame type (ack frame)
(...skipping 12 matching lines...) Expand all
5226 // missing packet delta 4518 // missing packet delta
5227 0x01, 4519 0x01,
5228 // 0 more missing packets in range. 4520 // 0 more missing packets in range.
5229 0x00, 4521 0x00,
5230 }; 4522 };
5231 // clang-format on 4523 // clang-format on
5232 4524
5233 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 4525 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
5234 ASSERT_TRUE(data != nullptr); 4526 ASSERT_TRUE(data != nullptr);
5235 4527
5236 if (framer_.version() <= QUIC_VERSION_31) { 4528 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5237 test::CompareCharArraysWithHexError("constructed packet", data->data(), 4529 data->length(), AsChars(packet),
5238 data->length(), AsChars(packet), 4530 arraysize(packet));
5239 arraysize(packet));
5240 } else {
5241 test::CompareCharArraysWithHexError(
5242 "constructed packet", data->data(), data->length(),
5243 AsChars(packet_version32), arraysize(packet_version32));
5244 }
5245 } 4531 }
5246 4532
5247 // TODO(jri): Add test for tuncated packets in which the original ack frame had 4533 // TODO(jri): Add test for tuncated packets in which the original ack frame had
5248 // revived packets. (In both the large and small packet cases below). 4534 // revived packets. (In both the large and small packet cases below).
5249 4535
5250 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 4536 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
5251 if (framer_.version() > QUIC_VERSION_33) { 4537 if (framer_.version() > QUIC_VERSION_33) {
5252 return; 4538 return;
5253 } 4539 }
5254 4540
5255 QuicPacketHeader header; 4541 QuicPacketHeader header;
5256 header.public_header.connection_id = kConnectionId; 4542 header.public_header.connection_id = kConnectionId;
5257 header.public_header.reset_flag = false; 4543 header.public_header.reset_flag = false;
5258 header.public_header.version_flag = false; 4544 header.public_header.version_flag = false;
5259 header.fec_flag = false;
5260 header.entropy_flag = true; 4545 header.entropy_flag = true;
5261 header.packet_number = kPacketNumber; 4546 header.packet_number = kPacketNumber;
5262 4547
5263 QuicAckFrame ack_frame; 4548 QuicAckFrame ack_frame;
5264 // This entropy hash is different from what shows up in the packet below, 4549 // This entropy hash is different from what shows up in the packet below,
5265 // since entropy is recomputed by the framer on ack truncation (by 4550 // since entropy is recomputed by the framer on ack truncation (by
5266 // TestEntropyCalculator for this test.) 4551 // TestEntropyCalculator for this test.)
5267 ack_frame.entropy_hash = 0x43; 4552 ack_frame.entropy_hash = 0x43;
5268 ack_frame.largest_observed = 2 * 300; 4553 ack_frame.largest_observed = 2 * 300;
5269 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 4554 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
5270 for (size_t i = 1; i < 2 * 300; i += 2) { 4555 for (size_t i = 1; i < 2 * 300; i += 2) {
5271 ack_frame.packets.Add(i); 4556 ack_frame.packets.Add(i);
5272 } 4557 }
5273 4558
5274 QuicFrames frames; 4559 QuicFrames frames;
5275 frames.push_back(QuicFrame(&ack_frame)); 4560 frames.push_back(QuicFrame(&ack_frame));
5276 4561
5277 // clang-format off 4562 // clang-format off
5278 unsigned char packet[] = { 4563 unsigned char packet[] = {
5279 // public flags (8 byte connection_id) 4564 // public flags (8 byte connection_id)
5280 0x3C,
5281 // connection_id
5282 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5283 // packet number
5284 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5285 // private flags (entropy)
5286 0x01,
5287
5288 // frame type (ack frame)
5289 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
5290 0x74,
5291 // entropy hash of all received packets, set to 1 by TestEntropyCalculator
5292 // since ack is truncated.
5293 0x01,
5294 // 2-byte largest observed packet number.
5295 // Expected to be 510 (0x1FE), since only 255 nack ranges can fit.
5296 0xFE, 0x01,
5297 // Zero delta time.
5298 0x00, 0x00,
5299 // num missing packet ranges (limited to 255 by size of this field).
5300 0xFF,
5301 // {missing packet delta, further missing packets in range}
5302 // 6 nack ranges x 42 + 3 nack ranges
5303 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5304 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5305 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5306 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5307 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5308 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5309 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5310 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5311 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5312 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5313
5314 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5315 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5316 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5317 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5318 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5319 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5320 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5321 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5322 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5323 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5324
5325 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5326 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5327 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5328 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5329 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5330 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5331 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5332 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5333 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5334 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5335
5336 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5337 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5338 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5339 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5340 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5341 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5342 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5343 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5344 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5345 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5346
5347 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5348 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5349 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5350
5351 // 0 revived packets.
5352 0x00,
5353 };
5354 // clang-format on
5355
5356 // clang-format off
5357 unsigned char packet_version32[] = {
5358 // public flags (8 byte connection_id)
5359 static_cast<unsigned char>( 4565 static_cast<unsigned char>(
5360 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 4566 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
5361 // connection_id 4567 // connection_id
5362 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 4568 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5363 // packet number 4569 // packet number
5364 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 4570 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5365 // private flags (entropy) 4571 // private flags (entropy)
5366 0x01, 4572 0x01,
5367 4573
5368 // frame type (ack frame) 4574 // frame type (ack frame)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
5426 4632
5427 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4633 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5428 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4634 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5429 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4635 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5430 }; 4636 };
5431 // clang-format on 4637 // clang-format on
5432 4638
5433 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 4639 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
5434 ASSERT_TRUE(data != nullptr); 4640 ASSERT_TRUE(data != nullptr);
5435 4641
5436 if (framer_.version() <= QUIC_VERSION_31) { 4642 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5437 test::CompareCharArraysWithHexError("constructed packet", data->data(), 4643 data->length(), AsChars(packet),
5438 data->length(), AsChars(packet), 4644 arraysize(packet));
5439 arraysize(packet));
5440 } else {
5441 test::CompareCharArraysWithHexError(
5442 "constructed packet", data->data(), data->length(),
5443 AsChars(packet_version32), arraysize(packet_version32));
5444 }
5445 } 4645 }
5446 4646
5447 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 4647 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
5448 if (framer_.version() > QUIC_VERSION_33) { 4648 if (framer_.version() > QUIC_VERSION_33) {
5449 return; 4649 return;
5450 } 4650 }
5451 4651
5452 QuicPacketHeader header; 4652 QuicPacketHeader header;
5453 header.public_header.connection_id = kConnectionId; 4653 header.public_header.connection_id = kConnectionId;
5454 header.public_header.reset_flag = false; 4654 header.public_header.reset_flag = false;
5455 header.public_header.version_flag = false; 4655 header.public_header.version_flag = false;
5456 header.fec_flag = false;
5457 header.entropy_flag = true; 4656 header.entropy_flag = true;
5458 header.packet_number = kPacketNumber; 4657 header.packet_number = kPacketNumber;
5459 4658
5460 QuicAckFrame ack_frame; 4659 QuicAckFrame ack_frame;
5461 // This entropy hash is different from what shows up in the packet below, 4660 // This entropy hash is different from what shows up in the packet below,
5462 // since entropy is recomputed by the framer on ack truncation (by 4661 // since entropy is recomputed by the framer on ack truncation (by
5463 // TestEntropyCalculator for this test.) 4662 // TestEntropyCalculator for this test.)
5464 ack_frame.entropy_hash = 0x43; 4663 ack_frame.entropy_hash = 0x43;
5465 ack_frame.largest_observed = 2 * 300; 4664 ack_frame.largest_observed = 2 * 300;
5466 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 4665 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
5467 for (size_t i = 1; i < 2 * 300; i += 2) { 4666 for (size_t i = 1; i < 2 * 300; i += 2) {
5468 ack_frame.packets.Add(i); 4667 ack_frame.packets.Add(i);
5469 } 4668 }
5470 4669
5471 QuicFrames frames; 4670 QuicFrames frames;
5472 frames.push_back(QuicFrame(&ack_frame)); 4671 frames.push_back(QuicFrame(&ack_frame));
5473 4672
5474 // clang-format off 4673 // clang-format off
5475 unsigned char packet[] = { 4674 unsigned char packet[] = {
5476 // public flags (8 byte connection_id) 4675 // public flags (8 byte connection_id)
5477 0x3C,
5478 // connection_id
5479 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5480 // packet number
5481 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5482 // private flags (entropy)
5483 0x01,
5484
5485 // frame type (ack frame)
5486 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
5487 0x74,
5488 // entropy hash of all received packets, set to 1 by TestEntropyCalculator
5489 // since ack is truncated.
5490 0x01,
5491 // 2-byte largest observed packet number.
5492 // Expected to be 12 (0x0C), since only 6 nack ranges can fit.
5493 0x0C, 0x00,
5494 // Zero delta time.
5495 0x00, 0x00,
5496 // num missing packet ranges (limited to 6 by packet size of 37).
5497 0x06,
5498 // {missing packet delta, further missing packets in range}
5499 // 6 nack ranges
5500 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5501 // 0 revived packets.
5502 0x00,
5503 };
5504 // clang-format on
5505
5506 // clang-format off
5507 unsigned char packet_version32[] = {
5508 // public flags (8 byte connection_id)
5509 static_cast<unsigned char>( 4676 static_cast<unsigned char>(
5510 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 4677 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
5511 // connection_id 4678 // connection_id
5512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 4679 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5513 // packet number 4680 // packet number
5514 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 4681 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5515 // private flags (entropy) 4682 // private flags (entropy)
5516 0x01, 4683 0x01,
5517 4684
5518 // frame type (ack frame) 4685 // frame type (ack frame)
5519 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) 4686 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
5520 0x74, 4687 0x74,
5521 // entropy hash of all received packets, set to 1 by TestEntropyCalculator 4688 // entropy hash of all received packets, set to 1 by TestEntropyCalculator
5522 // since ack is truncated. 4689 // since ack is truncated.
5523 0x01, 4690 0x01,
5524 // 2-byte largest observed packet number. 4691 // 2-byte largest observed packet number.
5525 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. 4692 // Expected to be 12 (0x0C), since only 6 nack ranges can fit.
5526 0x0C, 0x00, 4693 0x0C, 0x00,
5527 // Zero delta time. 4694 // Zero delta time.
5528 0x00, 0x00, 4695 0x00, 0x00,
5529 // num missing packet ranges (limited to 6 by packet size of 37). 4696 // num missing packet ranges (limited to 6 by packet size of 37).
5530 0x06, 4697 0x06,
5531 // {missing packet delta, further missing packets in range} 4698 // {missing packet delta, further missing packets in range}
5532 // 6 nack ranges 4699 // 6 nack ranges
5533 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4700 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5534 }; 4701 };
5535 // clang-format on 4702 // clang-format on
5536 4703
5537 if (framer_.version() <= QUIC_VERSION_31) { 4704 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 36u));
5538 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); 4705 ASSERT_TRUE(data != nullptr);
5539 ASSERT_TRUE(data != nullptr); 4706 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
5540 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks. 4707 EXPECT_EQ(35u, data->length());
5541 EXPECT_EQ(36u, data->length()); 4708 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5542 test::CompareCharArraysWithHexError("constructed packet", data->data(), 4709 data->length(), AsChars(packet),
5543 data->length(), AsChars(packet), 4710 arraysize(packet));
5544 arraysize(packet));
5545 } else {
5546 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 36u));
5547 ASSERT_TRUE(data != nullptr);
5548 // Expect 1 byte unused since at least 2 bytes are needed to fit more nacks.
5549 EXPECT_EQ(35u, data->length());
5550 test::CompareCharArraysWithHexError(
5551 "constructed packet", data->data(), data->length(),
5552 AsChars(packet_version32), arraysize(packet_version32));
5553 }
5554 } 4711 }
5555 4712
5556 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { 4713 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) {
5557 if (framer_.version() <= QUIC_VERSION_33) { 4714 if (framer_.version() <= QUIC_VERSION_33) {
5558 return; 4715 return;
5559 } 4716 }
5560 4717
5561 QuicPacketHeader header; 4718 QuicPacketHeader header;
5562 header.public_header.connection_id = kConnectionId; 4719 header.public_header.connection_id = kConnectionId;
5563 header.public_header.reset_flag = false; 4720 header.public_header.reset_flag = false;
(...skipping 242 matching lines...) Expand 10 before | Expand all | Expand 10 after
5806 } 4963 }
5807 4964
5808 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 4965 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
5809 if (framer_.version() > QUIC_VERSION_33) { 4966 if (framer_.version() > QUIC_VERSION_33) {
5810 return; 4967 return;
5811 } 4968 }
5812 QuicPacketHeader header; 4969 QuicPacketHeader header;
5813 header.public_header.connection_id = kConnectionId; 4970 header.public_header.connection_id = kConnectionId;
5814 header.public_header.reset_flag = false; 4971 header.public_header.reset_flag = false;
5815 header.public_header.version_flag = false; 4972 header.public_header.version_flag = false;
5816 header.fec_flag = false;
5817 header.entropy_flag = true; 4973 header.entropy_flag = true;
5818 header.packet_number = kPacketNumber; 4974 header.packet_number = kPacketNumber;
5819 4975
5820 QuicStopWaitingFrame stop_waiting_frame; 4976 QuicStopWaitingFrame stop_waiting_frame;
5821 stop_waiting_frame.entropy_hash = 0x14; 4977 stop_waiting_frame.entropy_hash = 0x14;
5822 stop_waiting_frame.least_unacked = kLeastUnacked; 4978 stop_waiting_frame.least_unacked = kLeastUnacked;
5823 4979
5824 QuicFrames frames; 4980 QuicFrames frames;
5825 frames.push_back(QuicFrame(&stop_waiting_frame)); 4981 frames.push_back(QuicFrame(&stop_waiting_frame));
5826 4982
(...skipping 29 matching lines...) Expand all
5856 } 5012 }
5857 5013
5858 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) { 5014 TEST_P(QuicFramerTest, BuildNewStopWaitingPacket) {
5859 if (framer_.version() <= QUIC_VERSION_33) { 5015 if (framer_.version() <= QUIC_VERSION_33) {
5860 return; 5016 return;
5861 } 5017 }
5862 QuicPacketHeader header; 5018 QuicPacketHeader header;
5863 header.public_header.connection_id = kConnectionId; 5019 header.public_header.connection_id = kConnectionId;
5864 header.public_header.reset_flag = false; 5020 header.public_header.reset_flag = false;
5865 header.public_header.version_flag = false; 5021 header.public_header.version_flag = false;
5866 header.fec_flag = false;
5867 header.entropy_flag = false; 5022 header.entropy_flag = false;
5868 header.packet_number = kPacketNumber; 5023 header.packet_number = kPacketNumber;
5869 5024
5870 QuicStopWaitingFrame stop_waiting_frame; 5025 QuicStopWaitingFrame stop_waiting_frame;
5871 stop_waiting_frame.least_unacked = kLeastUnacked; 5026 stop_waiting_frame.least_unacked = kLeastUnacked;
5872 5027
5873 QuicFrames frames; 5028 QuicFrames frames;
5874 frames.push_back(QuicFrame(&stop_waiting_frame)); 5029 frames.push_back(QuicFrame(&stop_waiting_frame));
5875 5030
5876 // clang-format off 5031 // clang-format off
(...skipping 20 matching lines...) Expand all
5897 test::CompareCharArraysWithHexError("constructed packet", data->data(), 5052 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5898 data->length(), AsChars(packet), 5053 data->length(), AsChars(packet),
5899 arraysize(packet)); 5054 arraysize(packet));
5900 } 5055 }
5901 5056
5902 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) { 5057 TEST_P(QuicFramerTest, BuildRstFramePacketQuic) {
5903 QuicPacketHeader header; 5058 QuicPacketHeader header;
5904 header.public_header.connection_id = kConnectionId; 5059 header.public_header.connection_id = kConnectionId;
5905 header.public_header.reset_flag = false; 5060 header.public_header.reset_flag = false;
5906 header.public_header.version_flag = false; 5061 header.public_header.version_flag = false;
5907 header.fec_flag = false;
5908 header.entropy_flag = false; 5062 header.entropy_flag = false;
5909 header.packet_number = kPacketNumber; 5063 header.packet_number = kPacketNumber;
5910 5064
5911 QuicRstStreamFrame rst_frame; 5065 QuicRstStreamFrame rst_frame;
5912 rst_frame.stream_id = kStreamId; 5066 rst_frame.stream_id = kStreamId;
5913 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708); 5067 rst_frame.error_code = static_cast<QuicRstStreamErrorCode>(0x05060708);
5914 rst_frame.byte_offset = 0x0807060504030201; 5068 rst_frame.byte_offset = 0x0807060504030201;
5915 5069
5916 // clang-format off 5070 // clang-format off
5917 unsigned char packet[] = { 5071 unsigned char packet[] = {
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
5970 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 5124 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
5971 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5125 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
5972 : arraysize(packet_34)); 5126 : arraysize(packet_34));
5973 } 5127 }
5974 5128
5975 TEST_P(QuicFramerTest, BuildCloseFramePacket) { 5129 TEST_P(QuicFramerTest, BuildCloseFramePacket) {
5976 QuicPacketHeader header; 5130 QuicPacketHeader header;
5977 header.public_header.connection_id = kConnectionId; 5131 header.public_header.connection_id = kConnectionId;
5978 header.public_header.reset_flag = false; 5132 header.public_header.reset_flag = false;
5979 header.public_header.version_flag = false; 5133 header.public_header.version_flag = false;
5980 header.fec_flag = false;
5981 header.entropy_flag = true; 5134 header.entropy_flag = true;
5982 header.packet_number = kPacketNumber; 5135 header.packet_number = kPacketNumber;
5983 5136
5984 QuicConnectionCloseFrame close_frame; 5137 QuicConnectionCloseFrame close_frame;
5985 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 5138 close_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
5986 close_frame.error_details = "because I can"; 5139 close_frame.error_details = "because I can";
5987 5140
5988 QuicFrames frames; 5141 QuicFrames frames;
5989 frames.push_back(QuicFrame(&close_frame)); 5142 frames.push_back(QuicFrame(&close_frame));
5990 5143
(...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after
6047 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 5200 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
6048 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5201 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
6049 : arraysize(packet_34)); 5202 : arraysize(packet_34));
6050 } 5203 }
6051 5204
6052 TEST_P(QuicFramerTest, BuildGoAwayPacket) { 5205 TEST_P(QuicFramerTest, BuildGoAwayPacket) {
6053 QuicPacketHeader header; 5206 QuicPacketHeader header;
6054 header.public_header.connection_id = kConnectionId; 5207 header.public_header.connection_id = kConnectionId;
6055 header.public_header.reset_flag = false; 5208 header.public_header.reset_flag = false;
6056 header.public_header.version_flag = false; 5209 header.public_header.version_flag = false;
6057 header.fec_flag = false;
6058 header.entropy_flag = true; 5210 header.entropy_flag = true;
6059 header.packet_number = kPacketNumber; 5211 header.packet_number = kPacketNumber;
6060 5212
6061 QuicGoAwayFrame goaway_frame; 5213 QuicGoAwayFrame goaway_frame;
6062 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708); 5214 goaway_frame.error_code = static_cast<QuicErrorCode>(0x05060708);
6063 goaway_frame.last_good_stream_id = kStreamId; 5215 goaway_frame.last_good_stream_id = kStreamId;
6064 goaway_frame.reason_phrase = "because I can"; 5216 goaway_frame.reason_phrase = "because I can";
6065 5217
6066 QuicFrames frames; 5218 QuicFrames frames;
6067 frames.push_back(QuicFrame(&goaway_frame)); 5219 frames.push_back(QuicFrame(&goaway_frame));
(...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after
6128 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 5280 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
6129 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5281 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
6130 : arraysize(packet_34)); 5282 : arraysize(packet_34));
6131 } 5283 }
6132 5284
6133 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) { 5285 TEST_P(QuicFramerTest, BuildWindowUpdatePacket) {
6134 QuicPacketHeader header; 5286 QuicPacketHeader header;
6135 header.public_header.connection_id = kConnectionId; 5287 header.public_header.connection_id = kConnectionId;
6136 header.public_header.reset_flag = false; 5288 header.public_header.reset_flag = false;
6137 header.public_header.version_flag = false; 5289 header.public_header.version_flag = false;
6138 header.fec_flag = false;
6139 header.entropy_flag = true; 5290 header.entropy_flag = true;
6140 header.packet_number = kPacketNumber; 5291 header.packet_number = kPacketNumber;
6141 5292
6142 QuicWindowUpdateFrame window_update_frame; 5293 QuicWindowUpdateFrame window_update_frame;
6143 window_update_frame.stream_id = kStreamId; 5294 window_update_frame.stream_id = kStreamId;
6144 window_update_frame.byte_offset = 0x1122334455667788; 5295 window_update_frame.byte_offset = 0x1122334455667788;
6145 5296
6146 QuicFrames frames; 5297 QuicFrames frames;
6147 frames.push_back(QuicFrame(&window_update_frame)); 5298 frames.push_back(QuicFrame(&window_update_frame));
6148 5299
(...skipping 47 matching lines...) Expand 10 before | Expand all | Expand 10 after
6196 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 5347 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
6197 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5348 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
6198 : arraysize(packet_34)); 5349 : arraysize(packet_34));
6199 } 5350 }
6200 5351
6201 TEST_P(QuicFramerTest, BuildBlockedPacket) { 5352 TEST_P(QuicFramerTest, BuildBlockedPacket) {
6202 QuicPacketHeader header; 5353 QuicPacketHeader header;
6203 header.public_header.connection_id = kConnectionId; 5354 header.public_header.connection_id = kConnectionId;
6204 header.public_header.reset_flag = false; 5355 header.public_header.reset_flag = false;
6205 header.public_header.version_flag = false; 5356 header.public_header.version_flag = false;
6206 header.fec_flag = false;
6207 header.entropy_flag = true; 5357 header.entropy_flag = true;
6208 header.packet_number = kPacketNumber; 5358 header.packet_number = kPacketNumber;
6209 5359
6210 QuicBlockedFrame blocked_frame; 5360 QuicBlockedFrame blocked_frame;
6211 blocked_frame.stream_id = kStreamId; 5361 blocked_frame.stream_id = kStreamId;
6212 5362
6213 QuicFrames frames; 5363 QuicFrames frames;
6214 frames.push_back(QuicFrame(&blocked_frame)); 5364 frames.push_back(QuicFrame(&blocked_frame));
6215 5365
6216 // clang-format off 5366 // clang-format off
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
6257 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34), 5407 AsChars(framer_.version() <= QUIC_VERSION_33 ? packet : packet_34),
6258 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5408 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
6259 : arraysize(packet_34)); 5409 : arraysize(packet_34));
6260 } 5410 }
6261 5411
6262 TEST_P(QuicFramerTest, BuildPingPacket) { 5412 TEST_P(QuicFramerTest, BuildPingPacket) {
6263 QuicPacketHeader header; 5413 QuicPacketHeader header;
6264 header.public_header.connection_id = kConnectionId; 5414 header.public_header.connection_id = kConnectionId;
6265 header.public_header.reset_flag = false; 5415 header.public_header.reset_flag = false;
6266 header.public_header.version_flag = false; 5416 header.public_header.version_flag = false;
6267 header.fec_flag = false;
6268 header.entropy_flag = true; 5417 header.entropy_flag = true;
6269 header.packet_number = kPacketNumber; 5418 header.packet_number = kPacketNumber;
6270 5419
6271 QuicPingFrame ping_frame; 5420 QuicPingFrame ping_frame;
6272 5421
6273 QuicFrames frames; 5422 QuicFrames frames;
6274 frames.push_back(QuicFrame(ping_frame)); 5423 frames.push_back(QuicFrame(ping_frame));
6275 5424
6276 // clang-format off 5425 // clang-format off
6277 unsigned char packet[] = { 5426 unsigned char packet[] = {
(...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
6315 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5464 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
6316 : arraysize(packet_34)); 5465 : arraysize(packet_34));
6317 } 5466 }
6318 5467
6319 TEST_P(QuicFramerTest, BuildPathClosePacket) { 5468 TEST_P(QuicFramerTest, BuildPathClosePacket) {
6320 QuicPacketHeader header; 5469 QuicPacketHeader header;
6321 header.public_header.connection_id = kConnectionId; 5470 header.public_header.connection_id = kConnectionId;
6322 header.public_header.multipath_flag = true; 5471 header.public_header.multipath_flag = true;
6323 header.public_header.reset_flag = false; 5472 header.public_header.reset_flag = false;
6324 header.public_header.version_flag = false; 5473 header.public_header.version_flag = false;
6325 header.fec_flag = false;
6326 header.entropy_flag = true; 5474 header.entropy_flag = true;
6327 header.path_id = kDefaultPathId; 5475 header.path_id = kDefaultPathId;
6328 header.packet_number = kPacketNumber; 5476 header.packet_number = kPacketNumber;
6329 5477
6330 QuicPathCloseFrame path_close; 5478 QuicPathCloseFrame path_close;
6331 path_close.path_id = kPathId; 5479 path_close.path_id = kPathId;
6332 QuicFrames frames; 5480 QuicFrames frames;
6333 frames.push_back(QuicFrame(&path_close)); 5481 frames.push_back(QuicFrame(&path_close));
6334 5482
6335 // clang-format off 5483 // clang-format off
(...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after
6378 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 5526 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
6379 : arraysize(packet_34)); 5527 : arraysize(packet_34));
6380 } 5528 }
6381 5529
6382 // Test that the MTU discovery packet is serialized correctly as a PING packet. 5530 // Test that the MTU discovery packet is serialized correctly as a PING packet.
6383 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) { 5531 TEST_P(QuicFramerTest, BuildMtuDiscoveryPacket) {
6384 QuicPacketHeader header; 5532 QuicPacketHeader header;
6385 header.public_header.connection_id = kConnectionId; 5533 header.public_header.connection_id = kConnectionId;
6386 header.public_header.reset_flag = false; 5534 header.public_header.reset_flag = false;
6387 header.public_header.version_flag = false; 5535 header.public_header.version_flag = false;
6388 header.fec_flag = false;
6389 header.entropy_flag = true; 5536 header.entropy_flag = true;
6390 header.packet_number = kPacketNumber; 5537 header.packet_number = kPacketNumber;
6391 5538
6392 QuicMtuDiscoveryFrame mtu_discovery_frame; 5539 QuicMtuDiscoveryFrame mtu_discovery_frame;
6393 5540
6394 QuicFrames frames; 5541 QuicFrames frames;
6395 frames.push_back(QuicFrame(mtu_discovery_frame)); 5542 frames.push_back(QuicFrame(mtu_discovery_frame));
6396 5543
6397 // clang-format off 5544 // clang-format off
6398 unsigned char packet[] = { 5545 unsigned char packet[] = {
(...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after
6465 'R', 'S', 'E', 'Q', 5612 'R', 'S', 'E', 'Q',
6466 // end offset 16 5613 // end offset 16
6467 0x10, 0x00, 0x00, 0x00, 5614 0x10, 0x00, 0x00, 0x00,
6468 // nonce proof 5615 // nonce proof
6469 0x89, 0x67, 0x45, 0x23, 5616 0x89, 0x67, 0x45, 0x23,
6470 0x01, 0xEF, 0xCD, 0xAB, 5617 0x01, 0xEF, 0xCD, 0xAB,
6471 // rejected packet number 5618 // rejected packet number
6472 0xBC, 0x9A, 0x78, 0x56, 5619 0xBC, 0x9A, 0x78, 0x56,
6473 0x34, 0x12, 0x00, 0x00, 5620 0x34, 0x12, 0x00, 0x00,
6474 }; 5621 };
5622 unsigned char packet_no_rejected_packet_number[] = {
5623 // public flags (public reset, 8 byte ConnectionId)
5624 0x0E,
5625 // connection_id
5626 0x10, 0x32, 0x54, 0x76,
5627 0x98, 0xBA, 0xDC, 0xFE,
5628 // message tag (kPRST)
5629 'P', 'R', 'S', 'T',
5630 // num_entries (1) + padding
5631 0x01, 0x00, 0x00, 0x00,
5632 // tag kRNON
5633 'R', 'N', 'O', 'N',
5634 // end offset 8
5635 0x08, 0x00, 0x00, 0x00,
5636 // nonce proof
5637 0x89, 0x67, 0x45, 0x23,
5638 0x01, 0xEF, 0xCD, 0xAB,
5639 };
6475 // clang-format on 5640 // clang-format on
6476 5641
6477 std::unique_ptr<QuicEncryptedPacket> data( 5642 std::unique_ptr<QuicEncryptedPacket> data(
6478 framer_.BuildPublicResetPacket(reset_packet)); 5643 framer_.BuildPublicResetPacket(reset_packet));
6479 ASSERT_TRUE(data != nullptr); 5644 ASSERT_TRUE(data != nullptr);
6480 5645 if (FLAGS_quic_remove_packet_number_from_public_reset) {
6481 test::CompareCharArraysWithHexError("constructed packet", data->data(), 5646 test::CompareCharArraysWithHexError(
6482 data->length(), AsChars(packet), 5647 "constructed packet", data->data(), data->length(),
6483 arraysize(packet)); 5648 AsChars(packet_no_rejected_packet_number),
5649 arraysize(packet_no_rejected_packet_number));
5650 } else {
5651 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5652 data->length(), AsChars(packet),
5653 arraysize(packet));
5654 }
6484 } 5655 }
6485 5656
6486 TEST_P(QuicFramerTest, BuildPublicResetPacket) { 5657 TEST_P(QuicFramerTest, BuildPublicResetPacket) {
6487 FLAGS_quic_use_old_public_reset_packets = false; 5658 FLAGS_quic_use_old_public_reset_packets = false;
6488 QuicPublicResetPacket reset_packet; 5659 QuicPublicResetPacket reset_packet;
6489 reset_packet.public_header.connection_id = kConnectionId; 5660 reset_packet.public_header.connection_id = kConnectionId;
6490 reset_packet.public_header.reset_flag = true; 5661 reset_packet.public_header.reset_flag = true;
6491 reset_packet.public_header.version_flag = false; 5662 reset_packet.public_header.version_flag = false;
6492 reset_packet.rejected_packet_number = kPacketNumber; 5663 reset_packet.rejected_packet_number = kPacketNumber;
6493 reset_packet.nonce_proof = kNonceProof; 5664 reset_packet.nonce_proof = kNonceProof;
(...skipping 17 matching lines...) Expand all
6511 'R', 'S', 'E', 'Q', 5682 'R', 'S', 'E', 'Q',
6512 // end offset 16 5683 // end offset 16
6513 0x10, 0x00, 0x00, 0x00, 5684 0x10, 0x00, 0x00, 0x00,
6514 // nonce proof 5685 // nonce proof
6515 0x89, 0x67, 0x45, 0x23, 5686 0x89, 0x67, 0x45, 0x23,
6516 0x01, 0xEF, 0xCD, 0xAB, 5687 0x01, 0xEF, 0xCD, 0xAB,
6517 // rejected packet number 5688 // rejected packet number
6518 0xBC, 0x9A, 0x78, 0x56, 5689 0xBC, 0x9A, 0x78, 0x56,
6519 0x34, 0x12, 0x00, 0x00, 5690 0x34, 0x12, 0x00, 0x00,
6520 }; 5691 };
5692 unsigned char packet_no_rejected_packet_number[] = {
5693 // public flags (public reset, 8 byte ConnectionId)
5694 0x0A,
5695 // connection_id
5696 0x10, 0x32, 0x54, 0x76,
5697 0x98, 0xBA, 0xDC, 0xFE,
5698 // message tag (kPRST)
5699 'P', 'R', 'S', 'T',
5700 // num_entries (1) + padding
5701 0x01, 0x00, 0x00, 0x00,
5702 // tag kRNON
5703 'R', 'N', 'O', 'N',
5704 // end offset 8
5705 0x08, 0x00, 0x00, 0x00,
5706 // nonce proof
5707 0x89, 0x67, 0x45, 0x23,
5708 0x01, 0xEF, 0xCD, 0xAB,
5709 };
6521 // clang-format on 5710 // clang-format on
6522 5711
6523 std::unique_ptr<QuicEncryptedPacket> data( 5712 std::unique_ptr<QuicEncryptedPacket> data(
6524 framer_.BuildPublicResetPacket(reset_packet)); 5713 framer_.BuildPublicResetPacket(reset_packet));
6525 ASSERT_TRUE(data != nullptr); 5714 ASSERT_TRUE(data != nullptr);
6526 5715
6527 test::CompareCharArraysWithHexError("constructed packet", data->data(), 5716 if (FLAGS_quic_remove_packet_number_from_public_reset) {
6528 data->length(), AsChars(packet), 5717 test::CompareCharArraysWithHexError(
6529 arraysize(packet)); 5718 "constructed packet", data->data(), data->length(),
5719 AsChars(packet_no_rejected_packet_number),
5720 arraysize(packet_no_rejected_packet_number));
5721 } else {
5722 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5723 data->length(), AsChars(packet),
5724 arraysize(packet));
5725 }
6530 } 5726 }
6531 5727
6532 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) { 5728 TEST_P(QuicFramerTest, BuildPublicResetPacketWithClientAddress) {
6533 FLAGS_quic_use_old_public_reset_packets = false; 5729 FLAGS_quic_use_old_public_reset_packets = false;
6534 QuicPublicResetPacket reset_packet; 5730 QuicPublicResetPacket reset_packet;
6535 reset_packet.public_header.connection_id = kConnectionId; 5731 reset_packet.public_header.connection_id = kConnectionId;
6536 reset_packet.public_header.reset_flag = true; 5732 reset_packet.public_header.reset_flag = true;
6537 reset_packet.public_header.version_flag = false; 5733 reset_packet.public_header.version_flag = false;
6538 reset_packet.rejected_packet_number = kPacketNumber; 5734 reset_packet.rejected_packet_number = kPacketNumber;
6539 reset_packet.nonce_proof = kNonceProof; 5735 reset_packet.nonce_proof = kNonceProof;
(...skipping 26 matching lines...) Expand all
6566 0x89, 0x67, 0x45, 0x23, 5762 0x89, 0x67, 0x45, 0x23,
6567 0x01, 0xEF, 0xCD, 0xAB, 5763 0x01, 0xEF, 0xCD, 0xAB,
6568 // rejected packet number 5764 // rejected packet number
6569 0xBC, 0x9A, 0x78, 0x56, 5765 0xBC, 0x9A, 0x78, 0x56,
6570 0x34, 0x12, 0x00, 0x00, 5766 0x34, 0x12, 0x00, 0x00,
6571 // client address 5767 // client address
6572 0x02, 0x00, 5768 0x02, 0x00,
6573 0x7F, 0x00, 0x00, 0x01, 5769 0x7F, 0x00, 0x00, 0x01,
6574 0x34, 0x12, 5770 0x34, 0x12,
6575 }; 5771 };
5772 unsigned char packet_no_rejected_packet_number[] = {
5773 // public flags (public reset, 8 byte ConnectionId)
5774 0x0A,
5775 // connection_id
5776 0x10, 0x32, 0x54, 0x76,
5777 0x98, 0xBA, 0xDC, 0xFE,
5778 // message tag (kPRST)
5779 'P', 'R', 'S', 'T',
5780 // num_entries (2) + padding
5781 0x02, 0x00, 0x00, 0x00,
5782 // tag kRNON
5783 'R', 'N', 'O', 'N',
5784 // end offset 8
5785 0x08, 0x00, 0x00, 0x00,
5786 // tag kCADR
5787 'C', 'A', 'D', 'R',
5788 // end offset 16
5789 0x10, 0x00, 0x00, 0x00,
5790 // nonce proof
5791 0x89, 0x67, 0x45, 0x23,
5792 0x01, 0xEF, 0xCD, 0xAB,
5793 // client address
5794 0x02, 0x00,
5795 0x7F, 0x00, 0x00, 0x01,
5796 0x34, 0x12,
5797 };
6576 // clang-format on 5798 // clang-format on
6577 5799
6578 std::unique_ptr<QuicEncryptedPacket> data( 5800 std::unique_ptr<QuicEncryptedPacket> data(
6579 framer_.BuildPublicResetPacket(reset_packet)); 5801 framer_.BuildPublicResetPacket(reset_packet));
6580 ASSERT_TRUE(data != nullptr); 5802 ASSERT_TRUE(data != nullptr);
6581 5803
6582 test::CompareCharArraysWithHexError("constructed packet", data->data(), 5804 if (FLAGS_quic_remove_packet_number_from_public_reset) {
6583 data->length(), AsChars(packet), 5805 test::CompareCharArraysWithHexError(
6584 arraysize(packet)); 5806 "constructed packet", data->data(), data->length(),
5807 AsChars(packet_no_rejected_packet_number),
5808 arraysize(packet_no_rejected_packet_number));
5809 } else {
5810 test::CompareCharArraysWithHexError("constructed packet", data->data(),
5811 data->length(), AsChars(packet),
5812 arraysize(packet));
5813 }
6585 } 5814 }
6586 5815
6587 TEST_P(QuicFramerTest, EncryptPacket) { 5816 TEST_P(QuicFramerTest, EncryptPacket) {
6588 QuicPacketNumber packet_number = kPacketNumber; 5817 QuicPacketNumber packet_number = kPacketNumber;
6589 // clang-format off 5818 // clang-format off
6590 unsigned char packet[] = { 5819 unsigned char packet[] = {
6591 // public flags (8 byte connection_id) 5820 // public flags (8 byte connection_id)
6592 static_cast<unsigned char>( 5821 static_cast<unsigned char>(
6593 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 5822 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
6594 // connection_id 5823 // connection_id
(...skipping 219 matching lines...) Expand 10 before | Expand all | Expand 10 after
6814 6043
6815 ASSERT_NE(0u, encrypted_length); 6044 ASSERT_NE(0u, encrypted_length);
6816 EXPECT_TRUE(CheckEncryption(kPathId, packet_number, raw.get())); 6045 EXPECT_TRUE(CheckEncryption(kPathId, packet_number, raw.get()));
6817 } 6046 }
6818 6047
6819 TEST_P(QuicFramerTest, AckTruncationLargePacket) { 6048 TEST_P(QuicFramerTest, AckTruncationLargePacket) {
6820 QuicPacketHeader header; 6049 QuicPacketHeader header;
6821 header.public_header.connection_id = kConnectionId; 6050 header.public_header.connection_id = kConnectionId;
6822 header.public_header.reset_flag = false; 6051 header.public_header.reset_flag = false;
6823 header.public_header.version_flag = false; 6052 header.public_header.version_flag = false;
6824 header.fec_flag = false;
6825 header.entropy_flag = false; 6053 header.entropy_flag = false;
6826 header.packet_number = kPacketNumber; 6054 header.packet_number = kPacketNumber;
6827 6055
6828 QuicAckFrame ack_frame; 6056 QuicAckFrame ack_frame;
6829 // Create a packet with just the ack. 6057 // Create a packet with just the ack.
6830 if (framer_.version() <= QUIC_VERSION_33) { 6058 if (framer_.version() <= QUIC_VERSION_33) {
6831 ack_frame = MakeAckFrameWithNackRanges(300, 0u); 6059 ack_frame = MakeAckFrameWithNackRanges(300, 0u);
6832 } else { 6060 } else {
6833 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); 6061 ack_frame = MakeAckFrameWithAckBlocks(300, 0u);
6834 } 6062 }
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
6866 EXPECT_EQ(90u, processed_ack_frame.packets.Min()); 6094 EXPECT_EQ(90u, processed_ack_frame.packets.Min());
6867 EXPECT_EQ(600u, processed_ack_frame.packets.Max()); 6095 EXPECT_EQ(600u, processed_ack_frame.packets.Max());
6868 } 6096 }
6869 } 6097 }
6870 6098
6871 TEST_P(QuicFramerTest, AckTruncationSmallPacket) { 6099 TEST_P(QuicFramerTest, AckTruncationSmallPacket) {
6872 QuicPacketHeader header; 6100 QuicPacketHeader header;
6873 header.public_header.connection_id = kConnectionId; 6101 header.public_header.connection_id = kConnectionId;
6874 header.public_header.reset_flag = false; 6102 header.public_header.reset_flag = false;
6875 header.public_header.version_flag = false; 6103 header.public_header.version_flag = false;
6876 header.fec_flag = false;
6877 header.entropy_flag = false; 6104 header.entropy_flag = false;
6878 header.packet_number = kPacketNumber; 6105 header.packet_number = kPacketNumber;
6879 6106
6880 // Create a packet with just the ack. 6107 // Create a packet with just the ack.
6881 QuicAckFrame ack_frame; 6108 QuicAckFrame ack_frame;
6882 if (framer_.version() <= QUIC_VERSION_33) { 6109 if (framer_.version() <= QUIC_VERSION_33) {
6883 ack_frame = MakeAckFrameWithNackRanges(300, 0u); 6110 ack_frame = MakeAckFrameWithNackRanges(300, 0u);
6884 } else { 6111 } else {
6885 ack_frame = MakeAckFrameWithAckBlocks(300, 0u); 6112 ack_frame = MakeAckFrameWithAckBlocks(300, 0u);
6886 } 6113 }
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
6919 EXPECT_EQ(124u, processed_ack_frame.packets.Min()); 6146 EXPECT_EQ(124u, processed_ack_frame.packets.Min());
6920 EXPECT_EQ(600u, processed_ack_frame.packets.Max()); 6147 EXPECT_EQ(600u, processed_ack_frame.packets.Max());
6921 } 6148 }
6922 } 6149 }
6923 6150
6924 TEST_P(QuicFramerTest, CleanTruncation) { 6151 TEST_P(QuicFramerTest, CleanTruncation) {
6925 QuicPacketHeader header; 6152 QuicPacketHeader header;
6926 header.public_header.connection_id = kConnectionId; 6153 header.public_header.connection_id = kConnectionId;
6927 header.public_header.reset_flag = false; 6154 header.public_header.reset_flag = false;
6928 header.public_header.version_flag = false; 6155 header.public_header.version_flag = false;
6929 header.fec_flag = false;
6930 header.entropy_flag = true; 6156 header.entropy_flag = true;
6931 header.packet_number = kPacketNumber; 6157 header.packet_number = kPacketNumber;
6932 6158
6933 QuicAckFrame ack_frame; 6159 QuicAckFrame ack_frame;
6934 ack_frame.largest_observed = 201; 6160 ack_frame.largest_observed = 201;
6935 ack_frame.packets.Add(1, ack_frame.largest_observed); 6161 ack_frame.packets.Add(1, ack_frame.largest_observed);
6936 6162
6937 // Create a packet with just the ack. 6163 // Create a packet with just the ack.
6938 QuicFrame frame; 6164 QuicFrame frame;
6939 frame.type = ACK_FRAME; 6165 frame.type = ACK_FRAME;
(...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after
6999 'r', 'l', 'd', '!', 6225 'r', 'l', 'd', '!',
7000 }; 6226 };
7001 // clang-format on 6227 // clang-format on
7002 6228
7003 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 6229 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
7004 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 6230 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
7005 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 6231 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
7006 ASSERT_TRUE(visitor_.header_.get()); 6232 ASSERT_TRUE(visitor_.header_.get());
7007 EXPECT_TRUE(visitor_.header_->entropy_flag); 6233 EXPECT_TRUE(visitor_.header_->entropy_flag);
7008 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash); 6234 EXPECT_EQ(1 << 4, visitor_.header_->entropy_hash);
7009 EXPECT_FALSE(visitor_.header_->fec_flag);
7010 }; 6235 };
7011 6236
7012 TEST_P(QuicFramerTest, StopPacketProcessing) { 6237 TEST_P(QuicFramerTest, StopPacketProcessing) {
7013 // clang-format off 6238 // clang-format off
7014 unsigned char packet[] = { 6239 unsigned char packet[] = {
7015 // public flags (8 byte connection_id) 6240 // public flags (8 byte connection_id)
7016 static_cast<unsigned char>( 6241 static_cast<unsigned char>(
7017 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 6242 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
7018 // connection_id 6243 // connection_id
7019 0x10, 0x32, 0x54, 0x76, 6244 0x10, 0x32, 0x54, 0x76,
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
7263 'o', ' ', 'w', 'o', 6488 'o', ' ', 'w', 'o',
7264 'r', 'l', 'd', '!', 6489 'r', 'l', 'd', '!',
7265 }; 6490 };
7266 // clang-format on 6491 // clang-format on
7267 6492
7268 QuicFramerFuzzFunc(packet, arraysize(packet)); 6493 QuicFramerFuzzFunc(packet, arraysize(packet));
7269 } 6494 }
7270 6495
7271 } // namespace test 6496 } // namespace test
7272 } // namespace net 6497 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_framer.cc ('k') | net/quic/core/quic_packet_creator.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698