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

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

Issue 2401363004: relnote: Deprecate flag quic_disable_pre_32 (Closed)
Patch Set: remove unused LoadTestCert method 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_protocol.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 1686 matching lines...) Expand 10 before | Expand all | Expand 10 after
1697 0x98, 0xBA, 0xDC, 0xFE, 1697 0x98, 0xBA, 0xDC, 0xFE,
1698 // packet number 1698 // packet number
1699 0x01, 0x00, 0x00, 0x00, 1699 0x01, 0x00, 0x00, 0x00,
1700 0x00, 0x00, 1700 0x00, 0x00,
1701 // private flags (fec group) 1701 // private flags (fec group)
1702 0x02, 1702 0x02,
1703 // first fec protected packet offset 1703 // first fec protected packet offset
1704 0x10 1704 0x10
1705 }; 1705 };
1706 // clang-format on 1706 // clang-format on
1707 if (framer_.version() > QUIC_VERSION_31) { 1707 CheckProcessingFails(packet, arraysize(packet),
1708 CheckProcessingFails(packet, arraysize(packet), 1708 "Illegal private flags value.",
1709 "Illegal private flags value.", 1709 QUIC_INVALID_PACKET_HEADER);
1710 QUIC_INVALID_PACKET_HEADER); 1710
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 }; 1711 };
1718 1712
1719 TEST_P(QuicFramerTest, PaddingFrame) { 1713 TEST_P(QuicFramerTest, PaddingFrame) {
1720 // clang-format off 1714 // clang-format off
1721 unsigned char packet[] = { 1715 unsigned char packet[] = {
1722 // public flags (8 byte connection_id) 1716 // public flags (8 byte connection_id)
1723 0x38, 1717 0x38,
1724 // connection_id 1718 // connection_id
1725 0x10, 0x32, 0x54, 0x76, 1719 0x10, 0x32, 0x54, 0x76,
1726 0x98, 0xBA, 0xDC, 0xFE, 1720 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 642 matching lines...) Expand 10 before | Expand all | Expand 10 after
2369 // clang-format on 2363 // clang-format on
2370 2364
2371 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2365 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2372 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2366 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2373 2367
2374 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2368 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2375 ASSERT_TRUE(visitor_.public_header_.get()); 2369 ASSERT_TRUE(visitor_.public_header_.get());
2376 ASSERT_FALSE(visitor_.header_.get()); 2370 ASSERT_FALSE(visitor_.header_.get());
2377 } 2371 }
2378 2372
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) { 2373 TEST_P(QuicFramerTest, AckFrameTwoTimestampVersion32) {
2507 // clang-format off 2374 // clang-format off
2508 unsigned char packet[] = { 2375 unsigned char packet[] = {
2509 // public flags (8 byte connection_id) 2376 // public flags (8 byte connection_id)
2510 0x3C, 2377 0x3C,
2511 // connection_id 2378 // connection_id
2512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2379 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2513 // packet number 2380 // packet number
2514 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2381 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
2515 // private flags (entropy) 2382 // private flags (entropy)
(...skipping 20 matching lines...) Expand all
2536 0x10, 0x32, 2403 0x10, 0x32,
2537 // num missing packets 2404 // num missing packets
2538 0x01, 2405 0x01,
2539 // missing packet delta 2406 // missing packet delta
2540 0x01, 2407 0x01,
2541 // 0 more missing packets in range. 2408 // 0 more missing packets in range.
2542 0x00, 2409 0x00,
2543 }; 2410 };
2544 // clang-format on 2411 // clang-format on
2545 2412
2546 if (framer_.version() <= QUIC_VERSION_31 || 2413 if (framer_.version() > QUIC_VERSION_33) {
2547 framer_.version() > QUIC_VERSION_33) {
2548 return; 2414 return;
2549 } 2415 }
2550 2416
2551 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2417 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2552 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2418 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2553 2419
2554 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2420 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2555 ASSERT_TRUE(visitor_.header_.get()); 2421 ASSERT_TRUE(visitor_.header_.get());
2556 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2422 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2557 !kIncludeDiversificationNonce)); 2423 !kIncludeDiversificationNonce));
(...skipping 55 matching lines...) Expand 10 before | Expand all | Expand 10 after
2613 CheckProcessingFails( 2479 CheckProcessingFails(
2614 packet, 2480 packet,
2615 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2481 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2616 !kIncludeVersion, !kIncludePathId, 2482 !kIncludeVersion, !kIncludePathId,
2617 !kIncludeDiversificationNonce, 2483 !kIncludeDiversificationNonce,
2618 PACKET_6BYTE_PACKET_NUMBER), 2484 PACKET_6BYTE_PACKET_NUMBER),
2619 expected_error, QUIC_INVALID_ACK_DATA); 2485 expected_error, QUIC_INVALID_ACK_DATA);
2620 } 2486 }
2621 } 2487 }
2622 2488
2623 TEST_P(QuicFramerTest, AckFrameOneTimestamp) { 2489 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) {
2624 // clang-format off 2490 // clang-format off
2625 unsigned char packet[] = { 2491 unsigned char packet[] = {
2626 // public flags (8 byte connection_id) 2492 // public flags (8 byte connection_id)
2627 0x38, 2493 0x3C,
2628 // connection_id 2494 // connection_id
2629 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2495 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2630 // packet number 2496 // packet number
2631 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2497 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
2632 // private flags (entropy) 2498 // private flags (entropy)
2633 0x01, 2499 0x01,
2634 2500
2635 // frame type (ack frame) 2501 // frame type (ack frame)
2636 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 2502 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
2637 0x6C, 2503 0x6C,
2638 // entropy hash of all received packets. 2504 // entropy hash of all received packets.
2639 0xBA, 2505 0xBA,
2640 // largest observed packet number 2506 // largest observed packet number
2641 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, 2507 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
2642 // Zero delta time. 2508 // Zero delta time.
2643 0x00, 0x00, 2509 0x00, 0x00,
2644 // Number of timestamps. 2510 // Number of timestamps.
2645 0x01, 2511 0x01,
2646 // Delta from largest observed. 2512 // Delta from largest observed.
2647 0x01, 2513 0x01,
2648 // Delta time. 2514 // Delta time.
2649 0x10, 0x32, 0x54, 0x76, 2515 0x10, 0x32, 0x54, 0x76,
2650 // num missing packets 2516 // num missing packets
2651 0x01, 2517 0x01,
2652 // missing packet delta 2518 // missing packet delta
2653 0x01, 2519 0x01,
2654 // 0 more missing packets in range. 2520 // 0 more missing packets in range.
2655 0x00, 2521 0x00,
2656 // Number of revived packets.
2657 0x00,
2658 }; 2522 };
2659 // clang-format on 2523 // clang-format on
2660 2524
2661 if (framer_.version() > QUIC_VERSION_31) { 2525 if (framer_.version() > QUIC_VERSION_33) {
2662 return; 2526 return;
2663 } 2527 }
2664 2528
2665 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2529 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2666 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2530 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2667 2531
2668 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2532 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2669 ASSERT_TRUE(visitor_.header_.get()); 2533 ASSERT_TRUE(visitor_.header_.get());
2670 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2534 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2671 !kIncludeDiversificationNonce)); 2535 !kIncludeDiversificationNonce));
(...skipping 14 matching lines...) Expand all
2686 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 2550 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
2687 const size_t kNumTimestampsOffset = 2551 const size_t kNumTimestampsOffset =
2688 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; 2552 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2689 const size_t kTimestampDeltaLargestObserved = 2553 const size_t kTimestampDeltaLargestObserved =
2690 kNumTimestampsOffset + kQuicNumTimestampsSize; 2554 kNumTimestampsOffset + kQuicNumTimestampsSize;
2691 const size_t kTimestampTimeDeltaLargestObserved = 2555 const size_t kTimestampTimeDeltaLargestObserved =
2692 kTimestampDeltaLargestObserved + 1; 2556 kTimestampDeltaLargestObserved + 1;
2693 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4; 2557 const size_t kNumMissingPacketOffset = kTimestampTimeDeltaLargestObserved + 4;
2694 const size_t kMissingPacketsOffset = 2558 const size_t kMissingPacketsOffset =
2695 kNumMissingPacketOffset + kNumberOfNackRangesSize; 2559 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. 2560 // Now test framing boundaries.
2701 const size_t ack_frame_size = 2561 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) { 2562 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2704 string expected_error; 2563 string expected_error;
2705 if (i < kLargestObservedOffset) { 2564 if (i < kLargestObservedOffset) {
2706 expected_error = "Unable to read entropy hash for received packets."; 2565 expected_error = "Unable to read entropy hash for received packets.";
2707 } else if (i < kMissingDeltaTimeOffset) { 2566 } else if (i < kMissingDeltaTimeOffset) {
2708 expected_error = "Unable to read largest observed."; 2567 expected_error = "Unable to read largest observed.";
2709 } else if (i < kNumTimestampsOffset) { 2568 } else if (i < kNumTimestampsOffset) {
2710 expected_error = "Unable to read ack delay time."; 2569 expected_error = "Unable to read ack delay time.";
2711 } else if (i < kTimestampDeltaLargestObserved) { 2570 } else if (i < kTimestampDeltaLargestObserved) {
2712 expected_error = "Unable to read num received packets."; 2571 expected_error = "Unable to read num received packets.";
2713 } else if (i < kTimestampTimeDeltaLargestObserved) { 2572 } else if (i < kTimestampTimeDeltaLargestObserved) {
2714 expected_error = "Unable to read sequence delta in received packets."; 2573 expected_error = "Unable to read sequence delta in received packets.";
2715 } else if (i < kNumMissingPacketOffset) { 2574 } else if (i < kNumMissingPacketOffset) {
2716 expected_error = "Unable to read time delta in received packets."; 2575 expected_error = "Unable to read time delta in received packets.";
2717 } else if (i < kMissingPacketsOffset) { 2576 } else if (i < kMissingPacketsOffset) {
2718 expected_error = "Unable to read num missing packet ranges."; 2577 expected_error = "Unable to read num missing packet ranges.";
2719 } else if (i < kMissingPacketsRange) { 2578 } else {
2720 expected_error = "Unable to read missing packet number delta."; 2579 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 } 2580 }
2726 CheckProcessingFails( 2581 CheckProcessingFails(
2727 packet, 2582 packet,
2728 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2583 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2729 !kIncludeVersion, !kIncludePathId, 2584 !kIncludeVersion, !kIncludePathId,
2730 !kIncludeDiversificationNonce, 2585 !kIncludeDiversificationNonce,
2731 PACKET_6BYTE_PACKET_NUMBER), 2586 PACKET_6BYTE_PACKET_NUMBER),
2732 expected_error, QUIC_INVALID_ACK_DATA); 2587 expected_error, QUIC_INVALID_ACK_DATA);
2733 } 2588 }
2734 } 2589 }
2735 2590
2736 TEST_P(QuicFramerTest, AckFrameOneTimestampVersion32) { 2591 TEST_P(QuicFramerTest, NewAckFrameOneAckBlock) {
2737 // clang-format off 2592 // clang-format off
2738 unsigned char packet[] = { 2593 unsigned char packet[] = {
2739 // public flags (8 byte connection_id) 2594 // public flags (8 byte connection_id)
2740 0x3C, 2595 0x3C,
2741 // connection_id 2596 // connection_id
2742 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2597 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2743 // packet number 2598 // packet number
2744 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12, 2599 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
2745 // private flags (entropy)
2746 0x01,
2747 2600
2748 // frame type (ack frame) 2601 // frame type (ack frame)
2749 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 2602 // (one ack block, 2 byte largest observed, 2 byte block length)
2750 0x6C, 2603 0x45,
2751 // entropy hash of all received packets. 2604 // largest acked
2752 0xBA, 2605 0x34, 0x12,
2753 // largest observed packet number
2754 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
2755 // Zero delta time. 2606 // Zero delta time.
2756 0x00, 0x00, 2607 0x00, 0x00,
2757 // Number of timestamps. 2608 // first ack block length.
2758 0x01, 2609 0x34, 0x12,
2759 // Delta from largest observed. 2610 // 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, 2611 0x00,
2769 }; 2612 };
2770 // clang-format on 2613 // clang-format on
2771 2614
2772 if (framer_.version() <= QUIC_VERSION_31 || 2615 if (framer_.version() <= QUIC_VERSION_33) {
2773 framer_.version() > QUIC_VERSION_33) {
2774 return; 2616 return;
2775 } 2617 }
2776 2618
2777 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2619 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2778 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2620 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2779 2621
2780 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2622 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2781 ASSERT_TRUE(visitor_.header_.get()); 2623 ASSERT_TRUE(visitor_.header_.get());
2782 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2624 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
2783 !kIncludeDiversificationNonce)); 2625 !kIncludeDiversificationNonce));
2784 2626
2785 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2627 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2786 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2628 ASSERT_EQ(1u, visitor_.ack_frames_.size());
2787 const QuicAckFrame& frame = *visitor_.ack_frames_[0]; 2629 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
2788 EXPECT_EQ(0xBA, frame.entropy_hash); 2630 EXPECT_EQ(kSmallLargestObserved, frame.largest_observed);
2789 EXPECT_EQ(kLargestObserved, frame.largest_observed); 2631 EXPECT_FALSE(frame.missing);
2790 ASSERT_EQ(1u, frame.packets.NumPacketsSlow()); 2632 ASSERT_EQ(4660u, frame.packets.NumPacketsSlow());
2791 ASSERT_EQ(1u, frame.received_packet_times.size());
2792 EXPECT_EQ(kMissingPacket, frame.packets.Min());
2793 2633
2794 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize; 2634 const size_t kLargestAckedOffset = kQuicFrameTypeSize;
2795 const size_t kLargestObservedOffset = 2635 const size_t kLargestAckedDeltaTimeOffset =
2796 kReceivedEntropyOffset + kQuicEntropyHashSize; 2636 kLargestAckedOffset + PACKET_2BYTE_PACKET_NUMBER;
2797 const size_t kMissingDeltaTimeOffset = 2637 const size_t kFirstAckBlockLengthOffset =
2798 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER; 2638 kLargestAckedDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
2799 const size_t kNumTimestampsOffset = 2639 const size_t kNumTimestampsOffset =
2800 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize; 2640 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. 2641 // Now test framing boundaries.
2809 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER; 2642 const size_t ack_frame_size =
2643 kFirstAckBlockLengthOffset + PACKET_2BYTE_PACKET_NUMBER;
2810 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) { 2644 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2811 string expected_error; 2645 string expected_error;
2812 if (i < kLargestObservedOffset) { 2646 if (i < kLargestAckedDeltaTimeOffset) {
2813 expected_error = "Unable to read entropy hash for received packets."; 2647 expected_error = "Unable to read largest acked.";
2814 } else if (i < kMissingDeltaTimeOffset) { 2648 } else if (i < kFirstAckBlockLengthOffset) {
2815 expected_error = "Unable to read largest observed."; 2649 expected_error = "Unable to read ack delay time.";
2816 } else if (i < kNumTimestampsOffset) { 2650 } else if (i < kNumTimestampsOffset) {
2817 expected_error = "Unable to read ack delay time."; 2651 expected_error = "Unable to read first ack block length.";
2818 } else if (i < kTimestampDeltaLargestObserved) { 2652 } else {
2819 expected_error = "Unable to read num received packets."; 2653 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 } 2654 }
2829 CheckProcessingFails( 2655 CheckProcessingFails(
2830 packet, 2656 packet,
2831 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID, 2657 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2832 !kIncludeVersion, !kIncludePathId, 2658 !kIncludeVersion, !kIncludePathId,
2833 !kIncludeDiversificationNonce, 2659 !kIncludeDiversificationNonce,
2834 PACKET_6BYTE_PACKET_NUMBER), 2660 PACKET_6BYTE_PACKET_NUMBER),
2835 expected_error, QUIC_INVALID_ACK_DATA); 2661 expected_error, QUIC_INVALID_ACK_DATA);
2836 } 2662 }
2837 } 2663 }
2838 2664
2839 TEST_P(QuicFramerTest, AckFrame) { 2665 TEST_P(QuicFramerTest, NewAckFrameTwoTimeStampsMultipleAckBlocks) {
2840 // clang-format off 2666 // clang-format off
2841 unsigned char packet[] = { 2667 unsigned char packet[] = {
2842 // public flags (8 byte connection_id) 2668 // public flags (8 byte connection_id)
2843 0x3C, 2669 0x3C,
2844 // connection_id 2670 // connection_id
2845 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2671 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
2846 // packet number 2672 // 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, 2673 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
3023 2674
3024 // frame type (ack frame) 2675 // frame type (ack frame)
3025 // (more than one ack block, 2 byte largest observed, 2 byte block length) 2676 // (more than one ack block, 2 byte largest observed, 2 byte block length)
3026 0x65, 2677 0x65,
3027 // largest acked 2678 // largest acked
3028 0x34, 0x12, 2679 0x34, 0x12,
3029 // Zero delta time. 2680 // Zero delta time.
3030 0x00, 0x00, 2681 0x00, 0x00,
3031 // num ack blocks ranges. 2682 // num ack blocks ranges.
(...skipping 131 matching lines...) Expand 10 before | Expand all | Expand 10 after
3163 } 2814 }
3164 2815
3165 TEST_P(QuicFramerTest, AckFrameVersion32) { 2816 TEST_P(QuicFramerTest, AckFrameVersion32) {
3166 // clang-format off 2817 // clang-format off
3167 unsigned char packet[] = { 2818 unsigned char packet[] = {
3168 // public flags (8 byte connection_id) 2819 // public flags (8 byte connection_id)
3169 0x38, 2820 0x38,
3170 // connection_id 2821 // connection_id
3171 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2822 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
3172 // packet number 2823 // packet number
3173 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
3174 // private flags (entropy)
3175 0x01,
3176
3177 // frame type (ack frame)
3178 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3179 0x6C,
3180 // entropy hash of all received packets.
3181 0xBA,
3182 // largest observed packet number
3183 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
3184 // Zero delta time.
3185 0x00, 0x00,
3186 // Number of timestamps.
3187 0x00,
3188 // num missing packets
3189 0x01,
3190 // missing packet delta
3191 0x01,
3192 // 0 more missing packets in range.
3193 0x00,
3194 };
3195 // clang-format on
3196
3197 if (framer_.version() <= QUIC_VERSION_31 ||
3198 framer_.version() > QUIC_VERSION_33) {
3199 return;
3200 }
3201
3202 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3203 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3204
3205 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3206 ASSERT_TRUE(visitor_.header_.get());
3207 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3208 !kIncludeDiversificationNonce));
3209
3210 EXPECT_EQ(0u, visitor_.stream_frames_.size());
3211 ASSERT_EQ(1u, visitor_.ack_frames_.size());
3212 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
3213 EXPECT_EQ(0xBA, frame.entropy_hash);
3214 EXPECT_EQ(kLargestObserved, frame.largest_observed);
3215 ASSERT_EQ(1u, frame.packets.NumPacketsSlow());
3216 EXPECT_EQ(kMissingPacket, frame.packets.Min());
3217
3218 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
3219 const size_t kLargestObservedOffset =
3220 kReceivedEntropyOffset + kQuicEntropyHashSize;
3221 const size_t kMissingDeltaTimeOffset =
3222 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
3223 const size_t kNumTimestampsOffset =
3224 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
3225 const size_t kNumMissingPacketOffset =
3226 kNumTimestampsOffset + kQuicNumTimestampsSize;
3227 const size_t kMissingPacketsOffset =
3228 kNumMissingPacketOffset + kNumberOfNackRangesSize;
3229 // Now test framing boundaries.
3230 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER;
3231 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
3232 string expected_error;
3233 if (i < kLargestObservedOffset) {
3234 expected_error = "Unable to read entropy hash for received packets.";
3235 } else if (i < kMissingDeltaTimeOffset) {
3236 expected_error = "Unable to read largest observed.";
3237 } else if (i < kNumTimestampsOffset) {
3238 expected_error = "Unable to read ack delay time.";
3239 } else if (i < kNumMissingPacketOffset) {
3240 expected_error = "Unable to read num received packets.";
3241 } else if (i < kMissingPacketsOffset) {
3242 expected_error = "Unable to read num missing packet ranges.";
3243 } else {
3244 expected_error = "Unable to read missing packet number delta.";
3245 }
3246 CheckProcessingFails(
3247 packet,
3248 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
3249 !kIncludeVersion, !kIncludePathId,
3250 !kIncludeDiversificationNonce,
3251 PACKET_6BYTE_PACKET_NUMBER),
3252 expected_error, QUIC_INVALID_ACK_DATA);
3253 }
3254 }
3255
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, 2824 0xA8, 0x9A, 0x78, 0x56, 0x34, 0x12,
3433 // private flags (entropy) 2825 // private flags (entropy)
3434 0x01, 2826 0x01,
3435 2827
3436 // frame type (ack frame) 2828 // frame type (ack frame)
3437 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta) 2829 // (has nacks, not truncated, 6 byte largest observed, 1 byte delta)
3438 0x6C, 2830 0x6C,
3439 // entropy hash of all received packets. 2831 // entropy hash of all received packets.
3440 0xBA, 2832 0xBA,
3441 // largest observed packet number 2833 // largest observed packet number
3442 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12, 2834 0xBF, 0x9A, 0x78, 0x56, 0x34, 0x12,
3443 // Zero delta time. 2835 // Zero delta time.
3444 0x00, 0x00, 2836 0x00, 0x00,
3445 // No received packets. 2837 // Number of timestamps.
3446 0x00, 2838 0x00,
3447 // num missing packet ranges 2839 // num missing packets
3448 0x02, 2840 0x01,
3449 // missing packet delta 2841 // missing packet delta
3450 0x01, 2842 0x01,
3451 // 243 more missing packets in range. 2843 // 0 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, 2844 0x00,
3461 }; 2845 };
3462 // clang-format on 2846 // clang-format on
3463 2847
3464 if (framer_.version() > QUIC_VERSION_31) { 2848 if (framer_.version() > QUIC_VERSION_33) {
3465 return; 2849 return;
3466 } 2850 }
3467 2851
3468 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2852 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3469 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2853 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3470 2854
3471 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2855 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3472 ASSERT_TRUE(visitor_.header_.get()); 2856 ASSERT_TRUE(visitor_.header_.get());
3473 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2857 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3474 !kIncludeDiversificationNonce)); 2858 !kIncludeDiversificationNonce));
3475 2859
3476 EXPECT_EQ(0u, visitor_.stream_frames_.size()); 2860 EXPECT_EQ(0u, visitor_.stream_frames_.size());
3477 ASSERT_EQ(1u, visitor_.ack_frames_.size()); 2861 ASSERT_EQ(1u, visitor_.ack_frames_.size());
3478 QuicAckFrame* frame = visitor_.ack_frames_[0]; 2862 const QuicAckFrame& frame = *visitor_.ack_frames_[0];
3479 EXPECT_EQ(0xBA, frame->entropy_hash); 2863 EXPECT_EQ(0xBA, frame.entropy_hash);
3480 EXPECT_EQ(kLargestObserved, frame->largest_observed); 2864 EXPECT_EQ(kLargestObserved, frame.largest_observed);
3481 ASSERT_EQ(500u, frame->packets.NumPacketsSlow()); 2865 ASSERT_EQ(1u, frame.packets.NumPacketsSlow());
3482 EXPECT_EQ(kMissingPacket - 499, frame->packets.Min()); 2866 EXPECT_EQ(kMissingPacket, frame.packets.Min());
3483 EXPECT_EQ(kMissingPacket, frame->packets.Max());
3484 2867
3485 // Verify that the packet re-serializes identically. 2868 const size_t kReceivedEntropyOffset = kQuicFrameTypeSize;
3486 QuicFrames frames; 2869 const size_t kLargestObservedOffset =
3487 frames.push_back(QuicFrame(frame)); 2870 kReceivedEntropyOffset + kQuicEntropyHashSize;
3488 std::unique_ptr<QuicPacket> data(BuildDataPacket(*visitor_.header_, frames)); 2871 const size_t kMissingDeltaTimeOffset =
3489 ASSERT_TRUE(data != nullptr); 2872 kLargestObservedOffset + PACKET_6BYTE_PACKET_NUMBER;
3490 2873 const size_t kNumTimestampsOffset =
3491 test::CompareCharArraysWithHexError("constructed packet", data->data(), 2874 kMissingDeltaTimeOffset + kQuicDeltaTimeLargestObservedSize;
3492 data->length(), AsChars(packet), 2875 const size_t kNumMissingPacketOffset =
3493 arraysize(packet)); 2876 kNumTimestampsOffset + kQuicNumTimestampsSize;
2877 const size_t kMissingPacketsOffset =
2878 kNumMissingPacketOffset + kNumberOfNackRangesSize;
2879 // Now test framing boundaries.
2880 const size_t ack_frame_size = PACKET_1BYTE_PACKET_NUMBER;
2881 for (size_t i = kQuicFrameTypeSize; i < ack_frame_size; ++i) {
2882 string expected_error;
2883 if (i < kLargestObservedOffset) {
2884 expected_error = "Unable to read entropy hash for received packets.";
2885 } else if (i < kMissingDeltaTimeOffset) {
2886 expected_error = "Unable to read largest observed.";
2887 } else if (i < kNumTimestampsOffset) {
2888 expected_error = "Unable to read ack delay time.";
2889 } else if (i < kNumMissingPacketOffset) {
2890 expected_error = "Unable to read num received packets.";
2891 } else if (i < kMissingPacketsOffset) {
2892 expected_error = "Unable to read num missing packet ranges.";
2893 } else {
2894 expected_error = "Unable to read missing packet number delta.";
2895 }
2896 CheckProcessingFails(
2897 packet,
2898 i + GetPacketHeaderSize(framer_.version(), PACKET_8BYTE_CONNECTION_ID,
2899 !kIncludeVersion, !kIncludePathId,
2900 !kIncludeDiversificationNonce,
2901 PACKET_6BYTE_PACKET_NUMBER),
2902 expected_error, QUIC_INVALID_ACK_DATA);
2903 }
3494 } 2904 }
3495 2905
3496 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) { 2906 TEST_P(QuicFramerTest, AckFrame500NacksVersion32) {
3497 // clang-format off 2907 // clang-format off
3498 unsigned char packet[] = { 2908 unsigned char packet[] = {
3499 // public flags (8 byte connection_id) 2909 // public flags (8 byte connection_id)
3500 static_cast<unsigned char>( 2910 static_cast<unsigned char>(
3501 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 2911 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
3502 // connection_id 2912 // connection_id
3503 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 2913 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
(...skipping 21 matching lines...) Expand all
3525 // The ranges are listed in this order so the re-constructed packet 2935 // The ranges are listed in this order so the re-constructed packet
3526 // matches. 2936 // matches.
3527 0xF3, 2937 0xF3,
3528 // No gap between ranges 2938 // No gap between ranges
3529 0x00, 2939 0x00,
3530 // 255 more missing packets in range. 2940 // 255 more missing packets in range.
3531 0xFF, 2941 0xFF,
3532 }; 2942 };
3533 // clang-format on 2943 // clang-format on
3534 2944
3535 if (framer_.version() <= QUIC_VERSION_31 || 2945 if (framer_.version() > QUIC_VERSION_33) {
3536 framer_.version() > QUIC_VERSION_33) {
3537 return; 2946 return;
3538 } 2947 }
3539 2948
3540 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 2949 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
3541 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 2950 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
3542 2951
3543 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 2952 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
3544 ASSERT_TRUE(visitor_.header_.get()); 2953 ASSERT_TRUE(visitor_.header_.get());
3545 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId, 2954 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion, !kIncludePathId,
3546 !kIncludeDiversificationNonce)); 2955 !kIncludeDiversificationNonce));
(...skipping 985 matching lines...) Expand 10 before | Expand all | Expand 10 after
4532 // redundancy 3941 // redundancy
4533 'a', 'b', 'c', 'd', 3942 'a', 'b', 'c', 'd',
4534 'e', 'f', 'g', 'h', 3943 'e', 'f', 'g', 'h',
4535 'i', 'j', 'k', 'l', 3944 'i', 'j', 'k', 'l',
4536 'm', 'n', 'o', 'p', 3945 'm', 'n', 'o', 'p',
4537 }; 3946 };
4538 if (framer_.version() > QUIC_VERSION_33) { 3947 if (framer_.version() > QUIC_VERSION_33) {
4539 return; 3948 return;
4540 } 3949 }
4541 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 3950 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4542 if (framer_.version() <= QUIC_VERSION_31) { 3951 EXPECT_FALSE(framer_.ProcessPacket(encrypted));
4543 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 3952 EXPECT_EQ(QUIC_INVALID_PACKET_HEADER, framer_.error());
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()); 3953 EXPECT_FALSE(visitor_.header_.get());
4550 } 3954 }
4551 3955
4552 TEST_P(QuicFramerTest, BuildPaddingFramePacket) { 3956 TEST_P(QuicFramerTest, BuildPaddingFramePacket) {
4553 QuicPacketHeader header; 3957 QuicPacketHeader header;
4554 header.public_header.connection_id = kConnectionId; 3958 header.public_header.connection_id = kConnectionId;
4555 header.public_header.reset_flag = false; 3959 header.public_header.reset_flag = false;
4556 header.public_header.version_flag = false; 3960 header.public_header.version_flag = false;
4557 header.fec_flag = false; 3961 header.fec_flag = false;
4558 header.entropy_flag = false; 3962 header.entropy_flag = false;
(...skipping 602 matching lines...) Expand 10 before | Expand all | Expand 10 after
5161 ack_frame.largest_observed = kLargestObserved; 4565 ack_frame.largest_observed = kLargestObserved;
5162 ack_frame.ack_delay_time = QuicTime::Delta::Zero(); 4566 ack_frame.ack_delay_time = QuicTime::Delta::Zero();
5163 ack_frame.packets.Add(kMissingPacket); 4567 ack_frame.packets.Add(kMissingPacket);
5164 4568
5165 QuicFrames frames; 4569 QuicFrames frames;
5166 frames.push_back(QuicFrame(&ack_frame)); 4570 frames.push_back(QuicFrame(&ack_frame));
5167 4571
5168 // clang-format off 4572 // clang-format off
5169 unsigned char packet[] = { 4573 unsigned char packet[] = {
5170 // public flags (8 byte connection_id) 4574 // 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>( 4575 static_cast<unsigned char>(
5205 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 4576 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
5206 // connection_id 4577 // connection_id
5207 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 4578 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5208 // packet number 4579 // packet number
5209 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 4580 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5210 // private flags (entropy) 4581 // private flags (entropy)
5211 0x01, 4582 0x01,
5212 4583
5213 // frame type (ack frame) 4584 // frame type (ack frame)
(...skipping 12 matching lines...) Expand all
5226 // missing packet delta 4597 // missing packet delta
5227 0x01, 4598 0x01,
5228 // 0 more missing packets in range. 4599 // 0 more missing packets in range.
5229 0x00, 4600 0x00,
5230 }; 4601 };
5231 // clang-format on 4602 // clang-format on
5232 4603
5233 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 4604 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
5234 ASSERT_TRUE(data != nullptr); 4605 ASSERT_TRUE(data != nullptr);
5235 4606
5236 if (framer_.version() <= QUIC_VERSION_31) { 4607 test::CompareCharArraysWithHexError(
5237 test::CompareCharArraysWithHexError("constructed packet", data->data(), 4608 "constructed packet", data->data(), data->length(),
5238 data->length(), AsChars(packet), 4609 AsChars(packet), 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 } 4610 }
5246 4611
5247 // TODO(jri): Add test for tuncated packets in which the original ack frame had 4612 // 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). 4613 // revived packets. (In both the large and small packet cases below).
5249 4614
5250 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) { 4615 TEST_P(QuicFramerTest, BuildTruncatedAckFrameLargePacket) {
5251 if (framer_.version() > QUIC_VERSION_33) { 4616 if (framer_.version() > QUIC_VERSION_33) {
5252 return; 4617 return;
5253 } 4618 }
5254 4619
(...skipping 15 matching lines...) Expand all
5270 for (size_t i = 1; i < 2 * 300; i += 2) { 4635 for (size_t i = 1; i < 2 * 300; i += 2) {
5271 ack_frame.packets.Add(i); 4636 ack_frame.packets.Add(i);
5272 } 4637 }
5273 4638
5274 QuicFrames frames; 4639 QuicFrames frames;
5275 frames.push_back(QuicFrame(&ack_frame)); 4640 frames.push_back(QuicFrame(&ack_frame));
5276 4641
5277 // clang-format off 4642 // clang-format off
5278 unsigned char packet[] = { 4643 unsigned char packet[] = {
5279 // public flags (8 byte connection_id) 4644 // 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>( 4645 static_cast<unsigned char>(
5360 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 4646 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
5361 // connection_id 4647 // connection_id
5362 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 4648 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5363 // packet number 4649 // packet number
5364 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 4650 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5365 // private flags (entropy) 4651 // private flags (entropy)
5366 0x01, 4652 0x01,
5367 4653
5368 // frame type (ack frame) 4654 // frame type (ack frame)
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
5426 4712
5427 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4713 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, 4714 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5429 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4715 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5430 }; 4716 };
5431 // clang-format on 4717 // clang-format on
5432 4718
5433 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 4719 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames));
5434 ASSERT_TRUE(data != nullptr); 4720 ASSERT_TRUE(data != nullptr);
5435 4721
5436 if (framer_.version() <= QUIC_VERSION_31) { 4722 test::CompareCharArraysWithHexError(
5437 test::CompareCharArraysWithHexError("constructed packet", data->data(), 4723 "constructed packet", data->data(), data->length(),
5438 data->length(), AsChars(packet), 4724 AsChars(packet), 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 } 4725 }
5446 4726
5447 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) { 4727 TEST_P(QuicFramerTest, BuildTruncatedAckFrameSmallPacket) {
5448 if (framer_.version() > QUIC_VERSION_33) { 4728 if (framer_.version() > QUIC_VERSION_33) {
5449 return; 4729 return;
5450 } 4730 }
5451 4731
5452 QuicPacketHeader header; 4732 QuicPacketHeader header;
5453 header.public_header.connection_id = kConnectionId; 4733 header.public_header.connection_id = kConnectionId;
5454 header.public_header.reset_flag = false; 4734 header.public_header.reset_flag = false;
(...skipping 12 matching lines...) Expand all
5467 for (size_t i = 1; i < 2 * 300; i += 2) { 4747 for (size_t i = 1; i < 2 * 300; i += 2) {
5468 ack_frame.packets.Add(i); 4748 ack_frame.packets.Add(i);
5469 } 4749 }
5470 4750
5471 QuicFrames frames; 4751 QuicFrames frames;
5472 frames.push_back(QuicFrame(&ack_frame)); 4752 frames.push_back(QuicFrame(&ack_frame));
5473 4753
5474 // clang-format off 4754 // clang-format off
5475 unsigned char packet[] = { 4755 unsigned char packet[] = {
5476 // public flags (8 byte connection_id) 4756 // 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>( 4757 static_cast<unsigned char>(
5510 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C), 4758 framer_.version() > QUIC_VERSION_32 ? 0x38 : 0x3C),
5511 // connection_id 4759 // connection_id
5512 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE, 4760 0x10, 0x32, 0x54, 0x76, 0x98, 0xBA, 0xDC, 0xFE,
5513 // packet number 4761 // packet number
5514 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12, 4762 0xBC, 0x9A, 0x78, 0x56, 0x34, 0x12,
5515 // private flags (entropy) 4763 // private flags (entropy)
5516 0x01, 4764 0x01,
5517 4765
5518 // frame type (ack frame) 4766 // frame type (ack frame)
5519 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta) 4767 // (has nacks, is truncated, 2 byte largest observed, 1 byte delta)
5520 0x74, 4768 0x74,
5521 // entropy hash of all received packets, set to 1 by TestEntropyCalculator 4769 // entropy hash of all received packets, set to 1 by TestEntropyCalculator
5522 // since ack is truncated. 4770 // since ack is truncated.
5523 0x01, 4771 0x01,
5524 // 2-byte largest observed packet number. 4772 // 2-byte largest observed packet number.
5525 // Expected to be 12 (0x0C), since only 6 nack ranges can fit. 4773 // Expected to be 12 (0x0C), since only 6 nack ranges can fit.
5526 0x0C, 0x00, 4774 0x0C, 0x00,
5527 // Zero delta time. 4775 // Zero delta time.
5528 0x00, 0x00, 4776 0x00, 0x00,
5529 // num missing packet ranges (limited to 6 by packet size of 37). 4777 // num missing packet ranges (limited to 6 by packet size of 37).
5530 0x06, 4778 0x06,
5531 // {missing packet delta, further missing packets in range} 4779 // {missing packet delta, further missing packets in range}
5532 // 6 nack ranges 4780 // 6 nack ranges
5533 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 4781 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00, 0x01, 0x00,
5534 }; 4782 };
5535 // clang-format on 4783 // clang-format on
5536 4784
5537 if (framer_.version() <= QUIC_VERSION_31) { 4785 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 36u));
5538 std::unique_ptr<QuicPacket> data(BuildDataPacket(header, frames, 37u)); 4786 ASSERT_TRUE(data != nullptr);
5539 ASSERT_TRUE(data != nullptr); 4787 // 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. 4788 EXPECT_EQ(35u, data->length());
5541 EXPECT_EQ(36u, data->length()); 4789 test::CompareCharArraysWithHexError(
5542 test::CompareCharArraysWithHexError("constructed packet", data->data(), 4790 "constructed packet", data->data(), data->length(),
5543 data->length(), AsChars(packet), 4791 AsChars(packet), 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 } 4792 }
5555 4793
5556 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) { 4794 TEST_P(QuicFramerTest, BuildNewAckFramePacketOneAckBlock) {
5557 if (framer_.version() <= QUIC_VERSION_33) { 4795 if (framer_.version() <= QUIC_VERSION_33) {
5558 return; 4796 return;
5559 } 4797 }
5560 4798
5561 QuicPacketHeader header; 4799 QuicPacketHeader header;
5562 header.public_header.connection_id = kConnectionId; 4800 header.public_header.connection_id = kConnectionId;
5563 header.public_header.reset_flag = false; 4801 header.public_header.reset_flag = false;
(...skipping 1699 matching lines...) Expand 10 before | Expand all | Expand 10 after
7263 'o', ' ', 'w', 'o', 6501 'o', ' ', 'w', 'o',
7264 'r', 'l', 'd', '!', 6502 'r', 'l', 'd', '!',
7265 }; 6503 };
7266 // clang-format on 6504 // clang-format on
7267 6505
7268 QuicFramerFuzzFunc(packet, arraysize(packet)); 6506 QuicFramerFuzzFunc(packet, arraysize(packet));
7269 } 6507 }
7270 6508
7271 } // namespace test 6509 } // namespace test
7272 } // namespace net 6510 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/core/quic_framer.cc ('k') | net/quic/core/quic_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698