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

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

Issue 2333153003: Use the largest received packet instead of the most recently received packet to calculate the seque… (Closed)
Patch Set: Created 4 years, 3 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/test_tools/quic_framer_peer.h » ('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 1178 matching lines...) Expand 10 before | Expand all | Expand 10 after
1189 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 1189 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
1190 : arraysize(packet_34), 1190 : arraysize(packet_34),
1191 false); 1191 false);
1192 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1192 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1193 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 1193 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
1194 EXPECT_EQ(0u, QuicFramerPeer::GetLastPacketNumber(&framer_)); 1194 EXPECT_EQ(0u, QuicFramerPeer::GetLastPacketNumber(&framer_));
1195 EXPECT_EQ(kInvalidPathId, QuicFramerPeer::GetLastPathId(&framer_)); 1195 EXPECT_EQ(kInvalidPathId, QuicFramerPeer::GetLastPathId(&framer_));
1196 } 1196 }
1197 1197
1198 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) { 1198 TEST_P(QuicFramerTest, PacketHeaderWith4BytePacketNumber) {
1199 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); 1199 if (FLAGS_quic_packet_numbers_largest_received) {
1200 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2);
1201 } else {
1202 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2);
1203 }
1200 1204
1201 // clang-format off 1205 // clang-format off
1202 unsigned char packet[] = { 1206 unsigned char packet[] = {
1203 // public flags (8 byte connection_id and 4 byte packet number) 1207 // public flags (8 byte connection_id and 4 byte packet number)
1204 0x28, 1208 0x28,
1205 // connection_id 1209 // connection_id
1206 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 1210 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
1207 // packet number 1211 // packet number
1208 0xBC, 0x9A, 0x78, 0x56, 1212 0xBC, 0x9A, 0x78, 0x56,
1209 // private flags 1213 // private flags
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
1260 expected_error = "Unable to read packet number."; 1264 expected_error = "Unable to read packet number.";
1261 } 1265 }
1262 } 1266 }
1263 CheckProcessingFails( 1267 CheckProcessingFails(
1264 framer_.version() <= QUIC_VERSION_33 ? packet : packet_34, i, 1268 framer_.version() <= QUIC_VERSION_33 ? packet : packet_34, i,
1265 expected_error, QUIC_INVALID_PACKET_HEADER); 1269 expected_error, QUIC_INVALID_PACKET_HEADER);
1266 } 1270 }
1267 } 1271 }
1268 1272
1269 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) { 1273 TEST_P(QuicFramerTest, PacketHeaderWith2BytePacketNumber) {
1270 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); 1274 if (FLAGS_quic_packet_numbers_largest_received) {
1275 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2);
1276 } else {
1277 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2);
1278 }
1271 1279
1272 // clang-format off 1280 // clang-format off
1273 unsigned char packet[] = { 1281 unsigned char packet[] = {
1274 // public flags (8 byte connection_id and 2 byte packet number) 1282 // public flags (8 byte connection_id and 2 byte packet number)
1275 0x18, 1283 0x18,
1276 // connection_id 1284 // connection_id
1277 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 1285 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
1278 // packet number 1286 // packet number
1279 0xBC, 0x9A, 1287 0xBC, 0x9A,
1280 // private flags 1288 // private flags
(...skipping 14 matching lines...) Expand all
1295 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 1303 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
1296 : arraysize(packet_34), 1304 : arraysize(packet_34),
1297 false); 1305 false);
1298 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1306 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1299 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 1307 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1300 ASSERT_TRUE(visitor_.header_.get()); 1308 ASSERT_TRUE(visitor_.header_.get());
1301 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 1309 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1302 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 1310 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
1303 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1311 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1304 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1312 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1313 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER,
1314 visitor_.header_->public_header.packet_number_length);
1305 EXPECT_FALSE(visitor_.header_->fec_flag); 1315 EXPECT_FALSE(visitor_.header_->fec_flag);
1306 EXPECT_FALSE(visitor_.header_->entropy_flag); 1316 EXPECT_FALSE(visitor_.header_->entropy_flag);
1307 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1317 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1308 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 1318 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
1309 1319
1310 // Now test framing boundaries. 1320 // Now test framing boundaries.
1311 for (size_t i = 0; 1321 for (size_t i = 0;
1312 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 1322 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
1313 !kIncludeVersion, !kIncludePathId, 1323 !kIncludeVersion, !kIncludePathId,
1314 !kIncludeDiversificationNonce, 1324 !kIncludeDiversificationNonce,
(...skipping 16 matching lines...) Expand all
1331 expected_error = "Unable to read packet number."; 1341 expected_error = "Unable to read packet number.";
1332 } 1342 }
1333 } 1343 }
1334 CheckProcessingFails( 1344 CheckProcessingFails(
1335 framer_.version() <= QUIC_VERSION_33 ? packet : packet_34, i, 1345 framer_.version() <= QUIC_VERSION_33 ? packet : packet_34, i,
1336 expected_error, QUIC_INVALID_PACKET_HEADER); 1346 expected_error, QUIC_INVALID_PACKET_HEADER);
1337 } 1347 }
1338 } 1348 }
1339 1349
1340 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) { 1350 TEST_P(QuicFramerTest, PacketHeaderWith1BytePacketNumber) {
1341 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2); 1351 if (FLAGS_quic_packet_numbers_largest_received) {
1352 QuicFramerPeer::SetLargestPacketNumber(&framer_, kPacketNumber - 2);
1353 } else {
1354 QuicFramerPeer::SetLastPacketNumber(&framer_, kPacketNumber - 2);
1355 }
1342 1356
1343 // clang-format off 1357 // clang-format off
1344 unsigned char packet[] = { 1358 unsigned char packet[] = {
1345 // public flags (8 byte connection_id and 1 byte packet number) 1359 // public flags (8 byte connection_id and 1 byte packet number)
1346 0x08, 1360 0x08,
1347 // connection_id 1361 // connection_id
1348 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 1362 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
1349 // packet number 1363 // packet number
1350 0xBC, 1364 0xBC,
1351 // private flags 1365 // private flags
(...skipping 14 matching lines...) Expand all
1366 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet) 1380 framer_.version() <= QUIC_VERSION_33 ? arraysize(packet)
1367 : arraysize(packet_34), 1381 : arraysize(packet_34),
1368 false); 1382 false);
1369 EXPECT_FALSE(framer_.ProcessPacket(encrypted)); 1383 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
1370 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error()); 1384 EXPECT_EQ(QUIC_MISSING_PAYLOAD, framer_.error());
1371 ASSERT_TRUE(visitor_.header_.get()); 1385 ASSERT_TRUE(visitor_.header_.get());
1372 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id); 1386 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1373 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag); 1387 EXPECT_FALSE(visitor_.header_->public_header.multipath_flag);
1374 EXPECT_FALSE(visitor_.header_->public_header.reset_flag); 1388 EXPECT_FALSE(visitor_.header_->public_header.reset_flag);
1375 EXPECT_FALSE(visitor_.header_->public_header.version_flag); 1389 EXPECT_FALSE(visitor_.header_->public_header.version_flag);
1390 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1391 visitor_.header_->public_header.packet_number_length);
1376 EXPECT_FALSE(visitor_.header_->fec_flag); 1392 EXPECT_FALSE(visitor_.header_->fec_flag);
1377 EXPECT_FALSE(visitor_.header_->entropy_flag); 1393 EXPECT_FALSE(visitor_.header_->entropy_flag);
1378 EXPECT_EQ(0, visitor_.header_->entropy_hash); 1394 EXPECT_EQ(0, visitor_.header_->entropy_hash);
1379 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number); 1395 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
1380 1396
1381 // Now test framing boundaries. 1397 // Now test framing boundaries.
1382 for (size_t i = 0; 1398 for (size_t i = 0;
1383 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 1399 i < GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
1384 !kIncludeVersion, !kIncludePathId, 1400 !kIncludeVersion, !kIncludePathId,
1385 !kIncludeDiversificationNonce, 1401 !kIncludeDiversificationNonce,
(...skipping 15 matching lines...) Expand all
1401 } else { 1417 } else {
1402 expected_error = "Unable to read packet number."; 1418 expected_error = "Unable to read packet number.";
1403 } 1419 }
1404 } 1420 }
1405 CheckProcessingFails( 1421 CheckProcessingFails(
1406 framer_.version() <= QUIC_VERSION_33 ? packet : packet_34, i, 1422 framer_.version() <= QUIC_VERSION_33 ? packet : packet_34, i,
1407 expected_error, QUIC_INVALID_PACKET_HEADER); 1423 expected_error, QUIC_INVALID_PACKET_HEADER);
1408 } 1424 }
1409 } 1425 }
1410 1426
1427 TEST_P(QuicFramerTest, PacketNumberDecreasesThenIncreases) {
1428 FLAGS_quic_packet_numbers_largest_received = true;
1429 // 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.
1431 QuicPacketHeader header;
1432 header.public_header.connection_id = kConnectionId;
1433 header.public_header.reset_flag = false;
1434 header.public_header.version_flag = false;
1435 header.fec_flag = false;
1436 header.entropy_flag = false;
1437 header.packet_number = kPacketNumber - 2;
1438
1439 QuicPaddingFrame padding_frame;
1440 QuicFrames frames;
1441 frames.push_back(QuicFrame(padding_frame));
1442 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
1443 ASSERT_TRUE(data != nullptr);
1444
1445 QuicEncryptedPacket encrypted(data->data(), data->length(), false);
1446 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
1447 ASSERT_TRUE(visitor_.header_.get());
1448 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1449 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER,
1450 visitor_.header_->public_header.packet_number_length);
1451 EXPECT_EQ(kPacketNumber - 2, visitor_.header_->packet_number);
1452
1453 // Receive a 1 byte packet number.
1454 header.packet_number = kPacketNumber;
1455 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER;
1456 data.reset(BuildDataPacket(header, frames));
1457 QuicEncryptedPacket encrypted1(data->data(), data->length(), false);
1458 EXPECT_TRUE(framer_.ProcessPacket(encrypted1));
1459 ASSERT_TRUE(visitor_.header_.get());
1460 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1461 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1462 visitor_.header_->public_header.packet_number_length);
1463 EXPECT_EQ(kPacketNumber, visitor_.header_->packet_number);
1464
1465 // Process a 2 byte packet number 256 packets ago.
1466 header.packet_number = kPacketNumber - 256;
1467 header.public_header.packet_number_length = PACKET_2BYTE_PACKET_NUMBER;
1468 data.reset(BuildDataPacket(header, frames));
1469 QuicEncryptedPacket encrypted2(data->data(), data->length(), false);
1470 EXPECT_TRUE(framer_.ProcessPacket(encrypted2));
1471 ASSERT_TRUE(visitor_.header_.get());
1472 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1473 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER,
1474 visitor_.header_->public_header.packet_number_length);
1475 EXPECT_EQ(kPacketNumber - 256, visitor_.header_->packet_number);
1476
1477 // Process another 1 byte packet number and ensure it works.
1478 header.packet_number = kPacketNumber - 1;
1479 header.public_header.packet_number_length = PACKET_1BYTE_PACKET_NUMBER;
1480 data.reset(BuildDataPacket(header, frames));
1481 QuicEncryptedPacket encrypted3(data->data(), data->length(), false);
1482 EXPECT_TRUE(framer_.ProcessPacket(encrypted3));
1483 ASSERT_TRUE(visitor_.header_.get());
1484 EXPECT_EQ(kConnectionId, visitor_.header_->public_header.connection_id);
1485 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER,
1486 visitor_.header_->public_header.packet_number_length);
1487 EXPECT_EQ(kPacketNumber - 1, visitor_.header_->packet_number);
1488 }
1489
1411 TEST_P(QuicFramerTest, InvalidPublicFlag) { 1490 TEST_P(QuicFramerTest, InvalidPublicFlag) {
1412 if (framer_.version() > QUIC_VERSION_33) { 1491 if (framer_.version() > QUIC_VERSION_33) {
1413 return; 1492 return;
1414 } 1493 }
1415 // clang-format off 1494 // clang-format off
1416 unsigned char packet[] = { 1495 unsigned char packet[] = {
1417 // public flags: all flags set but the public reset flag and version flag. 1496 // public flags: all flags set but the public reset flag and version flag.
1418 0xF8, 1497 0xF8,
1419 // connection_id 1498 // connection_id
1420 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 1499 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 5767 matching lines...) Expand 10 before | Expand all | Expand 10 after
7188 'o', ' ', 'w', 'o', 7267 'o', ' ', 'w', 'o',
7189 'r', 'l', 'd', '!', 7268 'r', 'l', 'd', '!',
7190 }; 7269 };
7191 // clang-format on 7270 // clang-format on
7192 7271
7193 QuicFramerFuzzFunc(packet, arraysize(packet)); 7272 QuicFramerFuzzFunc(packet, arraysize(packet));
7194 } 7273 }
7195 7274
7196 } // namespace test 7275 } // namespace test
7197 } // namespace net 7276 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_framer.cc ('k') | net/quic/test_tools/quic_framer_peer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698