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

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

Issue 471293002: Landing Recent QUIC Changes. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 4 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
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/quic_framer.h" 5 #include "net/quic/quic_framer.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <map> 8 #include <map>
9 #include <string> 9 #include <string>
10 #include <vector> 10 #include <vector>
(...skipping 2026 matching lines...) Expand 10 before | Expand all | Expand 10 after
2037 expected_error = "Unable to read receive window."; 2037 expected_error = "Unable to read receive window.";
2038 } 2038 }
2039 CheckProcessingFails( 2039 CheckProcessingFails(
2040 packet, 2040 packet,
2041 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion, 2041 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2042 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 2042 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2043 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA); 2043 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
2044 } 2044 }
2045 } 2045 }
2046 2046
2047 TEST_P(QuicFramerTest, CongestionFeedbackFrameTimestamp) {
2048 unsigned char packet[] = {
2049 // public flags (8 byte connection_id)
2050 0x3C,
2051 // connection_id
2052 0x10, 0x32, 0x54, 0x76,
2053 0x98, 0xBA, 0xDC, 0xFE,
2054 // packet sequence number
2055 0xBC, 0x9A, 0x78, 0x56,
2056 0x34, 0x12,
2057 // private flags
2058 0x00,
2059
2060 // frame type (congestion feedback frame)
2061 0x20,
2062 // congestion feedback type (timestamp)
2063 0x01,
2064 // num received packets
2065 0x03,
2066 // lowest sequence number
2067 0xBA, 0x9A, 0x78, 0x56,
2068 0x34, 0x12,
2069 // receive time
2070 0x87, 0x96, 0xA5, 0xB4,
2071 0xC3, 0xD2, 0xE1, 0x07,
2072 // sequence delta
2073 0x01, 0x00,
2074 // time delta
2075 0x01, 0x00, 0x00, 0x00,
2076 // sequence delta (skip one packet)
2077 0x03, 0x00,
2078 // time delta
2079 0x02, 0x00, 0x00, 0x00,
2080 };
2081
2082 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
2083 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
2084
2085 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
2086 ASSERT_TRUE(visitor_.header_.get());
2087 EXPECT_TRUE(CheckDecryption(encrypted, !kIncludeVersion));
2088
2089 EXPECT_EQ(0u, visitor_.stream_frames_.size());
2090 ASSERT_EQ(1u, visitor_.congestion_feedback_frames_.size());
2091 const QuicCongestionFeedbackFrame& frame =
2092 *visitor_.congestion_feedback_frames_[0];
2093 ASSERT_EQ(kTimestamp, frame.type);
2094 ASSERT_EQ(3u, frame.timestamp.received_packet_times.size());
2095 TimeMap::const_iterator iter =
2096 frame.timestamp.received_packet_times.begin();
2097 EXPECT_EQ(GG_UINT64_C(0x0123456789ABA), iter->first);
2098 EXPECT_EQ(GG_INT64_C(0x07E1D2C3B4A59687),
2099 iter->second.Subtract(start_).ToMicroseconds());
2100 ++iter;
2101 EXPECT_EQ(GG_UINT64_C(0x0123456789ABB), iter->first);
2102 EXPECT_EQ(GG_INT64_C(0x07E1D2C3B4A59688),
2103 iter->second.Subtract(start_).ToMicroseconds());
2104 ++iter;
2105 EXPECT_EQ(GG_UINT64_C(0x0123456789ABD), iter->first);
2106 EXPECT_EQ(GG_INT64_C(0x07E1D2C3B4A59689),
2107 iter->second.Subtract(start_).ToMicroseconds());
2108
2109 // Now test framing boundaries
2110 for (size_t i = kQuicFrameTypeSize; i < 29; ++i) {
2111 string expected_error;
2112 if (i < 2) {
2113 expected_error = "Unable to read congestion feedback type.";
2114 } else if (i < 3) {
2115 expected_error = "Unable to read num received packets.";
2116 } else if (i < 9) {
2117 expected_error = "Unable to read smallest received.";
2118 } else if (i < 17) {
2119 expected_error = "Unable to read time received.";
2120 } else if (i < 19) {
2121 expected_error = "Unable to read sequence delta in received packets.";
2122 } else if (i < 23) {
2123 expected_error = "Unable to read time delta in received packets.";
2124 } else if (i < 25) {
2125 expected_error = "Unable to read sequence delta in received packets.";
2126 } else if (i < 29) {
2127 expected_error = "Unable to read time delta in received packets.";
2128 }
2129 CheckProcessingFails(
2130 packet,
2131 i + GetPacketHeaderSize(PACKET_8BYTE_CONNECTION_ID, !kIncludeVersion,
2132 PACKET_6BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP),
2133 expected_error, QUIC_INVALID_CONGESTION_FEEDBACK_DATA);
2134 }
2135 }
2136
2137 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) { 2047 TEST_P(QuicFramerTest, CongestionFeedbackFrameInvalidFeedback) {
2138 unsigned char packet[] = { 2048 unsigned char packet[] = {
2139 // public flags (8 byte connection_id) 2049 // public flags (8 byte connection_id)
2140 0x3C, 2050 0x3C,
2141 // connection_id 2051 // connection_id
2142 0x10, 0x32, 0x54, 0x76, 2052 0x10, 0x32, 0x54, 0x76,
2143 0x98, 0xBA, 0xDC, 0xFE, 2053 0x98, 0xBA, 0xDC, 0xFE,
2144 // packet sequence number 2054 // packet sequence number
2145 0xBC, 0x9A, 0x78, 0x56, 2055 0xBC, 0x9A, 0x78, 0x56,
2146 0x34, 0x12, 2056 0x34, 0x12,
(...skipping 1274 matching lines...) Expand 10 before | Expand all | Expand 10 after
3421 }; 3331 };
3422 3332
3423 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames)); 3333 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3424 ASSERT_TRUE(data != NULL); 3334 ASSERT_TRUE(data != NULL);
3425 3335
3426 test::CompareCharArraysWithHexError("constructed packet", 3336 test::CompareCharArraysWithHexError("constructed packet",
3427 data->data(), data->length(), 3337 data->data(), data->length(),
3428 AsChars(packet), arraysize(packet)); 3338 AsChars(packet), arraysize(packet));
3429 } 3339 }
3430 3340
3431 TEST_P(QuicFramerTest, BuildCongestionFeedbackFramePacketTimestamp) {
3432 QuicPacketHeader header;
3433 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3434 header.public_header.reset_flag = false;
3435 header.public_header.version_flag = false;
3436 header.fec_flag = false;
3437 header.entropy_flag = false;
3438 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC);
3439 header.fec_group = 0;
3440
3441 QuicCongestionFeedbackFrame frame;
3442 frame.type = kTimestamp;
3443 frame.timestamp.received_packet_times.insert(
3444 make_pair(GG_UINT64_C(0x0123456789ABA),
3445 start_.Add(QuicTime::Delta::FromMicroseconds(
3446 GG_UINT64_C(0x07E1D2C3B4A59687)))));
3447 frame.timestamp.received_packet_times.insert(
3448 make_pair(GG_UINT64_C(0x0123456789ABB),
3449 start_.Add(QuicTime::Delta::FromMicroseconds(
3450 GG_UINT64_C(0x07E1D2C3B4A59688)))));
3451 frame.timestamp.received_packet_times.insert(
3452 make_pair(GG_UINT64_C(0x0123456789ABD),
3453 start_.Add(QuicTime::Delta::FromMicroseconds(
3454 GG_UINT64_C(0x07E1D2C3B4A59689)))));
3455 QuicFrames frames;
3456 frames.push_back(QuicFrame(&frame));
3457
3458 unsigned char packet[] = {
3459 // public flags (8 byte connection_id)
3460 0x3C,
3461 // connection_id
3462 0x10, 0x32, 0x54, 0x76,
3463 0x98, 0xBA, 0xDC, 0xFE,
3464 // packet sequence number
3465 0xBC, 0x9A, 0x78, 0x56,
3466 0x34, 0x12,
3467 // private flags
3468 0x00,
3469
3470 // frame type (congestion feedback frame)
3471 0x20,
3472 // congestion feedback type (timestamp)
3473 0x01,
3474 // num received packets
3475 0x03,
3476 // lowest sequence number
3477 0xBA, 0x9A, 0x78, 0x56,
3478 0x34, 0x12,
3479 // receive time
3480 0x87, 0x96, 0xA5, 0xB4,
3481 0xC3, 0xD2, 0xE1, 0x07,
3482 // sequence delta
3483 0x01, 0x00,
3484 // time delta
3485 0x01, 0x00, 0x00, 0x00,
3486 // sequence delta (skip one packet)
3487 0x03, 0x00,
3488 // time delta
3489 0x02, 0x00, 0x00, 0x00,
3490 };
3491
3492 scoped_ptr<QuicPacket> data(BuildDataPacket(header, frames));
3493 ASSERT_TRUE(data != NULL);
3494
3495 test::CompareCharArraysWithHexError("constructed packet",
3496 data->data(), data->length(),
3497 AsChars(packet), arraysize(packet));
3498 }
3499
3500 TEST_P(QuicFramerTest, BuildStopWaitingPacket) { 3341 TEST_P(QuicFramerTest, BuildStopWaitingPacket) {
3501 QuicPacketHeader header; 3342 QuicPacketHeader header;
3502 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210); 3343 header.public_header.connection_id = GG_UINT64_C(0xFEDCBA9876543210);
3503 header.public_header.reset_flag = false; 3344 header.public_header.reset_flag = false;
3504 header.public_header.version_flag = false; 3345 header.public_header.version_flag = false;
3505 header.fec_flag = false; 3346 header.fec_flag = false;
3506 header.entropy_flag = true; 3347 header.entropy_flag = true;
3507 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8); 3348 header.packet_sequence_number = GG_UINT64_C(0x770123456789AA8);
3508 header.fec_group = 0; 3349 header.fec_group = 0;
3509 3350
(...skipping 816 matching lines...) Expand 10 before | Expand all | Expand 10 after
4326 EXPECT_CALL(visitor, OnPacketComplete()); 4167 EXPECT_CALL(visitor, OnPacketComplete());
4327 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true)); 4168 EXPECT_CALL(visitor, OnUnauthenticatedPublicHeader(_)).WillOnce(Return(true));
4328 4169
4329 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); 4170 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false);
4330 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); 4171 EXPECT_TRUE(framer_.ProcessPacket(encrypted));
4331 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); 4172 EXPECT_EQ(QUIC_NO_ERROR, framer_.error());
4332 } 4173 }
4333 4174
4334 } // namespace test 4175 } // namespace test
4335 } // namespace net 4176 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_framer.cc ('k') | net/quic/quic_protocol.h » ('j') | net/quic/quic_protocol.h » ('J')

Powered by Google App Engine
This is Rietveld 408576698