| 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/quic_packet_creator.h" | 5 #include "net/quic/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 161 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 172 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); | 172 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); |
| 173 EXPECT_EQ(data, StringPiece(frame.stream_frame->data_buffer, | 173 EXPECT_EQ(data, StringPiece(frame.stream_frame->data_buffer, |
| 174 frame.stream_frame->data_length)); | 174 frame.stream_frame->data_length)); |
| 175 EXPECT_EQ(offset, frame.stream_frame->offset); | 175 EXPECT_EQ(offset, frame.stream_frame->offset); |
| 176 EXPECT_EQ(fin, frame.stream_frame->fin); | 176 EXPECT_EQ(fin, frame.stream_frame->fin); |
| 177 } | 177 } |
| 178 | 178 |
| 179 // Returns the number of bytes consumed by the header of packet, including | 179 // Returns the number of bytes consumed by the header of packet, including |
| 180 // the version. | 180 // the version. |
| 181 size_t GetPacketHeaderOverhead(QuicVersion version) { | 181 size_t GetPacketHeaderOverhead(QuicVersion version) { |
| 182 return GetPacketHeaderSize( | 182 if (FLAGS_quic_simple_packet_number_length) { |
| 183 version, creator_.connection_id_length(), kIncludeVersion, | 183 return GetPacketHeaderSize( |
| 184 !kIncludePathId, !kIncludeDiversificationNonce, | 184 version, creator_.connection_id_length(), kIncludeVersion, |
| 185 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 185 !kIncludePathId, !kIncludeDiversificationNonce, |
| 186 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 187 } else { |
| 188 return GetPacketHeaderSize( |
| 189 version, creator_.connection_id_length(), kIncludeVersion, |
| 190 !kIncludePathId, !kIncludeDiversificationNonce, |
| 191 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 192 } |
| 186 } | 193 } |
| 187 | 194 |
| 188 // Returns the number of bytes of overhead that will be added to a packet | 195 // Returns the number of bytes of overhead that will be added to a packet |
| 189 // of maximum length. | 196 // of maximum length. |
| 190 size_t GetEncryptionOverhead() { | 197 size_t GetEncryptionOverhead() { |
| 191 return creator_.max_packet_length() - | 198 return creator_.max_packet_length() - |
| 192 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 199 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 193 } | 200 } |
| 194 | 201 |
| 195 // Returns the number of bytes consumed by the non-data fields of a stream | 202 // 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... |
| 266 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 273 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 267 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 274 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 268 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 275 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 269 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 276 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 270 } | 277 } |
| 271 ProcessPacket(serialized); | 278 ProcessPacket(serialized); |
| 272 } | 279 } |
| 273 } | 280 } |
| 274 | 281 |
| 275 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { | 282 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { |
| 283 FLAGS_quic_simple_packet_number_length = false; |
| 276 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); | 284 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 277 creator_.AddSavedFrame(frames_[0]); | 285 creator_.AddSavedFrame(frames_[0]); |
| 278 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 286 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, |
| 279 PACKET_4BYTE_PACKET_NUMBER); | 287 PACKET_4BYTE_PACKET_NUMBER); |
| 280 | 288 |
| 281 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 289 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 282 .WillRepeatedly( | 290 .WillRepeatedly( |
| 283 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 291 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 284 creator_.Flush(); | 292 creator_.Flush(); |
| 285 // The packet number length will not change mid-packet. | 293 // The packet number length will not change mid-packet. |
| (...skipping 28 matching lines...) Expand all Loading... |
| 314 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 322 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 315 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 323 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 316 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 324 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 317 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 325 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 318 } | 326 } |
| 319 ProcessPacket(serialized_packet_); | 327 ProcessPacket(serialized_packet_); |
| 320 DeleteSerializedPacket(); | 328 DeleteSerializedPacket(); |
| 321 } | 329 } |
| 322 | 330 |
| 323 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { | 331 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { |
| 332 FLAGS_quic_simple_packet_number_length = false; |
| 324 // Changing the packet number length with queued frames in the creator | 333 // Changing the packet number length with queued frames in the creator |
| 325 // should hold the change until after any currently queued frames are | 334 // should hold the change until after any currently queued frames are |
| 326 // serialized. | 335 // serialized. |
| 327 | 336 |
| 328 // Packet 1. | 337 // Packet 1. |
| 329 // Queue a frame in the creator. | 338 // Queue a frame in the creator. |
| 330 EXPECT_FALSE(creator_.HasPendingFrames()); | 339 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 331 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); | 340 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); |
| 332 creator_.AddSavedFrame(ack_frame); | 341 creator_.AddSavedFrame(ack_frame); |
| 333 | 342 |
| (...skipping 61 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 395 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 404 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 396 } | 405 } |
| 397 ProcessPacket(serialized_packet_); | 406 ProcessPacket(serialized_packet_); |
| 398 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 407 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 399 header.public_header.packet_number_length); | 408 header.public_header.packet_number_length); |
| 400 | 409 |
| 401 DeleteSerializedPacket(); | 410 DeleteSerializedPacket(); |
| 402 delete ack_frame.ack_frame; | 411 delete ack_frame.ack_frame; |
| 403 } | 412 } |
| 404 | 413 |
| 414 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacketDoesNothing) { |
| 415 FLAGS_quic_simple_packet_number_length = true; |
| 416 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 417 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 418 // Changing the packet number length with queued frames in the creator |
| 419 // should do nothing. |
| 420 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 421 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); |
| 422 creator_.AddSavedFrame(ack_frame); |
| 423 |
| 424 // Now change packet number length and expect a QUIC_BUG and no change in |
| 425 // packet number length. |
| 426 EXPECT_DFATAL(creator_.UpdatePacketNumberLength(0, 256), |
| 427 "Called UpdatePacketNumberLength with 1 queued_frames."); |
| 428 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 429 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 430 delete ack_frame.ack_frame; |
| 431 } |
| 432 |
| 405 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { | 433 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { |
| 406 // If the original packet number length, the current packet number | 434 // If the original packet number length, the current packet number |
| 407 // length, and the configured send packet number length are different, the | 435 // length, and the configured send packet number length are different, the |
| 408 // retransmit must sent with the original length and the others do not change. | 436 // retransmit must sent with the original length and the others do not change. |
| 409 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 437 if (!FLAGS_quic_simple_packet_number_length) { |
| 410 PACKET_4BYTE_PACKET_NUMBER); | 438 QuicPacketCreatorPeer::SetNextPacketNumberLength( |
| 439 &creator_, PACKET_4BYTE_PACKET_NUMBER); |
| 440 } |
| 411 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, | 441 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, |
| 412 PACKET_2BYTE_PACKET_NUMBER); | 442 PACKET_2BYTE_PACKET_NUMBER); |
| 413 QuicStreamFrame* stream_frame = | 443 QuicStreamFrame* stream_frame = |
| 414 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); | 444 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); |
| 415 QuicFrames frames; | 445 QuicFrames frames; |
| 416 frames.push_back(QuicFrame(stream_frame)); | 446 frames.push_back(QuicFrame(stream_frame)); |
| 417 char buffer[kMaxPacketSize]; | 447 char buffer[kMaxPacketSize]; |
| 418 PendingRetransmission retransmission(CreateRetransmission( | 448 PendingRetransmission retransmission(CreateRetransmission( |
| 419 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, | 449 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, |
| 420 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER)); | 450 ENCRYPTION_NONE, PACKET_1BYTE_PACKET_NUMBER)); |
| 421 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 451 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 422 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 452 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 423 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 453 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 424 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 454 if (FLAGS_quic_simple_packet_number_length) { |
| 425 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 455 // The packet number length is updated after every packet is sent, |
| 426 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 456 // so there is no need to restore the old length after sending. |
| 427 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); | 457 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 458 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 459 } else { |
| 460 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 461 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 462 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 463 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 464 } |
| 428 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 465 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 429 serialized_packet_.packet_number_length); | 466 serialized_packet_.packet_number_length); |
| 430 | 467 |
| 431 { | 468 { |
| 432 InSequence s; | 469 InSequence s; |
| 433 EXPECT_CALL(framer_visitor_, OnPacket()); | 470 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 434 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 471 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 435 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 472 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 436 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 473 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 437 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 474 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 438 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 475 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 439 EXPECT_CALL(framer_visitor_, OnPaddingFrame(_)); | 476 EXPECT_CALL(framer_visitor_, OnPaddingFrame(_)); |
| 440 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 477 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 441 } | 478 } |
| 442 ProcessPacket(serialized_packet_); | 479 ProcessPacket(serialized_packet_); |
| 443 delete stream_frame; | 480 delete stream_frame; |
| 444 } | 481 } |
| 445 | 482 |
| 446 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) { | 483 TEST_P(QuicPacketCreatorTest, ReserializeCryptoFrameWithForwardSecurity) { |
| 447 QuicStreamFrame* stream_frame = | 484 QuicStreamFrame* stream_frame = |
| 448 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); | 485 new QuicStreamFrame(kCryptoStreamId, /*fin=*/false, 0u, StringPiece()); |
| 449 QuicFrames frames; | 486 QuicFrames frames; |
| 450 frames.push_back(QuicFrame(stream_frame)); | 487 frames.push_back(QuicFrame(stream_frame)); |
| 451 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); | 488 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 452 char buffer[kMaxPacketSize]; | 489 char buffer[kMaxPacketSize]; |
| 453 PendingRetransmission retransmission(CreateRetransmission( | 490 PendingRetransmission retransmission(CreateRetransmission( |
| 454 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, | 491 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, |
| 455 ENCRYPTION_NONE, | 492 ENCRYPTION_NONE, |
| 456 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | 493 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); |
| 457 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 494 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 458 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 495 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 459 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 496 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 460 EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level); | 497 EXPECT_EQ(ENCRYPTION_NONE, serialized_packet_.encryption_level); |
| 461 delete stream_frame; | 498 delete stream_frame; |
| 462 } | 499 } |
| 463 | 500 |
| 464 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) { | 501 TEST_P(QuicPacketCreatorTest, ReserializeFrameWithForwardSecurity) { |
| 465 QuicStreamFrame* stream_frame = | 502 QuicStreamFrame* stream_frame = |
| 466 new QuicStreamFrame(0u, /*fin=*/false, 0u, StringPiece()); | 503 new QuicStreamFrame(0u, /*fin=*/false, 0u, StringPiece()); |
| 467 QuicFrames frames; | 504 QuicFrames frames; |
| 468 frames.push_back(QuicFrame(stream_frame)); | 505 frames.push_back(QuicFrame(stream_frame)); |
| 469 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); | 506 creator_.set_encryption_level(ENCRYPTION_FORWARD_SECURE); |
| 470 char buffer[kMaxPacketSize]; | 507 char buffer[kMaxPacketSize]; |
| 471 PendingRetransmission retransmission(CreateRetransmission( | 508 PendingRetransmission retransmission(CreateRetransmission( |
| 472 frames, false /* has_crypto_handshake */, 0 /* no padding */, | 509 frames, false /* has_crypto_handshake */, 0 /* no padding */, |
| 473 ENCRYPTION_NONE, | 510 ENCRYPTION_NONE, |
| 474 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | 511 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); |
| 475 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 512 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 476 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 513 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 477 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 514 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 478 EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level); | 515 EXPECT_EQ(ENCRYPTION_FORWARD_SECURE, serialized_packet_.encryption_level); |
| 479 delete stream_frame; | 516 delete stream_frame; |
| 480 } | 517 } |
| 481 | 518 |
| 482 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPadding) { | 519 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPadding) { |
| 483 QuicFrame frame; | 520 QuicFrame frame; |
| 484 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); | 521 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); |
| 485 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, | 522 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, |
| 486 io_vector, 0u, 0u, false, &frame); | 523 io_vector, 0u, 0u, false, &frame); |
| 487 QuicFrames frames; | 524 QuicFrames frames; |
| 488 frames.push_back(frame); | 525 frames.push_back(frame); |
| 489 char buffer[kMaxPacketSize]; | 526 char buffer[kMaxPacketSize]; |
| 490 PendingRetransmission retransmission(CreateRetransmission( | 527 PendingRetransmission retransmission(CreateRetransmission( |
| 491 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, | 528 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, |
| 492 ENCRYPTION_NONE, | 529 ENCRYPTION_NONE, |
| 493 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | 530 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); |
| 494 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 531 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 495 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 532 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 496 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 533 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 497 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); | 534 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.encrypted_length); |
| 498 delete frame.stream_frame; | 535 delete frame.stream_frame; |
| 499 } | 536 } |
| 500 | 537 |
| 501 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSpecifiedPadding) { | 538 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSpecifiedPadding) { |
| 502 QuicFrame frame; | 539 QuicFrame frame; |
| 503 QuicIOVector io_vector(MakeIOVector("fake message data")); | 540 QuicIOVector io_vector(MakeIOVector("fake message data")); |
| 504 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, | 541 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, |
| 505 io_vector, 0u, 0u, false, &frame); | 542 io_vector, 0u, 0u, false, &frame); |
| 506 | 543 |
| 507 const int kNumPaddingBytes1 = 4; | 544 const int kNumPaddingBytes1 = 4; |
| 508 int packet_size = 0; | 545 int packet_size = 0; |
| 509 { | 546 { |
| 510 QuicFrames frames; | 547 QuicFrames frames; |
| 511 frames.push_back(frame); | 548 frames.push_back(frame); |
| 512 char buffer[kMaxPacketSize]; | 549 char buffer[kMaxPacketSize]; |
| 513 PendingRetransmission retransmission(CreateRetransmission( | 550 PendingRetransmission retransmission(CreateRetransmission( |
| 514 frames, false /* has_crypto_handshake */, | 551 frames, false /* has_crypto_handshake */, |
| 515 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE, | 552 kNumPaddingBytes1 /* padding bytes */, ENCRYPTION_NONE, |
| 516 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | 553 FLAGS_quic_simple_packet_number_length |
| 554 ? QuicPacketCreatorPeer::GetPacketNumberLength(&creator_) |
| 555 : QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); |
| 517 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 556 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 518 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 557 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 519 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 558 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 520 packet_size = serialized_packet_.encrypted_length; | 559 packet_size = serialized_packet_.encrypted_length; |
| 521 } | 560 } |
| 522 | 561 |
| 523 const int kNumPaddingBytes2 = 44; | 562 const int kNumPaddingBytes2 = 44; |
| 524 QuicFrames frames; | 563 QuicFrames frames; |
| 525 frames.push_back(frame); | 564 frames.push_back(frame); |
| 526 char buffer[kMaxPacketSize]; | 565 char buffer[kMaxPacketSize]; |
| 527 PendingRetransmission retransmission(CreateRetransmission( | 566 PendingRetransmission retransmission(CreateRetransmission( |
| 528 frames, false /* has_crypto_handshake */, | 567 frames, false /* has_crypto_handshake */, |
| 529 kNumPaddingBytes2 /* padding bytes */, ENCRYPTION_NONE, | 568 kNumPaddingBytes2 /* padding bytes */, ENCRYPTION_NONE, |
| 530 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | 569 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); |
| 531 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 570 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 532 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 571 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 533 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 572 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 534 | 573 |
| 535 EXPECT_EQ(packet_size + kNumPaddingBytes2 - kNumPaddingBytes1, | 574 EXPECT_EQ(packet_size + kNumPaddingBytes2 - kNumPaddingBytes1, |
| 536 serialized_packet_.encrypted_length); | 575 serialized_packet_.encrypted_length); |
| 537 delete frame.stream_frame; | 576 delete frame.stream_frame; |
| 538 } | 577 } |
| 539 | 578 |
| 540 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { | 579 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { |
| 541 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + | 580 const size_t overhead = GetPacketHeaderOverhead(client_framer_.version()) + |
| 542 GetEncryptionOverhead() + GetStreamFrameOverhead(); | 581 GetEncryptionOverhead() + GetStreamFrameOverhead(); |
| 543 size_t capacity = kDefaultMaxPacketSize - overhead; | 582 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 544 for (int delta = -5; delta <= 0; ++delta) { | 583 for (int delta = -5; delta <= 0; ++delta) { |
| 545 string data(capacity + delta, 'A'); | 584 string data(capacity + delta, 'A'); |
| 546 size_t bytes_free = 0 - delta; | 585 size_t bytes_free = 0 - delta; |
| 547 | 586 |
| 548 QuicFrame frame; | 587 QuicFrame frame; |
| 549 QuicIOVector io_vector(MakeIOVector(data)); | 588 QuicIOVector io_vector(MakeIOVector(data)); |
| 550 UniqueStreamBuffer stream_buffer; | 589 UniqueStreamBuffer stream_buffer; |
| 551 QuicPacketCreatorPeer::CreateStreamFrame( | 590 QuicPacketCreatorPeer::CreateStreamFrame( |
| 552 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame); | 591 &creator_, kCryptoStreamId, io_vector, 0, kOffset, false, &frame); |
| 553 QuicFrames frames; | 592 QuicFrames frames; |
| 554 frames.push_back(frame); | 593 frames.push_back(frame); |
| 555 char buffer[kMaxPacketSize]; | 594 char buffer[kMaxPacketSize]; |
| 556 PendingRetransmission retransmission(CreateRetransmission( | 595 PendingRetransmission retransmission(CreateRetransmission( |
| 557 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, | 596 frames, true /* has_crypto_handshake */, -1 /* needs full padding */, |
| 558 ENCRYPTION_NONE, | 597 ENCRYPTION_NONE, |
| 559 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_))); | 598 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_))); |
| 560 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 599 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 561 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); | 600 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 562 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); | 601 creator_.ReserializeAllFrames(retransmission, buffer, kMaxPacketSize); |
| 563 | 602 |
| 564 // If there is not enough space in the packet to fit a padding frame | 603 // If there is not enough space in the packet to fit a padding frame |
| 565 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 604 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| 566 // will not be padded. | 605 // will not be padded. |
| 567 if (bytes_free < 3) { | 606 if (bytes_free < 3) { |
| 568 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 607 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 569 serialized_packet_.encrypted_length); | 608 serialized_packet_.encrypted_length); |
| (...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 765 { | 804 { |
| 766 InSequence s; | 805 InSequence s; |
| 767 EXPECT_CALL(framer_visitor_, OnPacket()); | 806 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 768 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 807 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 769 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); | 808 EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); |
| 770 } | 809 } |
| 771 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_CLIENT); | 810 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_CLIENT); |
| 772 client_framer_.ProcessPacket(*encrypted); | 811 client_framer_.ProcessPacket(*encrypted); |
| 773 } | 812 } |
| 774 | 813 |
| 775 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { | 814 TEST_P(QuicPacketCreatorTest, UpdatePacketNumberLengthLeastAwaiting_Old) { |
| 815 FLAGS_quic_simple_packet_number_length = false; |
| 776 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 816 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 777 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 817 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 778 | 818 |
| 779 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64); | 819 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64); |
| 780 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 820 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 781 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 821 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 782 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 822 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 783 | 823 |
| 784 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256); | 824 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256); |
| 785 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 825 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 786 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 826 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 787 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 827 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 788 | 828 |
| 789 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 * 256); | 829 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 * 256); |
| 790 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 830 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 791 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 831 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 792 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 832 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 793 | 833 |
| 794 QuicPacketCreatorPeer::SetPacketNumber(&creator_, | 834 QuicPacketCreatorPeer::SetPacketNumber(&creator_, |
| 795 UINT64_C(64) * 256 * 256 * 256 * 256); | 835 UINT64_C(64) * 256 * 256 * 256 * 256); |
| 796 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); | 836 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 797 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | 837 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
| 798 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 838 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 799 } | 839 } |
| 800 | 840 |
| 801 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth) { | 841 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthBandwidth_old) { |
| 842 FLAGS_quic_simple_packet_number_length = false; |
| 802 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 843 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 803 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 844 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 804 | 845 |
| 805 creator_.UpdatePacketNumberLength(1, 10000 / kDefaultMaxPacketSize); | 846 creator_.UpdatePacketNumberLength(1, 10000 / kDefaultMaxPacketSize); |
| 806 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 847 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 807 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 848 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 808 | 849 |
| 809 creator_.UpdatePacketNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); | 850 creator_.UpdatePacketNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); |
| 810 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, | 851 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 811 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 852 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 812 | 853 |
| 813 creator_.UpdatePacketNumberLength(1, | 854 creator_.UpdatePacketNumberLength(1, |
| 814 10000 * 256 * 256 / kDefaultMaxPacketSize); | 855 10000 * 256 * 256 / kDefaultMaxPacketSize); |
| 815 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 856 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 816 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 857 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 817 | 858 |
| 818 creator_.UpdatePacketNumberLength( | 859 creator_.UpdatePacketNumberLength( |
| 819 1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); | 860 1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); |
| 820 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, | 861 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
| 821 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 862 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 822 } | 863 } |
| 823 | 864 |
| 865 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthLeastAwaiting) { |
| 866 FLAGS_quic_simple_packet_number_length = true; |
| 867 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 868 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 869 |
| 870 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64); |
| 871 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 872 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 873 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 874 |
| 875 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256); |
| 876 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 877 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 878 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 879 |
| 880 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 * 256); |
| 881 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 882 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 883 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 884 |
| 885 QuicPacketCreatorPeer::SetPacketNumber(&creator_, |
| 886 UINT64_C(64) * 256 * 256 * 256 * 256); |
| 887 creator_.UpdatePacketNumberLength(2, 10000 / kDefaultMaxPacketSize); |
| 888 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
| 889 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 890 } |
| 891 |
| 892 TEST_P(QuicPacketCreatorTest, UpdatePacketSequenceNumberLengthCwnd) { |
| 893 FLAGS_quic_simple_packet_number_length = true; |
| 894 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 895 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 896 |
| 897 creator_.UpdatePacketNumberLength(1, 10000 / kDefaultMaxPacketSize); |
| 898 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 899 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 900 |
| 901 creator_.UpdatePacketNumberLength(1, 10000 * 256 / kDefaultMaxPacketSize); |
| 902 EXPECT_EQ(PACKET_2BYTE_PACKET_NUMBER, |
| 903 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 904 |
| 905 creator_.UpdatePacketNumberLength(1, |
| 906 10000 * 256 * 256 / kDefaultMaxPacketSize); |
| 907 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 908 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 909 |
| 910 creator_.UpdatePacketNumberLength( |
| 911 1, UINT64_C(1000) * 256 * 256 * 256 * 256 / kDefaultMaxPacketSize); |
| 912 EXPECT_EQ(PACKET_6BYTE_PACKET_NUMBER, |
| 913 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 914 } |
| 915 |
| 824 TEST_P(QuicPacketCreatorTest, SerializeFrame) { | 916 TEST_P(QuicPacketCreatorTest, SerializeFrame) { |
| 825 if (!GetParam().version_serialization) { | 917 if (!GetParam().version_serialization) { |
| 826 creator_.StopSendingVersion(); | 918 creator_.StopSendingVersion(); |
| 827 } | 919 } |
| 828 frames_.push_back( | 920 frames_.push_back( |
| 829 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); | 921 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); |
| 830 SerializedPacket serialized = SerializeAllFrames(frames_); | 922 SerializedPacket serialized = SerializeAllFrames(frames_); |
| 831 delete frames_[0].stream_frame; | 923 delete frames_[0].stream_frame; |
| 832 | 924 |
| 833 QuicPacketHeader header; | 925 QuicPacketHeader header; |
| (...skipping 234 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1068 } | 1160 } |
| 1069 | 1161 |
| 1070 delete frames_[0].stream_frame; | 1162 delete frames_[0].stream_frame; |
| 1071 } | 1163 } |
| 1072 | 1164 |
| 1073 TEST_P(QuicPacketCreatorTest, SetCurrentPath) { | 1165 TEST_P(QuicPacketCreatorTest, SetCurrentPath) { |
| 1074 // Current path is the default path. | 1166 // Current path is the default path. |
| 1075 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1167 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1076 EXPECT_EQ(0u, creator_.packet_number()); | 1168 EXPECT_EQ(0u, creator_.packet_number()); |
| 1077 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1169 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1078 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1170 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1079 // Add a stream frame to the creator. | 1171 // Add a stream frame to the creator. |
| 1080 QuicFrame frame; | 1172 QuicFrame frame; |
| 1081 QuicIOVector io_vector(MakeIOVector("test")); | 1173 QuicIOVector io_vector(MakeIOVector("test")); |
| 1082 ASSERT_TRUE( | 1174 ASSERT_TRUE( |
| 1083 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1175 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1084 ASSERT_TRUE(frame.stream_frame); | 1176 ASSERT_TRUE(frame.stream_frame); |
| 1085 size_t consumed = frame.stream_frame->data_length; | 1177 size_t consumed = frame.stream_frame->data_length; |
| 1086 EXPECT_EQ(4u, consumed); | 1178 EXPECT_EQ(4u, consumed); |
| 1087 EXPECT_TRUE(creator_.HasPendingFrames()); | 1179 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1088 EXPECT_EQ(0u, creator_.packet_number()); | 1180 EXPECT_EQ(0u, creator_.packet_number()); |
| 1089 | 1181 |
| 1090 // Change current path. | 1182 // Change current path. |
| 1091 QuicPathId kPathId1 = 1; | 1183 QuicPathId kPathId1 = 1; |
| 1092 EXPECT_DFATAL(creator_.SetCurrentPath(kPathId1, 1, 0), | 1184 EXPECT_DFATAL(creator_.SetCurrentPath(kPathId1, 1, 0), |
| 1093 "Unable to change paths when a packet is under construction"); | 1185 "Unable to change paths when a packet is under construction"); |
| 1094 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1186 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1095 .Times(1) | 1187 .Times(1) |
| 1096 .WillRepeatedly( | 1188 .WillRepeatedly( |
| 1097 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); | 1189 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 1098 creator_.Flush(); | 1190 creator_.Flush(); |
| 1099 EXPECT_FALSE(creator_.HasPendingFrames()); | 1191 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1100 creator_.SetCurrentPath(kPathId1, 1, 0); | 1192 creator_.SetCurrentPath(kPathId1, 1, 0); |
| 1101 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1193 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1102 EXPECT_FALSE(creator_.HasPendingFrames()); | 1194 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1103 EXPECT_EQ(0u, creator_.packet_number()); | 1195 EXPECT_EQ(0u, creator_.packet_number()); |
| 1104 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1196 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1105 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1197 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1106 | 1198 |
| 1107 // Change current path back. | 1199 // Change current path back. |
| 1108 creator_.SetCurrentPath(kDefaultPathId, 2, 1); | 1200 creator_.SetCurrentPath(kDefaultPathId, 2, 1); |
| 1109 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1201 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1110 EXPECT_EQ(1u, creator_.packet_number()); | 1202 EXPECT_EQ(1u, creator_.packet_number()); |
| 1111 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1203 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1112 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1204 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1113 // Add a stream frame to the creator. | 1205 // Add a stream frame to the creator. |
| 1114 ASSERT_TRUE( | 1206 ASSERT_TRUE( |
| 1115 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1207 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1116 ASSERT_TRUE(frame.stream_frame); | 1208 ASSERT_TRUE(frame.stream_frame); |
| 1117 consumed = frame.stream_frame->data_length; | 1209 consumed = frame.stream_frame->data_length; |
| 1118 EXPECT_EQ(4u, consumed); | 1210 EXPECT_EQ(4u, consumed); |
| 1119 EXPECT_TRUE(creator_.HasPendingFrames()); | 1211 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1120 | 1212 |
| 1121 // Does not change current path. | 1213 // Does not change current path. |
| 1122 creator_.SetCurrentPath(kDefaultPathId, 2, 0); | 1214 creator_.SetCurrentPath(kDefaultPathId, 2, 0); |
| 1123 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1215 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1124 EXPECT_TRUE(creator_.HasPendingFrames()); | 1216 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1125 EXPECT_EQ(1u, creator_.packet_number()); | 1217 EXPECT_EQ(1u, creator_.packet_number()); |
| 1126 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1218 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1127 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1219 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1128 } | 1220 } |
| 1129 | 1221 |
| 1130 TEST_P(QuicPacketCreatorTest, | 1222 TEST_P(QuicPacketCreatorTest, |
| 1131 SetCurrentPathAndUpdatePacketSequenceNumberLength) { | 1223 SetCurrentPathAndUpdatePacketSequenceNumberLength) { |
| 1224 FLAGS_quic_simple_packet_number_length = false; |
| 1132 // Current path is the default path. | 1225 // Current path is the default path. |
| 1133 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1226 EXPECT_EQ(kDefaultPathId, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1134 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1227 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1228 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1229 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1135 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1230 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); |
| 1136 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2); | 1231 QuicPacketCreatorPeer::SetPacketNumber(&creator_, 64 * 256 - 2); |
| 1137 // Add a stream frame to the creator and send the packet. | 1232 // Add a stream frame to the creator and send the packet. |
| 1138 QuicFrame frame; | 1233 QuicFrame frame; |
| 1139 QuicIOVector io_vector(MakeIOVector("test")); | 1234 QuicIOVector io_vector(MakeIOVector("test")); |
| 1140 ASSERT_TRUE( | 1235 ASSERT_TRUE( |
| 1141 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1236 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1142 EXPECT_CALL(delegate_, OnSerializedPacket(_)) | 1237 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1143 .Times(1) | 1238 .Times(1) |
| 1144 .WillRepeatedly( | 1239 .WillRepeatedly( |
| (...skipping 42 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1187 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); | 1282 EXPECT_EQ(kDefaultPathId, serialized_packet_.path_id); |
| 1188 DeleteSerializedPacket(); | 1283 DeleteSerializedPacket(); |
| 1189 | 1284 |
| 1190 // Change to path 1. | 1285 // Change to path 1. |
| 1191 QuicPathId kPathId1 = 1; | 1286 QuicPathId kPathId1 = 1; |
| 1192 creator_.SetCurrentPath(kPathId1, 1, 0); | 1287 creator_.SetCurrentPath(kPathId1, 1, 0); |
| 1193 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); | 1288 EXPECT_EQ(kPathId1, QuicPacketCreatorPeer::GetCurrentPath(&creator_)); |
| 1194 EXPECT_FALSE(creator_.HasPendingFrames()); | 1289 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1195 EXPECT_EQ(0u, creator_.packet_number()); | 1290 EXPECT_EQ(0u, creator_.packet_number()); |
| 1196 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 1291 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 1197 QuicPacketCreatorPeer::NextPacketNumberLength(&creator_)); | 1292 QuicPacketCreatorPeer::GetPacketNumberLength(&creator_)); |
| 1198 | 1293 |
| 1199 // Add a stream frame to the creator and flush the packet. | 1294 // Add a stream frame to the creator and flush the packet. |
| 1200 ASSERT_TRUE( | 1295 ASSERT_TRUE( |
| 1201 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); | 1296 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1202 ASSERT_TRUE(frame.stream_frame); | 1297 ASSERT_TRUE(frame.stream_frame); |
| 1203 consumed = frame.stream_frame->data_length; | 1298 consumed = frame.stream_frame->data_length; |
| 1204 EXPECT_EQ(4u, consumed); | 1299 EXPECT_EQ(4u, consumed); |
| 1205 EXPECT_TRUE(creator_.HasPendingFrames()); | 1300 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1206 creator_.Flush(); | 1301 creator_.Flush(); |
| 1207 // Verify serialized data packet's path id. | 1302 // Verify serialized data packet's path id. |
| 1208 EXPECT_EQ(kPathId1, serialized_packet_.path_id); | 1303 EXPECT_EQ(kPathId1, serialized_packet_.path_id); |
| 1209 DeleteSerializedPacket(); | 1304 DeleteSerializedPacket(); |
| 1210 } | 1305 } |
| 1211 | 1306 |
| 1212 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { | 1307 TEST_P(QuicPacketCreatorTest, AddUnencryptedStreamDataClosesConnection) { |
| 1213 FLAGS_quic_never_write_unencrypted_data = true; | 1308 FLAGS_quic_never_write_unencrypted_data = true; |
| 1214 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); | 1309 EXPECT_CALL(delegate_, OnUnrecoverableError(_, _, _)); |
| 1215 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, | 1310 QuicStreamFrame stream_frame(kHeadersStreamId, /*fin=*/false, 0u, |
| 1216 StringPiece()); | 1311 StringPiece()); |
| 1217 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), | 1312 EXPECT_DFATAL(creator_.AddSavedFrame(QuicFrame(&stream_frame)), |
| 1218 "Cannot send stream data without encryption."); | 1313 "Cannot send stream data without encryption."); |
| 1219 } | 1314 } |
| 1220 | 1315 |
| 1221 TEST_P(QuicPacketCreatorTest, ChloTooLarge) { | 1316 TEST_P(QuicPacketCreatorTest, ChloTooLarge) { |
| 1222 ValueRestore<bool> old_flag(&FLAGS_quic_disallow_multi_packet_chlo, true); | |
| 1223 CryptoHandshakeMessage message; | 1317 CryptoHandshakeMessage message; |
| 1224 message.set_tag(kCHLO); | 1318 message.set_tag(kCHLO); |
| 1225 message.set_minimum_size(kMaxPacketSize); | 1319 message.set_minimum_size(kMaxPacketSize); |
| 1226 CryptoFramer framer; | 1320 CryptoFramer framer; |
| 1227 std::unique_ptr<QuicData> message_data; | 1321 std::unique_ptr<QuicData> message_data; |
| 1228 message_data.reset(framer.ConstructHandshakeMessage(message)); | 1322 message_data.reset(framer.ConstructHandshakeMessage(message)); |
| 1229 | 1323 |
| 1230 struct iovec iov; | 1324 struct iovec iov; |
| 1231 QuicIOVector data_iovec(::net::MakeIOVector( | 1325 QuicIOVector data_iovec(::net::MakeIOVector( |
| 1232 StringPiece(message_data->data(), message_data->length()), &iov)); | 1326 StringPiece(message_data->data(), message_data->length()), &iov)); |
| 1233 QuicFrame frame; | 1327 QuicFrame frame; |
| 1234 EXPECT_CALL(delegate_, | 1328 EXPECT_CALL(delegate_, |
| 1235 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); | 1329 OnUnrecoverableError(QUIC_CRYPTO_CHLO_TOO_LARGE, _, _)); |
| 1236 EXPECT_DFATAL( | 1330 EXPECT_DFATAL( |
| 1237 creator_.ConsumeData(1u, data_iovec, 0u, 0u, false, false, &frame), | 1331 creator_.ConsumeData(1u, data_iovec, 0u, 0u, false, false, &frame), |
| 1238 "Client hello won't fit in a single packet."); | 1332 "Client hello won't fit in a single packet."); |
| 1239 } | 1333 } |
| 1240 | 1334 |
| 1241 } // namespace | 1335 } // namespace |
| 1242 } // namespace test | 1336 } // namespace test |
| 1243 } // namespace net | 1337 } // namespace net |
| OLD | NEW |