| 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 "net/quic/core/quic_packet_creator.h" | 5 #include "net/quic/core/quic_packet_creator.h" |
| 6 | 6 |
| 7 #include <cstdint> | 7 #include <cstdint> |
| 8 #include <memory> | 8 #include <memory> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 158 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 169 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); | 169 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); |
| 170 EXPECT_EQ(data, StringPiece(frame.stream_frame->data_buffer, | 170 EXPECT_EQ(data, StringPiece(frame.stream_frame->data_buffer, |
| 171 frame.stream_frame->data_length)); | 171 frame.stream_frame->data_length)); |
| 172 EXPECT_EQ(offset, frame.stream_frame->offset); | 172 EXPECT_EQ(offset, frame.stream_frame->offset); |
| 173 EXPECT_EQ(fin, frame.stream_frame->fin); | 173 EXPECT_EQ(fin, frame.stream_frame->fin); |
| 174 } | 174 } |
| 175 | 175 |
| 176 // Returns the number of bytes consumed by the header of packet, including | 176 // Returns the number of bytes consumed by the header of packet, including |
| 177 // the version. | 177 // the version. |
| 178 size_t GetPacketHeaderOverhead(QuicVersion version) { | 178 size_t GetPacketHeaderOverhead(QuicVersion version) { |
| 179 if (FLAGS_quic_simple_packet_number_length_2) { | 179 return GetPacketHeaderSize( |
| 180 return GetPacketHeaderSize( | 180 version, creator_.connection_id_length(), kIncludeVersion, |
| 181 version, creator_.connection_id_length(), kIncludeVersion, | 181 !kIncludePathId, !kIncludeDiversificationNonce, |
| 182 !kIncludePathId, !kIncludeDiversificationNonce, | 182 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 183 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | |
| 184 } else { | |
| 185 return GetPacketHeaderSize( | |
| 186 version, creator_.connection_id_length(), kIncludeVersion, | |
| 187 !kIncludePathId, !kIncludeDiversificationNonce, | |
| 188 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 189 } | |
| 190 } | 183 } |
| 191 | 184 |
| 192 // Returns the number of bytes of overhead that will be added to a packet | 185 // Returns the number of bytes of overhead that will be added to a packet |
| 193 // of maximum length. | 186 // of maximum length. |
| 194 size_t GetEncryptionOverhead() { | 187 size_t GetEncryptionOverhead() { |
| 195 return creator_.max_packet_length() - | 188 return creator_.max_packet_length() - |
| 196 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 189 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 197 } | 190 } |
| 198 | 191 |
| 199 // Returns the number of bytes consumed by the non-data fields of a stream | 192 // Returns the number of bytes consumed by the non-data fields of a stream |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 263 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 271 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 264 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 272 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 265 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 273 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 266 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 274 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 267 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 275 } | 268 } |
| 276 ProcessPacket(serialized); | 269 ProcessPacket(serialized); |
| 277 } | 270 } |
| 278 } | 271 } |
| 279 | 272 |
| 280 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { | |
| 281 FLAGS_quic_simple_packet_number_length_2 = false; | |
| 282 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); | |
| 283 creator_.AddSavedFrame(frames_[0]); | |
| 284 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | |
| 285 PACKET_4BYTE_PACKET_NUMBER); | |
| 286 | |
| 287 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | |
| 288 .WillRepeatedly( | |
| 289 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | |
| 290 creator_.Flush(); | |
| 291 // The packet number length will not change mid-packet. | |
| 292 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 293 serialized_packet_.packet_number_length); | |
| 294 | |
| 295 { | |
| 296 InSequence s; | |
| 297 EXPECT_CALL(framer_visitor_, OnPacket()); | |
| 298 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | |
| 299 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | |
| 300 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | |
| 301 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | |
| 302 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | |
| 303 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | |
| 304 } | |
| 305 ProcessPacket(serialized_packet_); | |
| 306 DeleteSerializedPacket(); | |
| 307 | |
| 308 creator_.AddSavedFrame(frames_[0]); | |
| 309 creator_.Flush(); | |
| 310 // Now the actual packet number length should have changed. | |
| 311 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | |
| 312 serialized_packet_.packet_number_length); | |
| 313 delete frames_[0].ack_frame; | |
| 314 | |
| 315 { | |
| 316 InSequence s; | |
| 317 EXPECT_CALL(framer_visitor_, OnPacket()); | |
| 318 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | |
| 319 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | |
| 320 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | |
| 321 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | |
| 322 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | |
| 323 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | |
| 324 } | |
| 325 ProcessPacket(serialized_packet_); | |
| 326 DeleteSerializedPacket(); | |
| 327 } | |
| 328 | |
| 329 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { | |
| 330 FLAGS_quic_simple_packet_number_length_2 = false; | |
| 331 // Changing the packet number length with queued frames in the creator | |
| 332 // should hold the change until after any currently queued frames are | |
| 333 // serialized. | |
| 334 | |
| 335 // Packet 1. | |
| 336 // Queue a frame in the creator. | |
| 337 EXPECT_FALSE(creator_.HasPendingFrames()); | |
| 338 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); | |
| 339 creator_.AddSavedFrame(ack_frame); | |
| 340 | |
| 341 // Now change packet number length. | |
| 342 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | |
| 343 PACKET_4BYTE_PACKET_NUMBER); | |
| 344 | |
| 345 // Add a STOP_WAITING frame since it contains a packet number, | |
| 346 // whose length should be 1. | |
| 347 QuicStopWaitingFrame stop_waiting_frame; | |
| 348 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); | |
| 349 EXPECT_TRUE(creator_.HasPendingFrames()); | |
| 350 | |
| 351 // Ensure the packet is successfully created. | |
| 352 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | |
| 353 .WillRepeatedly( | |
| 354 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | |
| 355 creator_.Flush(); | |
| 356 ASSERT_TRUE(serialized_packet_.encrypted_buffer); | |
| 357 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 358 serialized_packet_.packet_number_length); | |
| 359 | |
| 360 // Verify that header in transmitted packet has 1 byte sequence length. | |
| 361 QuicPacketHeader header; | |
| 362 { | |
| 363 InSequence s; | |
| 364 EXPECT_CALL(framer_visitor_, OnPacket()); | |
| 365 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | |
| 366 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | |
| 367 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | |
| 368 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)) | |
| 369 .WillOnce(DoAll(SaveArg<0>(&header), Return(true))); | |
| 370 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | |
| 371 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); | |
| 372 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | |
| 373 } | |
| 374 ProcessPacket(serialized_packet_); | |
| 375 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 376 header.public_header.packet_number_length); | |
| 377 DeleteSerializedPacket(); | |
| 378 | |
| 379 // Packet 2. | |
| 380 EXPECT_FALSE(creator_.HasPendingFrames()); | |
| 381 // Generate Packet 2 with one frame -- packet number length should now | |
| 382 // change to 4 bytes. | |
| 383 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); | |
| 384 EXPECT_TRUE(creator_.HasPendingFrames()); | |
| 385 | |
| 386 // Ensure the packet is successfully created. | |
| 387 creator_.Flush(); | |
| 388 ASSERT_TRUE(serialized_packet_.encrypted_buffer); | |
| 389 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | |
| 390 serialized_packet_.packet_number_length); | |
| 391 | |
| 392 // Verify that header in transmitted packet has 4 byte sequence length. | |
| 393 { | |
| 394 InSequence s; | |
| 395 EXPECT_CALL(framer_visitor_, OnPacket()); | |
| 396 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | |
| 397 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | |
| 398 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | |
| 399 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)) | |
| 400 .WillOnce(DoAll(SaveArg<0>(&header), Return(true))); | |
| 401 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); | |
| 402 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | |
| 403 } | |
| 404 ProcessPacket(serialized_packet_); | |
| 405 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | |
| 406 header.public_header.packet_number_length); | |
| 407 | |
| 408 DeleteSerializedPacket(); | |
| 409 delete ack_frame.ack_frame; | |
| 410 } | |
| 411 | |
| 412 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacketDoesNothing) { | |
| 413 FLAGS_quic_simple_packet_number_length_2 = true; | |
| 414 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 415 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | |
| 416 // Changing the packet number length with queued frames in the creator | |
| 417 // should do nothing. | |
| 418 EXPECT_FALSE(creator_.HasPendingFrames()); | |
| 419 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); | |
| 420 creator_.AddSavedFrame(ack_frame); | |
| 421 | |
| 422 // Now change packet number length and expect a QUIC_BUG and no change in | |
| 423 // packet number length. | |
| 424 EXPECT_QUIC_BUG(creator_.UpdatePacketNumberLength(0, 256), | |
| 425 "Called UpdatePacketNumberLength with 1 queued_frames."); | |
| 426 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 427 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | |
| 428 delete ack_frame.ack_frame; | |
| 429 } | |
| 430 | |
| 431 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { | 273 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { |
| 432 // If the original packet number length, the current packet number | 274 // If the original packet number length, the current packet number |
| 433 // length, and the configured send packet number length are different, the | 275 // length, and the configured send packet number length are different, the |
| 434 // retransmit must sent with the original length and the others do not change. | 276 // retransmit must sent with the original length and the others do not change. |
| 435 if (!FLAGS_quic_simple_packet_number_length_2) { | |
| 436 QuicPacketCreatorPeer::SetNextPacketNumberLength( | |
| 437 &creator_, PACKET_4BYTE_PACKET_NUMBER); | |
| 438 } | |
| 439 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, | 277 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, |
| 440 PACKET_2BYTE_PACKET_NUMBER); | 278 PACKET_2BYTE_PACKET_NUMBER); |
| 441 QuicStreamFrame* stream_frame = | 279 QuicStreamFrame* stream_frame = |
| 442 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); | 280 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); |
| 443 QuicFrames frames; | 281 QuicFrames frames; |
| 444 frames.push_back(QuicFrame(stream_frame)); | 282 frames.push_back(QuicFrame(stream_frame)); |
| 445 char buffer[kMaxPacketSize]; | 283 char buffer[kMaxPacketSize]; |
| 446 PendingRetransmission retransmission(CreateRetransmission( | 284 PendingRetransmission retransmission(CreateRetransmission( |
| 447 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, | 285 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, |
| 448 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER)); | 286 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER)); |
| 449 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 287 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 450 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 288 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 451 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 289 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 452 if (FLAGS_quic_simple_packet_number_length_2) { | 290 // The packet number length is updated after every packet is sent, |
| 453 // The packet number length is updated after every packet is sent, | 291 // so there is no need to restore the old length after sending. |
| 454 // so there is no need to restore the old length after sending. | 292 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 455 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 293 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 456 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | |
| 457 } else { | |
| 458 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | |
| 459 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 460 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | |
| 461 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | |
| 462 } | |
| 463 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 294 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 464 serialized_packet_.packet_number_length); | 295 serialized_packet_.packet_number_length); |
| 465 | 296 |
| 466 { | 297 { |
| 467 InSequence s; | 298 InSequence s; |
| 468 EXPECT_CALL(framer_visitor_, OnPacket()); | 299 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 469 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 300 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 470 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 301 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 471 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 302 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 472 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 303 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| (...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 541 | 372 |
| 542 const int kNumPaddingBytes1 = 4; | 373 const int kNumPaddingBytes1 = 4; |
| 543 int packet_size = 0; | 374 int packet_size = 0; |
| 544 { | 375 { |
| 545 QuicFrames frames; | 376 QuicFrames frames; |
| 546 frames.push_back(frame); | 377 frames.push_back(frame); |
| 547 char buffer[kMaxPacketSize]; | 378 char buffer[kMaxPacketSize]; |
| 548 PendingRetransmission retransmission(CreateRetransmission( | 379 PendingRetransmission retransmission(CreateRetransmission( |
| 549 frames, false /* has_crypto_handshake */, | 380 frames, false /* has_crypto_handshake */, |
| 550 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE, | 381 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE, |
| 551 FLAGS_quic_simple_packet_number_length_2 | 382 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); |
| 552 ? QuicPacketCreatorPeer::GetPacketNumberLength(&creator_) | |
| 553 : QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | |
| 554 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 383 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 555 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 384 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 556 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 385 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 557 packet_size = serialized_packet_.encrypted_length; | 386 packet_size = serialized_packet_.encrypted_length; |
| 558 } | 387 } |
| 559 | 388 |
| 560 const int kNumPaddingBytes2 = 44; | 389 const int kNumPaddingBytes2 = 44; |
| 561 QuicFrames frames; | 390 QuicFrames frames; |
| 562 frames.push_back(frame); | 391 frames.push_back(frame); |
| 563 char buffer[kMaxPacketSize]; | 392 char buffer[kMaxPacketSize]; |
| (...skipping 241 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 805 { | 634 { |
| 806 InSequence s; | 635 InSequence s; |
| 807 EXPECT_CALL(framer_visitor_, OnPacket()); | 636 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 808 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 637 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 809 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); | 638 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); |
| 810 } | 639 } |
| 811 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_CLIENT); | 640 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_CLIENT); |
| 812 client_framer_.ProcessPacket(*encrypted); | 641 client_framer_.ProcessPacket(*encrypted); |
| 813 } | 642 } |
| 814 | 643 |
| 815 TEST_P(QuicPacketCreatorTest, UpdatePacketNumberLengthLeastAwaiting_Old) { | |
| 816 FLAGS_quic_simple_packet_number_length_2 = false; | |
| 817 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 818 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 819 | |
| 820 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64); | |
| 821 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | |
| 822 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 823 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 824 | |
| 825 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256); | |
| 826 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | |
| 827 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | |
| 828 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 829 | |
| 830 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 * 256); | |
| 831 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | |
| 832 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | |
| 833 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 834 | |
| 835 QuicPacketCreatorPeer::SetPacketNumber(&creator_, | |
| 836 UINT64_C(64) * 256 * 256 * 256 * 256); | |
| 837 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | |
| 838 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | |
| 839 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 840 } | |
| 841 | |
| 842 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth_old) { | |
| 843 FLAGS_quic_simple_packet_number_length_2 = false; | |
| 844 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 845 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 846 | |
| 847 creator_.UpdatePacketNumberLength(1, 10000 / kDefaultMaxPacketSize); | |
| 848 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 849 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 850 | |
| 851 creator_.UpdatePacketNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); | |
| 852 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | |
| 853 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 854 | |
| 855 creator_.UpdatePacketNumberLength(1, | |
| 856 10000 * 256 * 256 / kDefaultMaxPacketSize); | |
| 857 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | |
| 858 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 859 | |
| 860 creator_.UpdatePacketNumberLength( | |
| 861 1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); | |
| 862 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | |
| 863 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 864 } | |
| 865 | |
| 866 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { | 644 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { |
| 867 FLAGS_quic_simple_packet_number_length_2 = true; | |
| 868 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 645 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 869 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 646 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 870 | 647 |
| 871 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64); | 648 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64); |
| 872 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 649 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 873 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 650 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 874 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 651 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 875 | 652 |
| 876 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256); | 653 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256); |
| 877 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 654 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 878 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 655 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 879 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 656 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 880 | 657 |
| 881 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 * 256); | 658 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 * 256); |
| 882 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 659 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 883 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 660 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 884 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 661 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 885 | 662 |
| 886 QuicPacketCreatorPeer::SetPacketNumber(&creator_, | 663 QuicPacketCreatorPeer::SetPacketNumber(&creator_, |
| 887 UINT64_C(64) * 256 * 256 * 256 * 256); | 664 UINT64_C(64) * 256 * 256 * 256 * 256); |
| 888 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 665 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 889 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | 666 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
| 890 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 667 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 891 } | 668 } |
| 892 | 669 |
| 893 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthCwnd) { | 670 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthCwnd) { |
| 894 FLAGS_quic_simple_packet_number_length_2 = true; | |
| 895 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 671 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 896 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 672 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 897 | 673 |
| 898 creator_.UpdatePacketNumberLength(1, 10000 / kDefaultMaxPacketSize); | 674 creator_.UpdatePacketNumberLength(1, 10000 / kDefaultMaxPacketSize); |
| 899 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 675 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 900 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 676 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 901 | 677 |
| 902 creator_.UpdatePacketNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); | 678 creator_.UpdatePacketNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); |
| 903 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 679 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 904 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 680 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| (...skipping 308 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1213 | 989 |
| 1214 // Does not change current path. | 990 // Does not change current path. |
| 1215 creator_.SetCurrentPath(kDefaultPathId, 2, 0); | 991 creator_.SetCurrentPath(kDefaultPathId, 2, 0); |
| 1216 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 992 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1217 EXPECT_TRUE(creator_.HasPendingFrames()); | 993 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1218 EXPECT_EQ(1u, creator_.packet_number()); | 994 EXPECT_EQ(1u, creator_.packet_number()); |
| 1219 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 995 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1220 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 996 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1221 } | 997 } |
| 1222 | 998 |
| 1223 TEST_P(QuicPacketCreatorTest, | |
| 1224 SetCurrentPathAndUpdatePacketSequenceNumberLength) { | |
| 1225 FLAGS_quic_simple_packet_number_length_2 = false; | |
| 1226 // Current path is the default path. | |
| 1227 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | |
| 1228 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 1229 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | |
| 1230 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 1231 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 1232 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2); | |
| 1233 // Add a stream frame to the creator and send the packet. | |
| 1234 QuicFrame frame; | |
| 1235 QuicIOVector io_vector(MakeIOVector("test")); | |
| 1236 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, | |
| 1237 false, &frame)); | |
| 1238 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | |
| 1239 .Times(1) | |
| 1240 .WillRepeatedly( | |
| 1241 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); | |
| 1242 creator_.Flush(); | |
| 1243 EXPECT_EQ(UINT64_C(64 * 256 - 1), creator_.packet_number()); | |
| 1244 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | |
| 1245 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | |
| 1246 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 1247 | |
| 1248 // Change current path. | |
| 1249 QuicPathId kPathId1 = 1; | |
| 1250 creator_.SetCurrentPath(kPathId1, 1, 0); | |
| 1251 EXPECT_EQ(0u, creator_.packet_number()); | |
| 1252 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | |
| 1253 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 1254 | |
| 1255 // Change current path back. | |
| 1256 creator_.SetCurrentPath(kDefaultPathId, 2, 10000 / kDefaultMaxPacketSize); | |
| 1257 EXPECT_EQ(UINT64_C(64 * 256 - 1), creator_.packet_number()); | |
| 1258 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | |
| 1259 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | |
| 1260 } | |
| 1261 | |
| 1262 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { | 999 TEST_P(QuicPacketCreatorTest, SerializePacketOnDifferentPath) { |
| 1263 // Current path is the default path. | 1000 // Current path is the default path. |
| 1264 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1001 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1265 EXPECT_EQ(0u, creator_.packet_number()); | 1002 EXPECT_EQ(0u, creator_.packet_number()); |
| 1266 // Add a stream frame to the creator and flush the packet. | 1003 // Add a stream frame to the creator and flush the packet. |
| 1267 QuicFrame frame; | 1004 QuicFrame frame; |
| 1268 QuicIOVector io_vector(MakeIOVector("test")); | 1005 QuicIOVector io_vector(MakeIOVector("test")); |
| 1269 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, | 1006 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, 0u, false, |
| 1270 false, &frame)); | 1007 false, &frame)); |
| 1271 ASSERT_TRUE(frame.stream_frame); | 1008 ASSERT_TRUE(frame.stream_frame); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1329 EXPECT_CALL(delegate_, | 1066 EXPECT_CALL(delegate_, |
| 1330 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); | 1067 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); |
| 1331 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u, | 1068 EXPECT_QUIC_BUG(creator_.ConsumeData(kCryptoStreamId, data_iovec, 0u, 0u, |
| 1332 false, false, &frame), | 1069 false, false, &frame), |
| 1333 "Client hello won't fit in a single packet."); | 1070 "Client hello won't fit in a single packet."); |
| 1334 } | 1071 } |
| 1335 | 1072 |
| 1336 } // namespace | 1073 } // namespace |
| 1337 } // namespace test | 1074 } // namespace test |
| 1338 } // namespace net | 1075 } // namespace net |
| OLD | NEW |