OLD | NEW |
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include <algorithm> | 5 #include <algorithm> |
6 #include <map> | 6 #include <map> |
7 #include <string> | 7 #include <string> |
8 #include <vector> | 8 #include <vector> |
9 | 9 |
10 #include "base/containers/hash_tables.h" | 10 #include "base/containers/hash_tables.h" |
(...skipping 24 matching lines...) Expand all Loading... |
35 namespace test { | 35 namespace test { |
36 | 36 |
37 const QuicPacketSequenceNumber kEpoch = GG_UINT64_C(1) << 48; | 37 const QuicPacketSequenceNumber kEpoch = GG_UINT64_C(1) << 48; |
38 const QuicPacketSequenceNumber kMask = kEpoch - 1; | 38 const QuicPacketSequenceNumber kMask = kEpoch - 1; |
39 | 39 |
40 // Index into the guid offset in the header. | 40 // Index into the guid offset in the header. |
41 const size_t kGuidOffset = kPublicFlagsSize; | 41 const size_t kGuidOffset = kPublicFlagsSize; |
42 // Index into the version string in the header. (if present). | 42 // Index into the version string in the header. (if present). |
43 const size_t kVersionOffset = kGuidOffset + PACKET_8BYTE_GUID; | 43 const size_t kVersionOffset = kGuidOffset + PACKET_8BYTE_GUID; |
44 | 44 |
| 45 // Size in bytes of the stream frame fields for an arbitrary StreamID and |
| 46 // offset and the last frame in a packet. |
| 47 size_t GetMinStreamFrameSize(QuicVersion version) { |
| 48 return kQuicFrameTypeSize + kQuicMaxStreamIdSize + kQuicMaxStreamOffsetSize; |
| 49 } |
| 50 |
45 // Index into the sequence number offset in the header. | 51 // Index into the sequence number offset in the header. |
46 size_t GetSequenceNumberOffset(QuicGuidLength guid_length, | 52 size_t GetSequenceNumberOffset(QuicGuidLength guid_length, |
47 bool include_version) { | 53 bool include_version) { |
48 return kGuidOffset + guid_length + | 54 return kGuidOffset + guid_length + |
49 (include_version ? kQuicVersionSize : 0); | 55 (include_version ? kQuicVersionSize : 0); |
50 } | 56 } |
51 | 57 |
52 size_t GetSequenceNumberOffset(bool include_version) { | 58 size_t GetSequenceNumberOffset(bool include_version) { |
53 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version); | 59 return GetSequenceNumberOffset(PACKET_8BYTE_GUID, include_version); |
54 } | 60 } |
(...skipping 138 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
193 } | 199 } |
194 | 200 |
195 virtual ~TestQuicVisitor() { | 201 virtual ~TestQuicVisitor() { |
196 STLDeleteElements(&stream_frames_); | 202 STLDeleteElements(&stream_frames_); |
197 STLDeleteElements(&ack_frames_); | 203 STLDeleteElements(&ack_frames_); |
198 STLDeleteElements(&congestion_feedback_frames_); | 204 STLDeleteElements(&congestion_feedback_frames_); |
199 STLDeleteElements(&fec_data_); | 205 STLDeleteElements(&fec_data_); |
200 } | 206 } |
201 | 207 |
202 virtual void OnError(QuicFramer* f) OVERRIDE { | 208 virtual void OnError(QuicFramer* f) OVERRIDE { |
203 DLOG(INFO) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) | 209 DVLOG(1) << "QuicFramer Error: " << QuicUtils::ErrorToString(f->error()) |
204 << " (" << f->error() << ")"; | 210 << " (" << f->error() << ")"; |
205 error_count_++; | 211 error_count_++; |
206 } | 212 } |
207 | 213 |
208 virtual void OnPacket() OVERRIDE {} | 214 virtual void OnPacket() OVERRIDE {} |
209 | 215 |
210 virtual void OnPublicResetPacket( | 216 virtual void OnPublicResetPacket( |
211 const QuicPublicResetPacket& packet) OVERRIDE { | 217 const QuicPublicResetPacket& packet) OVERRIDE { |
212 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); | 218 public_reset_packet_.reset(new QuicPublicResetPacket(packet)); |
213 } | 219 } |
214 | 220 |
215 virtual void OnVersionNegotiationPacket( | 221 virtual void OnVersionNegotiationPacket( |
216 const QuicVersionNegotiationPacket& packet) OVERRIDE { | 222 const QuicVersionNegotiationPacket& packet) OVERRIDE { |
217 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); | 223 version_negotiation_packet_.reset(new QuicVersionNegotiationPacket(packet)); |
218 } | 224 } |
219 | 225 |
220 virtual void OnRevivedPacket() OVERRIDE { | 226 virtual void OnRevivedPacket() OVERRIDE { |
221 revived_packets_++; | 227 revived_packets_++; |
222 } | 228 } |
223 | 229 |
224 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE { | 230 virtual bool OnProtocolVersionMismatch(QuicVersion version) OVERRIDE { |
225 DLOG(INFO) << "QuicFramer Version Mismatch, version: " << version; | 231 DVLOG(1) << "QuicFramer Version Mismatch, version: " << version; |
226 version_mismatch_++; | 232 version_mismatch_++; |
227 return true; | 233 return true; |
228 } | 234 } |
229 | 235 |
230 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { | |
231 packet_count_++; | |
232 header_.reset(new QuicPacketHeader(header)); | |
233 return accept_packet_; | |
234 } | |
235 | |
236 virtual bool OnUnauthenticatedPublicHeader( | 236 virtual bool OnUnauthenticatedPublicHeader( |
237 const QuicPacketPublicHeader& header) OVERRIDE { | 237 const QuicPacketPublicHeader& header) OVERRIDE { |
238 public_header_.reset(new QuicPacketPublicHeader(header)); | 238 public_header_.reset(new QuicPacketPublicHeader(header)); |
239 return accept_public_header_; | 239 return accept_public_header_; |
240 } | 240 } |
241 | 241 |
242 virtual bool OnUnauthenticatedHeader( | 242 virtual bool OnUnauthenticatedHeader( |
243 const QuicPacketHeader& header) OVERRIDE { | 243 const QuicPacketHeader& header) OVERRIDE { |
244 return true; | 244 return true; |
245 } | 245 } |
246 | 246 |
| 247 virtual bool OnPacketHeader(const QuicPacketHeader& header) OVERRIDE { |
| 248 packet_count_++; |
| 249 header_.reset(new QuicPacketHeader(header)); |
| 250 return accept_packet_; |
| 251 } |
| 252 |
247 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { | 253 virtual bool OnStreamFrame(const QuicStreamFrame& frame) OVERRIDE { |
248 frame_count_++; | 254 frame_count_++; |
249 stream_frames_.push_back(new QuicStreamFrame(frame)); | 255 stream_frames_.push_back(new QuicStreamFrame(frame)); |
250 return true; | 256 return true; |
251 } | 257 } |
252 | 258 |
253 virtual void OnFecProtectedPayload(StringPiece payload) OVERRIDE { | 259 virtual void OnFecProtectedPayload(StringPiece payload) OVERRIDE { |
254 fec_protected_payload_ = payload.as_string(); | 260 fec_protected_payload_ = payload.as_string(); |
255 } | 261 } |
256 | 262 |
(...skipping 2038 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2295 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); | 2301 EXPECT_TRUE(visitor_.public_reset_packet_->public_header.reset_flag); |
2296 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); | 2302 EXPECT_FALSE(visitor_.public_reset_packet_->public_header.version_flag); |
2297 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), | 2303 EXPECT_EQ(GG_UINT64_C(0xABCDEF0123456789), |
2298 visitor_.public_reset_packet_->nonce_proof); | 2304 visitor_.public_reset_packet_->nonce_proof); |
2299 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), | 2305 EXPECT_EQ(GG_UINT64_C(0x123456789ABC), |
2300 visitor_.public_reset_packet_->rejected_sequence_number); | 2306 visitor_.public_reset_packet_->rejected_sequence_number); |
2301 | 2307 |
2302 // Now test framing boundaries | 2308 // Now test framing boundaries |
2303 for (size_t i = 0; i < GetPublicResetPacketSize(); ++i) { | 2309 for (size_t i = 0; i < GetPublicResetPacketSize(); ++i) { |
2304 string expected_error; | 2310 string expected_error; |
2305 DLOG(INFO) << "iteration: " << i; | 2311 DVLOG(1) << "iteration: " << i; |
2306 if (i < kGuidOffset) { | 2312 if (i < kGuidOffset) { |
2307 expected_error = "Unable to read public flags."; | 2313 expected_error = "Unable to read public flags."; |
2308 CheckProcessingFails(packet, i, expected_error, | 2314 CheckProcessingFails(packet, i, expected_error, |
2309 QUIC_INVALID_PACKET_HEADER); | 2315 QUIC_INVALID_PACKET_HEADER); |
2310 } else if (i < kPublicResetPacketNonceProofOffset) { | 2316 } else if (i < kPublicResetPacketNonceProofOffset) { |
2311 expected_error = "Unable to read GUID."; | 2317 expected_error = "Unable to read GUID."; |
2312 CheckProcessingFails(packet, i, expected_error, | 2318 CheckProcessingFails(packet, i, expected_error, |
2313 QUIC_INVALID_PACKET_HEADER); | 2319 QUIC_INVALID_PACKET_HEADER); |
2314 } else if (i < kPublicResetPacketRejectedSequenceNumberOffset) { | 2320 } else if (i < kPublicResetPacketRejectedSequenceNumberOffset) { |
2315 expected_error = "Unable to read nonce proof."; | 2321 expected_error = "Unable to read nonce proof."; |
(...skipping 958 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3274 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, | 3280 QuicPacket::NewDataPacket(AsChars(packet), arraysize(packet), false, |
3275 PACKET_8BYTE_GUID, kIncludeVersion, | 3281 PACKET_8BYTE_GUID, kIncludeVersion, |
3276 PACKET_6BYTE_SEQUENCE_NUMBER)); | 3282 PACKET_6BYTE_SEQUENCE_NUMBER)); |
3277 scoped_ptr<QuicEncryptedPacket> encrypted( | 3283 scoped_ptr<QuicEncryptedPacket> encrypted( |
3278 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); | 3284 framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number, *raw)); |
3279 | 3285 |
3280 ASSERT_TRUE(encrypted.get() != NULL); | 3286 ASSERT_TRUE(encrypted.get() != NULL); |
3281 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); | 3287 EXPECT_TRUE(CheckEncryption(sequence_number, raw.get())); |
3282 } | 3288 } |
3283 | 3289 |
3284 // TODO(rch) enable after landing the revised truncation CL. | 3290 TEST_P(QuicFramerTest, Truncation) { |
3285 TEST_P(QuicFramerTest, DISABLED_Truncation) { | |
3286 QuicPacketHeader header; | 3291 QuicPacketHeader header; |
3287 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); | 3292 header.public_header.guid = GG_UINT64_C(0xFEDCBA9876543210); |
3288 header.public_header.reset_flag = false; | 3293 header.public_header.reset_flag = false; |
3289 header.public_header.version_flag = false; | 3294 header.public_header.version_flag = false; |
3290 header.fec_flag = false; | 3295 header.fec_flag = false; |
3291 header.entropy_flag = false; | 3296 header.entropy_flag = false; |
3292 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); | 3297 header.packet_sequence_number = GG_UINT64_C(0x123456789ABC); |
3293 header.fec_group = 0; | 3298 header.fec_group = 0; |
3294 | 3299 |
3295 QuicAckFrame ack_frame; | 3300 QuicAckFrame ack_frame; |
(...skipping 211 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3507 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); | 3512 EXPECT_CALL(visitor, OnAckFrame(_)).Times(0); |
3508 EXPECT_CALL(visitor, OnPacketComplete()); | 3513 EXPECT_CALL(visitor, OnPacketComplete()); |
3509 | 3514 |
3510 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); | 3515 QuicEncryptedPacket encrypted(AsChars(packet), arraysize(packet), false); |
3511 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); | 3516 EXPECT_TRUE(framer_.ProcessPacket(encrypted)); |
3512 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); | 3517 EXPECT_EQ(QUIC_NO_ERROR, framer_.error()); |
3513 } | 3518 } |
3514 | 3519 |
3515 } // namespace test | 3520 } // namespace test |
3516 } // namespace net | 3521 } // namespace net |
OLD | NEW |