| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 | 8 |
| 9 #include "base/stl_util.h" | 9 #include "base/stl_util.h" |
| 10 #include "net/quic/crypto/null_encrypter.h" | 10 #include "net/quic/crypto/null_encrypter.h" |
| 11 #include "net/quic/crypto/quic_decrypter.h" | 11 #include "net/quic/crypto/quic_decrypter.h" |
| 12 #include "net/quic/crypto/quic_encrypter.h" | 12 #include "net/quic/crypto/quic_encrypter.h" |
| 13 #include "net/quic/quic_flags.h" | 13 #include "net/quic/quic_flags.h" |
| 14 #include "net/quic/quic_utils.h" | 14 #include "net/quic/quic_utils.h" |
| 15 #include "net/quic/test_tools/mock_random.h" | 15 #include "net/quic/test_tools/mock_random.h" |
| 16 #include "net/quic/test_tools/quic_framer_peer.h" | 16 #include "net/quic/test_tools/quic_framer_peer.h" |
| 17 #include "net/quic/test_tools/quic_packet_creator_peer.h" | 17 #include "net/quic/test_tools/quic_packet_creator_peer.h" |
| 18 #include "net/quic/test_tools/quic_test_utils.h" | 18 #include "net/quic/test_tools/quic_test_utils.h" |
| 19 #include "net/test/gtest_util.h" | 19 #include "net/test/gtest_util.h" |
| 20 #include "testing/gmock/include/gmock/gmock.h" | 20 #include "testing/gmock/include/gmock/gmock.h" |
| 21 | 21 |
| 22 using base::StringPiece; | 22 using base::StringPiece; |
| 23 using std::ostream; | 23 using std::ostream; |
| 24 using std::string; | 24 using std::string; |
| 25 using std::vector; | 25 using std::vector; |
| 26 using testing::DoAll; | 26 using testing::DoAll; |
| 27 using testing::InSequence; | 27 using testing::InSequence; |
| 28 using testing::Return; | 28 using testing::Return; |
| 29 using testing::SaveArg; | 29 using testing::SaveArg; |
| 30 using testing::StrictMock; |
| 30 using testing::_; | 31 using testing::_; |
| 31 | 32 |
| 32 namespace net { | 33 namespace net { |
| 33 namespace test { | 34 namespace test { |
| 34 namespace { | 35 namespace { |
| 35 | 36 |
| 36 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}. | 37 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}. |
| 37 struct TestParams { | 38 struct TestParams { |
| 38 TestParams(QuicVersion version, | 39 TestParams(QuicVersion version, |
| 39 bool version_serialization, | 40 bool version_serialization, |
| (...skipping 30 matching lines...) Expand all Loading... |
| 70 params.push_back(TestParams(all_supported_versions[0], true, | 71 params.push_back(TestParams(all_supported_versions[0], true, |
| 71 PACKET_0BYTE_CONNECTION_ID, false)); | 72 PACKET_0BYTE_CONNECTION_ID, false)); |
| 72 params.push_back(TestParams(all_supported_versions[0], true, | 73 params.push_back(TestParams(all_supported_versions[0], true, |
| 73 PACKET_1BYTE_CONNECTION_ID, false)); | 74 PACKET_1BYTE_CONNECTION_ID, false)); |
| 74 params.push_back(TestParams(all_supported_versions[0], true, | 75 params.push_back(TestParams(all_supported_versions[0], true, |
| 75 PACKET_4BYTE_CONNECTION_ID, false)); | 76 PACKET_4BYTE_CONNECTION_ID, false)); |
| 76 params.push_back(TestParams(all_supported_versions[0], true, max, true)); | 77 params.push_back(TestParams(all_supported_versions[0], true, max, true)); |
| 77 return params; | 78 return params; |
| 78 } | 79 } |
| 79 | 80 |
| 81 class MockDelegate : public QuicPacketCreator::DelegateInterface { |
| 82 public: |
| 83 MockDelegate() {} |
| 84 ~MockDelegate() override {} |
| 85 |
| 86 MOCK_METHOD1(OnSerializedPacket, void(SerializedPacket* packet)); |
| 87 |
| 88 private: |
| 89 DISALLOW_COPY_AND_ASSIGN(MockDelegate); |
| 90 }; |
| 91 |
| 80 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> { | 92 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> { |
| 93 public: |
| 94 void ClearSerializedPacket(SerializedPacket* serialized_packet) { |
| 95 if (serialized_packet == nullptr) { |
| 96 return; |
| 97 } |
| 98 |
| 99 delete serialized_packet->retransmittable_frames; |
| 100 delete serialized_packet->packet; |
| 101 } |
| 102 |
| 103 void SaveSerializedPacket(SerializedPacket* serialized_packet) { |
| 104 if (serialized_packet == nullptr) { |
| 105 return; |
| 106 } |
| 107 |
| 108 serialized_packet_ = *serialized_packet; |
| 109 serialized_packet_.packet = serialized_packet->packet->Clone(); |
| 110 delete serialized_packet->packet; |
| 111 } |
| 112 |
| 81 protected: | 113 protected: |
| 82 QuicPacketCreatorTest() | 114 QuicPacketCreatorTest() |
| 83 : server_framer_(SupportedVersions(GetParam().version), | 115 : server_framer_(SupportedVersions(GetParam().version), |
| 84 QuicTime::Zero(), | 116 QuicTime::Zero(), |
| 85 Perspective::IS_SERVER), | 117 Perspective::IS_SERVER), |
| 86 client_framer_(SupportedVersions(GetParam().version), | 118 client_framer_(SupportedVersions(GetParam().version), |
| 87 QuicTime::Zero(), | 119 QuicTime::Zero(), |
| 88 Perspective::IS_CLIENT), | 120 Perspective::IS_CLIENT), |
| 89 connection_id_(2), | 121 connection_id_(2), |
| 90 data_("foo"), | 122 data_("foo"), |
| 91 creator_(connection_id_, &client_framer_, &mock_random_) { | 123 creator_(connection_id_, &client_framer_, &mock_random_, &delegate_), |
| 124 serialized_packet_(creator_.NoPacket()) { |
| 92 creator_.set_connection_id_length(GetParam().connection_id_length); | 125 creator_.set_connection_id_length(GetParam().connection_id_length); |
| 93 client_framer_.set_visitor(&framer_visitor_); | 126 client_framer_.set_visitor(&framer_visitor_); |
| 94 client_framer_.set_received_entropy_calculator(&entropy_calculator_); | 127 client_framer_.set_received_entropy_calculator(&entropy_calculator_); |
| 95 server_framer_.set_visitor(&framer_visitor_); | 128 server_framer_.set_visitor(&framer_visitor_); |
| 96 FLAGS_quic_packet_creator_prefetch = GetParam().copy_use_prefetch; | 129 FLAGS_quic_packet_creator_prefetch = GetParam().copy_use_prefetch; |
| 97 } | 130 } |
| 98 | 131 |
| 99 ~QuicPacketCreatorTest() override {} | 132 ~QuicPacketCreatorTest() override {} |
| 100 | 133 |
| 101 void ProcessPacket(QuicEncryptedPacket* encrypted) { | 134 void ProcessPacket(QuicEncryptedPacket* encrypted) { |
| (...skipping 45 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 147 | 180 |
| 148 QuicIOVector MakeIOVector(StringPiece s) { | 181 QuicIOVector MakeIOVector(StringPiece s) { |
| 149 return ::net::MakeIOVector(s, &iov_); | 182 return ::net::MakeIOVector(s, &iov_); |
| 150 } | 183 } |
| 151 | 184 |
| 152 static const QuicStreamOffset kOffset = 1u; | 185 static const QuicStreamOffset kOffset = 1u; |
| 153 | 186 |
| 154 QuicFrames frames_; | 187 QuicFrames frames_; |
| 155 QuicFramer server_framer_; | 188 QuicFramer server_framer_; |
| 156 QuicFramer client_framer_; | 189 QuicFramer client_framer_; |
| 157 testing::StrictMock<MockFramerVisitor> framer_visitor_; | 190 StrictMock<MockFramerVisitor> framer_visitor_; |
| 191 StrictMock<MockDelegate> delegate_; |
| 158 QuicConnectionId connection_id_; | 192 QuicConnectionId connection_id_; |
| 159 string data_; | 193 string data_; |
| 160 struct iovec iov_; | 194 struct iovec iov_; |
| 161 MockRandom mock_random_; | 195 MockRandom mock_random_; |
| 162 QuicPacketCreator creator_; | 196 QuicPacketCreator creator_; |
| 163 MockEntropyCalculator entropy_calculator_; | 197 MockEntropyCalculator entropy_calculator_; |
| 198 SerializedPacket serialized_packet_; |
| 164 }; | 199 }; |
| 165 | 200 |
| 166 // Run all packet creator tests with all supported versions of QUIC, and with | 201 // Run all packet creator tests with all supported versions of QUIC, and with |
| 167 // and without version in the packet header, as well as doing a run for each | 202 // and without version in the packet header, as well as doing a run for each |
| 168 // length of truncated connection id. | 203 // length of truncated connection id. |
| 169 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, | 204 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, |
| 170 QuicPacketCreatorTest, | 205 QuicPacketCreatorTest, |
| 171 ::testing::ValuesIn(GetTestParams())); | 206 ::testing::ValuesIn(GetTestParams())); |
| 172 | 207 |
| 173 TEST_P(QuicPacketCreatorTest, SerializeFrames) { | 208 TEST_P(QuicPacketCreatorTest, SerializeFrames) { |
| (...skipping 73 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 247 } | 282 } |
| 248 ProcessPacket(serialized.packet); | 283 ProcessPacket(serialized.packet); |
| 249 delete serialized.packet; | 284 delete serialized.packet; |
| 250 } | 285 } |
| 251 | 286 |
| 252 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { | 287 TEST_P(QuicPacketCreatorTest, SerializeChangingSequenceNumberLength) { |
| 253 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); | 288 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 254 creator_.AddSavedFrame(frames_[0]); | 289 creator_.AddSavedFrame(frames_[0]); |
| 255 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 290 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, |
| 256 PACKET_4BYTE_PACKET_NUMBER); | 291 PACKET_4BYTE_PACKET_NUMBER); |
| 257 char buffer[kMaxPacketSize]; | 292 |
| 258 SerializedPacket serialized = | 293 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 259 creator_.SerializePacket(buffer, kMaxPacketSize); | 294 .WillRepeatedly( |
| 295 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 296 creator_.Flush(); |
| 260 // The packet number length will not change mid-packet. | 297 // The packet number length will not change mid-packet. |
| 261 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); | 298 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 299 serialized_packet_.packet_number_length); |
| 262 | 300 |
| 263 { | 301 { |
| 264 InSequence s; | 302 InSequence s; |
| 265 EXPECT_CALL(framer_visitor_, OnPacket()); | 303 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 266 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 304 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 267 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 305 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 268 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 306 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 269 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 307 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 270 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 308 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 271 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 309 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 272 } | 310 } |
| 273 ProcessPacket(serialized.packet); | 311 ProcessPacket(serialized_packet_.packet); |
| 274 delete serialized.packet; | 312 ClearSerializedPacket(&serialized_packet_); |
| 275 | 313 |
| 276 creator_.AddSavedFrame(frames_[0]); | 314 creator_.AddSavedFrame(frames_[0]); |
| 277 serialized = creator_.SerializePacket(buffer, kMaxPacketSize); | 315 creator_.Flush(); |
| 278 // Now the actual packet number length should have changed. | 316 // Now the actual packet number length should have changed. |
| 279 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); | 317 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 318 serialized_packet_.packet_number_length); |
| 280 delete frames_[0].ack_frame; | 319 delete frames_[0].ack_frame; |
| 281 | 320 |
| 282 { | 321 { |
| 283 InSequence s; | 322 InSequence s; |
| 284 EXPECT_CALL(framer_visitor_, OnPacket()); | 323 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 285 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 324 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 286 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 325 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 287 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 326 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 288 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 327 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 289 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 328 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 290 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 329 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 291 } | 330 } |
| 292 ProcessPacket(serialized.packet); | 331 ProcessPacket(serialized_packet_.packet); |
| 293 delete serialized.packet; | 332 ClearSerializedPacket(&serialized_packet_); |
| 294 } | 333 } |
| 295 | 334 |
| 296 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { | 335 TEST_P(QuicPacketCreatorTest, ChangeSequenceNumberLengthMidPacket) { |
| 297 // Changing the packet number length with queued frames in the creator | 336 // Changing the packet number length with queued frames in the creator |
| 298 // should hold the change until after any currently queued frames are | 337 // should hold the change until after any currently queued frames are |
| 299 // serialized. | 338 // serialized. |
| 300 | 339 |
| 301 // Packet 1. | 340 // Packet 1. |
| 302 // Queue a frame in the creator. | 341 // Queue a frame in the creator. |
| 303 EXPECT_FALSE(creator_.HasPendingFrames()); | 342 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 304 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); | 343 QuicFrame ack_frame = QuicFrame(new QuicAckFrame(MakeAckFrame(0u))); |
| 305 creator_.AddSavedFrame(ack_frame); | 344 creator_.AddSavedFrame(ack_frame); |
| 306 | 345 |
| 307 // Now change packet number length. | 346 // Now change packet number length. |
| 308 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 347 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, |
| 309 PACKET_4BYTE_PACKET_NUMBER); | 348 PACKET_4BYTE_PACKET_NUMBER); |
| 310 | 349 |
| 311 // Add a STOP_WAITING frame since it contains a packet number, | 350 // Add a STOP_WAITING frame since it contains a packet number, |
| 312 // whose length should be 1. | 351 // whose length should be 1. |
| 313 QuicStopWaitingFrame stop_waiting_frame; | 352 QuicStopWaitingFrame stop_waiting_frame; |
| 314 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); | 353 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); |
| 315 EXPECT_TRUE(creator_.HasPendingFrames()); | 354 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 316 | 355 |
| 317 // Ensure the packet is successfully created. | 356 // Ensure the packet is successfully created. |
| 318 char buffer[kMaxPacketSize]; | 357 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 319 SerializedPacket serialized = | 358 .WillRepeatedly( |
| 320 creator_.SerializePacket(buffer, kMaxPacketSize); | 359 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 321 ASSERT_TRUE(serialized.packet); | 360 creator_.Flush(); |
| 322 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); | 361 ASSERT_TRUE(serialized_packet_.packet); |
| 362 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 363 serialized_packet_.packet_number_length); |
| 323 | 364 |
| 324 // Verify that header in transmitted packet has 1 byte sequence length. | 365 // Verify that header in transmitted packet has 1 byte sequence length. |
| 325 QuicPacketHeader header; | 366 QuicPacketHeader header; |
| 326 { | 367 { |
| 327 InSequence s; | 368 InSequence s; |
| 328 EXPECT_CALL(framer_visitor_, OnPacket()); | 369 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 329 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 370 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 330 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 371 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 331 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 372 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 332 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( | 373 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( |
| 333 DoAll(SaveArg<0>(&header), Return(true))); | 374 DoAll(SaveArg<0>(&header), Return(true))); |
| 334 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 375 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 335 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); | 376 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); |
| 336 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 377 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 337 } | 378 } |
| 338 ProcessPacket(serialized.packet); | 379 ProcessPacket(serialized_packet_.packet); |
| 339 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, | 380 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 340 header.public_header.packet_number_length); | 381 header.public_header.packet_number_length); |
| 341 delete serialized.packet; | 382 ClearSerializedPacket(&serialized_packet_); |
| 342 | 383 |
| 343 // Packet 2. | 384 // Packet 2. |
| 344 EXPECT_FALSE(creator_.HasPendingFrames()); | 385 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 345 // Generate Packet 2 with one frame -- packet number length should now | 386 // Generate Packet 2 with one frame -- packet number length should now |
| 346 // change to 4 bytes. | 387 // change to 4 bytes. |
| 347 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); | 388 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&stop_waiting_frame))); |
| 348 EXPECT_TRUE(creator_.HasPendingFrames()); | 389 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 349 | 390 |
| 350 // Ensure the packet is successfully created. | 391 // Ensure the packet is successfully created. |
| 351 serialized = creator_.SerializePacket(buffer, kMaxPacketSize); | 392 creator_.Flush(); |
| 352 ASSERT_TRUE(serialized.packet); | 393 ASSERT_TRUE(serialized_packet_.packet); |
| 353 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); | 394 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 395 serialized_packet_.packet_number_length); |
| 354 | 396 |
| 355 // Verify that header in transmitted packet has 4 byte sequence length. | 397 // Verify that header in transmitted packet has 4 byte sequence length. |
| 356 { | 398 { |
| 357 InSequence s; | 399 InSequence s; |
| 358 EXPECT_CALL(framer_visitor_, OnPacket()); | 400 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 359 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 401 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 360 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 402 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 361 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 403 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 362 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( | 404 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( |
| 363 DoAll(SaveArg<0>(&header), Return(true))); | 405 DoAll(SaveArg<0>(&header), Return(true))); |
| 364 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); | 406 EXPECT_CALL(framer_visitor_, OnStopWaitingFrame(_)); |
| 365 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 407 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 366 } | 408 } |
| 367 ProcessPacket(serialized.packet); | 409 ProcessPacket(serialized_packet_.packet); |
| 368 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, | 410 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, |
| 369 header.public_header.packet_number_length); | 411 header.public_header.packet_number_length); |
| 370 | 412 |
| 371 delete serialized.packet; | 413 ClearSerializedPacket(&serialized_packet_); |
| 372 delete ack_frame.ack_frame; | 414 delete ack_frame.ack_frame; |
| 373 } | 415 } |
| 374 | 416 |
| 375 TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) { | 417 TEST_P(QuicPacketCreatorTest, SerializeWithFECChangingSequenceNumberLength) { |
| 376 // Test goal is to test the following sequence (P1 => generate Packet 1): | 418 // Test goal is to test the following sequence (P1 => generate Packet 1): |
| 377 // P1 <change seq num length> P2 FEC, | 419 // P1 <change seq num length> P2 FEC, |
| 378 // and we expect that packet number length should not change until the end | 420 // and we expect that packet number length should not change until the end |
| 379 // of the open FEC group. | 421 // of the open FEC group. |
| 380 | 422 |
| 381 // Enable FEC protection, and send FEC packet every 6 packets. | 423 // Enable FEC protection, and send FEC packet every 6 packets. |
| 382 EXPECT_TRUE(SwitchFecProtectionOn(6)); | 424 EXPECT_TRUE(SwitchFecProtectionOn(6)); |
| 383 // Should return false since we do not have enough packets in the FEC group to | 425 // Should return false since we do not have enough packets in the FEC group to |
| 384 // trigger an FEC packet. | 426 // trigger an FEC packet. |
| 385 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); | 427 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
| 386 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); | 428 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u)))); |
| 387 | 429 |
| 388 // Generate Packet 1. | 430 // Generate Packet 1. |
| 389 creator_.AddSavedFrame(frames_[0]); | 431 creator_.AddSavedFrame(frames_[0]); |
| 390 // Change the packet number length mid-FEC group and it should not change. | 432 // Change the packet number length mid-FEC group and it should not change. |
| 391 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 433 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, |
| 392 PACKET_4BYTE_PACKET_NUMBER); | 434 PACKET_4BYTE_PACKET_NUMBER); |
| 393 char buffer[kMaxPacketSize]; | 435 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 394 SerializedPacket serialized = | 436 .WillRepeatedly( |
| 395 creator_.SerializePacket(buffer, kMaxPacketSize); | 437 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 396 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); | 438 creator_.Flush(); |
| 439 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 440 serialized_packet_.packet_number_length); |
| 397 | 441 |
| 398 { | 442 { |
| 399 InSequence s; | 443 InSequence s; |
| 400 EXPECT_CALL(framer_visitor_, OnPacket()); | 444 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 401 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 445 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 402 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 446 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 403 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 447 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 404 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 448 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 405 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); | 449 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
| 406 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 450 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 407 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 451 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 408 } | 452 } |
| 409 ProcessPacket(serialized.packet); | 453 ProcessPacket(serialized_packet_.packet); |
| 410 delete serialized.packet; | 454 ClearSerializedPacket(&serialized_packet_); |
| 411 | 455 |
| 412 // Generate Packet 2. | 456 // Generate Packet 2. |
| 413 creator_.AddSavedFrame(frames_[0]); | 457 creator_.AddSavedFrame(frames_[0]); |
| 414 serialized = creator_.SerializePacket(buffer, kMaxPacketSize); | 458 creator_.Flush(); |
| 415 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); | 459 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, |
| 460 serialized_packet_.packet_number_length); |
| 416 | 461 |
| 417 { | 462 { |
| 418 InSequence s; | 463 InSequence s; |
| 419 EXPECT_CALL(framer_visitor_, OnPacket()); | 464 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 420 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 465 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 421 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 466 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 422 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 467 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 423 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 468 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 424 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); | 469 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); |
| 425 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); | 470 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); |
| 426 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 471 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 427 } | 472 } |
| 428 ProcessPacket(serialized.packet); | 473 ProcessPacket(serialized_packet_.packet); |
| 429 delete serialized.packet; | 474 ClearSerializedPacket(&serialized_packet_); |
| 430 | 475 |
| 431 // Should return false since we do not have enough packets in the FEC group to | 476 // Should return false since we do not have enough packets in the FEC group to |
| 432 // trigger an FEC packet. | 477 // trigger an FEC packet. |
| 433 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); | 478 ASSERT_FALSE(creator_.ShouldSendFec(/*force_close=*/false)); |
| 434 // Should return true since there are packets in the FEC group. | 479 // Should return true since there are packets in the FEC group. |
| 435 ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true)); | 480 ASSERT_TRUE(creator_.ShouldSendFec(/*force_close=*/true)); |
| 436 | 481 |
| 437 // Force generation of FEC packet. | 482 // Force generation of FEC packet. |
| 438 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); | 483 char buffer[kMaxPacketSize]; |
| 484 SerializedPacket serialized = creator_.SerializeFec(buffer, kMaxPacketSize); |
| 439 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); | 485 EXPECT_EQ(PACKET_1BYTE_PACKET_NUMBER, serialized.packet_number_length); |
| 440 ASSERT_EQ(3u, serialized.packet_number); | 486 ASSERT_EQ(3u, serialized.packet_number); |
| 441 | 487 |
| 442 { | 488 { |
| 443 InSequence s; | 489 InSequence s; |
| 444 EXPECT_CALL(framer_visitor_, OnPacket()); | 490 EXPECT_CALL(framer_visitor_, OnPacket()); |
| 445 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); | 491 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); |
| 446 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); | 492 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); |
| 447 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); | 493 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); |
| 448 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); | 494 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
| 449 EXPECT_CALL(framer_visitor_, OnFecData(_)); | 495 EXPECT_CALL(framer_visitor_, OnFecData(_)); |
| 450 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 496 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 451 } | 497 } |
| 452 ProcessPacket(serialized.packet); | 498 ProcessPacket(serialized.packet); |
| 453 delete serialized.packet; | 499 ClearSerializedPacket(&serialized); |
| 454 | 500 |
| 455 // Ensure the next FEC group starts using the new packet number length. | 501 // Ensure the next FEC group starts using the new packet number length. |
| 456 serialized = creator_.SerializeAllFrames(frames_, buffer, kMaxPacketSize); | 502 serialized = creator_.SerializeAllFrames(frames_, buffer, kMaxPacketSize); |
| 457 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); | 503 EXPECT_EQ(PACKET_4BYTE_PACKET_NUMBER, serialized.packet_number_length); |
| 458 delete frames_[0].ack_frame; | 504 delete frames_[0].ack_frame; |
| 459 delete serialized.packet; | 505 ClearSerializedPacket(&serialized); |
| 460 } | 506 } |
| 461 | 507 |
| 462 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { | 508 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithSequenceNumberLength) { |
| 463 // If the original packet number length, the current packet number | 509 // If the original packet number length, the current packet number |
| 464 // length, and the configured send packet number length are different, the | 510 // length, and the configured send packet number length are different, the |
| 465 // retransmit must sent with the original length and the others do not change. | 511 // retransmit must sent with the original length and the others do not change. |
| 466 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, | 512 QuicPacketCreatorPeer::SetNextPacketNumberLength(&creator_, |
| 467 PACKET_4BYTE_PACKET_NUMBER); | 513 PACKET_4BYTE_PACKET_NUMBER); |
| 468 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, | 514 QuicPacketCreatorPeer::SetPacketNumberLength(&creator_, |
| 469 PACKET_2BYTE_PACKET_NUMBER); | 515 PACKET_2BYTE_PACKET_NUMBER); |
| (...skipping 21 matching lines...) Expand all Loading... |
| 491 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 537 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 492 } | 538 } |
| 493 ProcessPacket(serialized.packet); | 539 ProcessPacket(serialized.packet); |
| 494 delete serialized.packet; | 540 delete serialized.packet; |
| 495 } | 541 } |
| 496 | 542 |
| 497 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { | 543 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithPadding) { |
| 498 QuicFrame frame; | 544 QuicFrame frame; |
| 499 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); | 545 QuicIOVector io_vector(MakeIOVector("fake handshake message data")); |
| 500 UniqueStreamBuffer stream_buffer; | 546 UniqueStreamBuffer stream_buffer; |
| 501 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0u, 0u, false, &frame, | 547 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, |
| 502 &stream_buffer); | 548 io_vector, 0u, 0u, false, &frame, |
| 549 &stream_buffer); |
| 503 RetransmittableFrames frames(ENCRYPTION_NONE); | 550 RetransmittableFrames frames(ENCRYPTION_NONE); |
| 504 frames.AddFrame(frame); | 551 frames.AddFrame(frame); |
| 505 frames.set_needs_padding(true); | 552 frames.set_needs_padding(true); |
| 506 char buffer[kMaxPacketSize]; | 553 char buffer[kMaxPacketSize]; |
| 507 SerializedPacket serialized = creator_.ReserializeAllFrames( | 554 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 508 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, | 555 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), buffer, |
| 509 kMaxPacketSize); | 556 kMaxPacketSize); |
| 510 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); | 557 EXPECT_EQ(kDefaultMaxPacketSize, serialized.packet->length()); |
| 511 delete serialized.packet; | 558 delete serialized.packet; |
| 512 } | 559 } |
| 513 | 560 |
| 514 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { | 561 TEST_P(QuicPacketCreatorTest, ReserializeFramesWithFullPacketAndPadding) { |
| 515 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 562 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 516 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 563 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 517 size_t capacity = kDefaultMaxPacketSize - overhead; | 564 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 518 for (int delta = -5; delta <= 0; ++delta) { | 565 for (int delta = -5; delta <= 0; ++delta) { |
| 519 string data(capacity + delta, 'A'); | 566 string data(capacity + delta, 'A'); |
| 520 size_t bytes_free = 0 - delta; | 567 size_t bytes_free = 0 - delta; |
| 521 | 568 |
| 522 QuicFrame frame; | 569 QuicFrame frame; |
| 523 QuicIOVector io_vector(MakeIOVector(data)); | 570 QuicIOVector io_vector(MakeIOVector(data)); |
| 524 UniqueStreamBuffer stream_buffer; | 571 UniqueStreamBuffer stream_buffer; |
| 525 creator_.CreateStreamFrame(kCryptoStreamId, io_vector, 0, kOffset, false, | 572 QuicPacketCreatorPeer::CreateStreamFrame(&creator_, kCryptoStreamId, |
| 526 &frame, &stream_buffer); | 573 io_vector, 0, kOffset, false, |
| 574 &frame, &stream_buffer); |
| 527 RetransmittableFrames frames(ENCRYPTION_NONE); | 575 RetransmittableFrames frames(ENCRYPTION_NONE); |
| 528 frames.AddFrame(frame); | 576 frames.AddFrame(frame); |
| 529 frames.set_needs_padding(true); | 577 frames.set_needs_padding(true); |
| 530 char buffer[kMaxPacketSize]; | 578 char buffer[kMaxPacketSize]; |
| 531 SerializedPacket serialized = creator_.ReserializeAllFrames( | 579 SerializedPacket serialized = creator_.ReserializeAllFrames( |
| 532 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), | 580 frames, QuicPacketCreatorPeer::NextPacketNumberLength(&creator_), |
| 533 buffer, kMaxPacketSize); | 581 buffer, kMaxPacketSize); |
| 534 | 582 |
| 535 // If there is not enough space in the packet to fit a padding frame | 583 // If there is not enough space in the packet to fit a padding frame |
| 536 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 584 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| (...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 622 creator_.StopFecProtectingPackets(); | 670 creator_.StopFecProtectingPackets(); |
| 623 EXPECT_FALSE(creator_.IsFecProtected()); | 671 EXPECT_FALSE(creator_.IsFecProtected()); |
| 624 creator_.StartFecProtectingPackets(); | 672 creator_.StartFecProtectingPackets(); |
| 625 EXPECT_TRUE(creator_.IsFecProtected()); | 673 EXPECT_TRUE(creator_.IsFecProtected()); |
| 626 } | 674 } |
| 627 | 675 |
| 628 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) { | 676 TEST_P(QuicPacketCreatorTest, SwitchFecOnWithStreamFrameQueued) { |
| 629 // Add a stream frame to the creator. | 677 // Add a stream frame to the creator. |
| 630 QuicFrame frame; | 678 QuicFrame frame; |
| 631 QuicIOVector io_vector(MakeIOVector("test")); | 679 QuicIOVector io_vector(MakeIOVector("test")); |
| 632 UniqueStreamBuffer stream_buffer; | 680 ASSERT_TRUE( |
| 633 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 681 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 634 &frame, &stream_buffer); | 682 ASSERT_TRUE(frame.stream_frame); |
| 683 size_t consumed = frame.stream_frame->data.length(); |
| 635 EXPECT_EQ(4u, consumed); | 684 EXPECT_EQ(4u, consumed); |
| 636 ASSERT_TRUE(frame.stream_frame); | |
| 637 EXPECT_TRUE(creator_.AddSavedFrame(frame)); | |
| 638 EXPECT_TRUE(creator_.HasPendingFrames()); | 685 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 639 | 686 |
| 640 // Enable FEC protection, and send FEC packet every 6 packets. | 687 // Enable FEC protection, and send FEC packet every 6 packets. |
| 641 creator_.set_max_packets_per_fec_group(6); | 688 creator_.set_max_packets_per_fec_group(6); |
| 642 EXPECT_TRUE(creator_.IsFecEnabled()); | 689 EXPECT_TRUE(creator_.IsFecEnabled()); |
| 643 EXPECT_DFATAL(creator_.StartFecProtectingPackets(), | 690 EXPECT_DFATAL(creator_.StartFecProtectingPackets(), |
| 644 "Cannot start FEC protection with pending frames."); | 691 "Cannot start FEC protection with pending frames."); |
| 645 EXPECT_FALSE(creator_.IsFecProtected()); | 692 EXPECT_FALSE(creator_.IsFecProtected()); |
| 646 | 693 |
| 647 // Serialize packet for transmission. | 694 // Serialize packet for transmission. |
| 648 char buffer[kMaxPacketSize]; | 695 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 649 SerializedPacket serialized = | 696 .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 650 creator_.SerializePacket(buffer, kMaxPacketSize); | 697 creator_.Flush(); |
| 651 delete serialized.packet; | |
| 652 delete serialized.retransmittable_frames; | |
| 653 EXPECT_FALSE(creator_.HasPendingFrames()); | 698 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 654 | 699 |
| 655 // Since all pending frames have been serialized, turning FEC on should work. | 700 // Since all pending frames have been serialized, turning FEC on should work. |
| 656 creator_.StartFecProtectingPackets(); | 701 creator_.StartFecProtectingPackets(); |
| 657 EXPECT_TRUE(creator_.IsFecProtected()); | 702 EXPECT_TRUE(creator_.IsFecProtected()); |
| 658 } | 703 } |
| 659 | 704 |
| 660 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { | 705 TEST_P(QuicPacketCreatorTest, ConsumeData) { |
| 661 QuicFrame frame; | 706 QuicFrame frame; |
| 662 QuicIOVector io_vector(MakeIOVector("test")); | 707 QuicIOVector io_vector(MakeIOVector("test")); |
| 663 UniqueStreamBuffer stream_buffer; | 708 ASSERT_TRUE( |
| 664 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 709 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 665 &frame, &stream_buffer); | 710 ASSERT_TRUE(frame.stream_frame); |
| 711 size_t consumed = frame.stream_frame->data.length(); |
| 666 EXPECT_EQ(4u, consumed); | 712 EXPECT_EQ(4u, consumed); |
| 667 CheckStreamFrame(frame, 1u, "test", 0u, false); | 713 CheckStreamFrame(frame, 1u, "test", 0u, false); |
| 668 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); | 714 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 669 cleanup_frames.AddFrame(frame); | |
| 670 } | 715 } |
| 671 | 716 |
| 672 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { | 717 TEST_P(QuicPacketCreatorTest, ConsumeDataFin) { |
| 673 QuicFrame frame; | 718 QuicFrame frame; |
| 674 QuicIOVector io_vector(MakeIOVector("test")); | 719 QuicIOVector io_vector(MakeIOVector("test")); |
| 675 UniqueStreamBuffer stream_buffer; | 720 ASSERT_TRUE( |
| 676 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 10u, true, | 721 creator_.ConsumeData(1u, io_vector, 0u, 10u, true, false, &frame)); |
| 677 &frame, &stream_buffer); | 722 ASSERT_TRUE(frame.stream_frame); |
| 723 size_t consumed = frame.stream_frame->data.length(); |
| 678 EXPECT_EQ(4u, consumed); | 724 EXPECT_EQ(4u, consumed); |
| 679 CheckStreamFrame(frame, 1u, "test", 10u, true); | 725 CheckStreamFrame(frame, 1u, "test", 10u, true); |
| 680 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); | 726 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 681 cleanup_frames.AddFrame(frame); | |
| 682 } | 727 } |
| 683 | 728 |
| 684 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { | 729 TEST_P(QuicPacketCreatorTest, ConsumeDataFinOnly) { |
| 685 QuicFrame frame; | 730 QuicFrame frame; |
| 686 QuicIOVector io_vector(nullptr, 0, 0); | 731 QuicIOVector io_vector(nullptr, 0, 0); |
| 687 UniqueStreamBuffer stream_buffer; | 732 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
| 688 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, | 733 ASSERT_TRUE(frame.stream_frame); |
| 689 &frame, &stream_buffer); | 734 size_t consumed = frame.stream_frame->data.length(); |
| 690 EXPECT_EQ(0u, consumed); | 735 EXPECT_EQ(0u, consumed); |
| 691 CheckStreamFrame(frame, 1u, string(), 0u, true); | 736 CheckStreamFrame(frame, 1u, string(), 0u, true); |
| 692 delete frame.stream_frame; | 737 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 693 } | 738 } |
| 694 | 739 |
| 695 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { | 740 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { |
| 696 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 741 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 697 + GetEncryptionOverhead(); | 742 + GetEncryptionOverhead(); |
| 698 for (size_t i = overhead; i < overhead + 100; ++i) { | 743 for (size_t i = overhead; i < overhead + 100; ++i) { |
| 699 creator_.SetMaxPacketLength(i); | 744 creator_.SetMaxPacketLength(i); |
| 700 const bool should_have_room = i > overhead + GetStreamFrameOverhead( | 745 const bool should_have_room = i > overhead + GetStreamFrameOverhead( |
| 701 NOT_IN_FEC_GROUP); | 746 NOT_IN_FEC_GROUP); |
| 702 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( | 747 ASSERT_EQ(should_have_room, creator_.HasRoomForStreamFrame( |
| 703 kClientDataStreamId1, kOffset)); | 748 kClientDataStreamId1, kOffset)); |
| 704 if (should_have_room) { | 749 if (should_have_room) { |
| 705 QuicFrame frame; | 750 QuicFrame frame; |
| 706 QuicIOVector io_vector(MakeIOVector("testdata")); | 751 QuicIOVector io_vector(MakeIOVector("testdata")); |
| 707 UniqueStreamBuffer stream_buffer; | 752 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 708 size_t bytes_consumed = | 753 .WillRepeatedly( |
| 709 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, | 754 Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 710 kOffset, false, &frame, &stream_buffer); | 755 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, |
| 756 kOffset, false, false, &frame)); |
| 757 ASSERT_TRUE(frame.stream_frame); |
| 758 size_t bytes_consumed = frame.stream_frame->data.length(); |
| 711 EXPECT_LT(0u, bytes_consumed); | 759 EXPECT_LT(0u, bytes_consumed); |
| 712 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 760 creator_.Flush(); |
| 713 char buffer[kMaxPacketSize]; | |
| 714 SerializedPacket serialized_packet = | |
| 715 creator_.SerializePacket(buffer, kMaxPacketSize); | |
| 716 ASSERT_TRUE(serialized_packet.packet); | |
| 717 delete serialized_packet.packet; | |
| 718 delete serialized_packet.retransmittable_frames; | |
| 719 } | 761 } |
| 720 } | 762 } |
| 721 } | 763 } |
| 722 | 764 |
| 723 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { | 765 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { |
| 724 // Compute the total overhead for a single frame in packet. | 766 // Compute the total overhead for a single frame in packet. |
| 725 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 767 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) + |
| 726 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 768 GetEncryptionOverhead() + |
| 769 GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 727 size_t capacity = kDefaultMaxPacketSize - overhead; | 770 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 728 // Now, test various sizes around this size. | 771 // Now, test various sizes around this size. |
| 729 for (int delta = -5; delta <= 5; ++delta) { | 772 for (int delta = -5; delta <= 5; ++delta) { |
| 730 string data(capacity + delta, 'A'); | 773 string data(capacity + delta, 'A'); |
| 731 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 774 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 732 QuicFrame frame; | 775 QuicFrame frame; |
| 733 QuicIOVector io_vector(MakeIOVector(data)); | 776 QuicIOVector io_vector(MakeIOVector(data)); |
| 734 UniqueStreamBuffer stream_buffer; | 777 UniqueStreamBuffer stream_buffer; |
| 735 size_t bytes_consumed = | 778 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame( |
| 736 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, | 779 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame, |
| 737 false, &frame, &stream_buffer); | 780 &stream_buffer); |
| 738 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 781 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 739 | 782 |
| 740 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 783 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 741 // BytesFree() returns bytes available for the next frame, which will | 784 // BytesFree() returns bytes available for the next frame, which will |
| 742 // be two bytes smaller since the stream frame would need to be grown. | 785 // be two bytes smaller since the stream frame would need to be grown. |
| 743 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); | 786 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); |
| 744 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; | 787 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; |
| 745 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; | 788 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
| 746 char buffer[kMaxPacketSize]; | 789 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 747 SerializedPacket serialized_packet = | 790 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 748 creator_.SerializePacket(buffer, kMaxPacketSize); | 791 creator_.Flush(); |
| 749 ASSERT_TRUE(serialized_packet.packet); | 792 ASSERT_TRUE(serialized_packet_.packet); |
| 750 delete serialized_packet.packet; | 793 ClearSerializedPacket(&serialized_packet_); |
| 751 delete serialized_packet.retransmittable_frames; | |
| 752 } | 794 } |
| 753 } | 795 } |
| 754 | 796 |
| 755 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) { | 797 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) { |
| 756 // Enable FEC protection, and send FEC packet every 6 packets. | 798 // Enable FEC protection, and send FEC packet every 6 packets. |
| 757 EXPECT_TRUE(SwitchFecProtectionOn(6)); | 799 EXPECT_TRUE(SwitchFecProtectionOn(6)); |
| 758 // Compute the total overhead for a single frame in packet. | 800 // Compute the total overhead for a single frame in packet. |
| 759 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) | 801 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) + |
| 760 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); | 802 GetEncryptionOverhead() + |
| 803 GetStreamFrameOverhead(IN_FEC_GROUP); |
| 761 size_t capacity = kDefaultMaxPacketSize - overhead; | 804 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 762 // Now, test various sizes around this size. | 805 // Now, test various sizes around this size. |
| 763 for (int delta = -5; delta <= 5; ++delta) { | 806 for (int delta = -5; delta <= 5; ++delta) { |
| 764 string data(capacity + delta, 'A'); | 807 string data(capacity + delta, 'A'); |
| 765 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 808 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 766 QuicFrame frame; | 809 QuicFrame frame; |
| 767 QuicIOVector io_vector(MakeIOVector(data)); | 810 QuicIOVector io_vector(MakeIOVector(data)); |
| 768 UniqueStreamBuffer stream_buffer; | 811 UniqueStreamBuffer stream_buffer; |
| 769 size_t bytes_consumed = | 812 size_t bytes_consumed = QuicPacketCreatorPeer::CreateStreamFrame( |
| 770 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, | 813 &creator_, kClientDataStreamId1, io_vector, 0u, kOffset, false, &frame, |
| 771 false, &frame, &stream_buffer); | 814 &stream_buffer); |
| 772 EXPECT_EQ(capacity - bytes_free, bytes_consumed); | 815 EXPECT_EQ(capacity - bytes_free, bytes_consumed); |
| 773 | 816 |
| 774 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 817 ASSERT_TRUE(creator_.AddSavedFrame(frame)); |
| 775 // BytesFree() returns bytes available for the next frame. Since stream | 818 // BytesFree() returns bytes available for the next frame. Since stream |
| 776 // frame does not grow for FEC protected packets, this should be the same | 819 // frame does not grow for FEC protected packets, this should be the same |
| 777 // as bytes_free (bound by 0). | 820 // as bytes_free (bound by 0). |
| 778 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); | 821 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); |
| 779 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; | 822 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; |
| 780 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; | 823 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; |
| 781 char buffer[kMaxPacketSize]; | 824 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 782 SerializedPacket serialized_packet = | 825 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 783 creator_.SerializePacket(buffer, kMaxPacketSize); | 826 creator_.Flush(); |
| 784 ASSERT_TRUE(serialized_packet.packet); | 827 ASSERT_TRUE(serialized_packet_.packet); |
| 785 delete serialized_packet.packet; | 828 ClearSerializedPacket(&serialized_packet_); |
| 786 delete serialized_packet.retransmittable_frames; | |
| 787 } | 829 } |
| 788 } | 830 } |
| 789 | 831 |
| 790 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { | 832 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { |
| 791 // Compute the total overhead for a single frame in packet. | 833 // Compute the total overhead for a single frame in packet. |
| 792 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 834 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 793 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 835 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 794 ASSERT_GT(kMaxPacketSize, overhead); | 836 ASSERT_GT(kMaxPacketSize, overhead); |
| 795 size_t capacity = kDefaultMaxPacketSize - overhead; | 837 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 796 // Now, test various sizes around this size. | 838 // Now, test various sizes around this size. |
| 797 for (int delta = -5; delta <= 5; ++delta) { | 839 for (int delta = -5; delta <= 5; ++delta) { |
| 798 string data(capacity + delta, 'A'); | 840 string data(capacity + delta, 'A'); |
| 799 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 841 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 800 | 842 |
| 801 QuicFrame frame; | 843 QuicFrame frame; |
| 802 QuicIOVector io_vector(MakeIOVector(data)); | 844 QuicIOVector io_vector(MakeIOVector(data)); |
| 803 UniqueStreamBuffer stream_buffer; | 845 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 804 size_t bytes_consumed = creator_.CreateStreamFrame( | 846 .WillRepeatedly( |
| 805 kCryptoStreamId, io_vector, 0u, kOffset, false, &frame, &stream_buffer); | 847 Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 848 ASSERT_TRUE(creator_.ConsumeData(kCryptoStreamId, io_vector, 0u, kOffset, |
| 849 false, true, &frame)); |
| 850 ASSERT_TRUE(frame.stream_frame); |
| 851 size_t bytes_consumed = frame.stream_frame->data.length(); |
| 806 EXPECT_LT(0u, bytes_consumed); | 852 EXPECT_LT(0u, bytes_consumed); |
| 807 ASSERT_TRUE(creator_.AddPaddedSavedFrame(frame, nullptr)); | 853 creator_.Flush(); |
| 808 char buffer[kMaxPacketSize]; | 854 ASSERT_TRUE(serialized_packet_.packet); |
| 809 SerializedPacket serialized_packet = | |
| 810 creator_.SerializePacket(buffer, kMaxPacketSize); | |
| 811 ASSERT_TRUE(serialized_packet.packet); | |
| 812 // If there is not enough space in the packet to fit a padding frame | 855 // If there is not enough space in the packet to fit a padding frame |
| 813 // (1 byte) and to expand the stream frame (another 2 bytes) the packet | 856 // (1 byte) and to expand the stream frame (another 2 bytes) the packet |
| 814 // will not be padded. | 857 // will not be padded. |
| 815 if (bytes_free < 3) { | 858 if (bytes_free < 3) { |
| 816 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 859 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 817 serialized_packet.packet->length()); | 860 serialized_packet_.packet->length()); |
| 818 } else { | 861 } else { |
| 819 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); | 862 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.packet->length()); |
| 820 } | 863 } |
| 821 delete serialized_packet.packet; | 864 ClearSerializedPacket(&serialized_packet_); |
| 822 delete serialized_packet.retransmittable_frames; | |
| 823 } | 865 } |
| 824 } | 866 } |
| 825 | 867 |
| 826 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { | 868 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { |
| 827 // Compute the total overhead for a single frame in packet. | 869 // Compute the total overhead for a single frame in packet. |
| 828 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) | 870 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) |
| 829 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); | 871 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); |
| 830 ASSERT_GT(kDefaultMaxPacketSize, overhead); | 872 ASSERT_GT(kDefaultMaxPacketSize, overhead); |
| 831 size_t capacity = kDefaultMaxPacketSize - overhead; | 873 size_t capacity = kDefaultMaxPacketSize - overhead; |
| 832 // Now, test various sizes around this size. | 874 // Now, test various sizes around this size. |
| 833 for (int delta = -5; delta <= 5; ++delta) { | 875 for (int delta = -5; delta <= 5; ++delta) { |
| 834 string data(capacity + delta, 'A'); | 876 string data(capacity + delta, 'A'); |
| 835 size_t bytes_free = delta > 0 ? 0 : 0 - delta; | 877 size_t bytes_free = delta > 0 ? 0 : 0 - delta; |
| 836 | 878 |
| 837 QuicFrame frame; | 879 QuicFrame frame; |
| 838 QuicIOVector io_vector(MakeIOVector(data)); | 880 QuicIOVector io_vector(MakeIOVector(data)); |
| 839 UniqueStreamBuffer stream_buffer; | 881 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 840 size_t bytes_consumed = | 882 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 841 creator_.CreateStreamFrame(kClientDataStreamId1, io_vector, 0u, kOffset, | 883 ASSERT_TRUE(creator_.ConsumeData(kClientDataStreamId1, io_vector, 0u, |
| 842 false, &frame, &stream_buffer); | 884 kOffset, false, false, &frame)); |
| 885 ASSERT_TRUE(frame.stream_frame); |
| 886 size_t bytes_consumed = frame.stream_frame->data.length(); |
| 843 EXPECT_LT(0u, bytes_consumed); | 887 EXPECT_LT(0u, bytes_consumed); |
| 844 ASSERT_TRUE(creator_.AddSavedFrame(frame)); | 888 creator_.Flush(); |
| 845 char buffer[kMaxPacketSize]; | 889 ASSERT_TRUE(serialized_packet_.packet); |
| 846 SerializedPacket serialized_packet = | |
| 847 creator_.SerializePacket(buffer, kMaxPacketSize); | |
| 848 ASSERT_TRUE(serialized_packet.packet); | |
| 849 if (bytes_free > 0) { | 890 if (bytes_free > 0) { |
| 850 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, | 891 EXPECT_EQ(kDefaultMaxPacketSize - bytes_free, |
| 851 serialized_packet.packet->length()); | 892 serialized_packet_.packet->length()); |
| 852 } else { | 893 } else { |
| 853 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet.packet->length()); | 894 EXPECT_EQ(kDefaultMaxPacketSize, serialized_packet_.packet->length()); |
| 854 } | 895 } |
| 855 delete serialized_packet.packet; | 896 ClearSerializedPacket(&serialized_packet_); |
| 856 delete serialized_packet.retransmittable_frames; | |
| 857 } | 897 } |
| 858 } | 898 } |
| 859 | 899 |
| 860 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { | 900 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { |
| 861 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_SERVER); | 901 QuicFramerPeer::SetPerspective(&client_framer_, Perspective::IS_SERVER); |
| 862 QuicVersionVector versions; | 902 QuicVersionVector versions; |
| 863 versions.push_back(test::QuicVersionMax()); | 903 versions.push_back(test::QuicVersionMax()); |
| 864 scoped_ptr<QuicEncryptedPacket> encrypted( | 904 scoped_ptr<QuicEncryptedPacket> encrypted( |
| 865 creator_.SerializeVersionNegotiationPacket(versions)); | 905 creator_.SerializeVersionNegotiationPacket(versions)); |
| 866 | 906 |
| (...skipping 84 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 951 DoAll(SaveArg<0>(&header), Return(true))); | 991 DoAll(SaveArg<0>(&header), Return(true))); |
| 952 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); | 992 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
| 953 EXPECT_CALL(framer_visitor_, OnPacketComplete()); | 993 EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
| 954 } | 994 } |
| 955 ProcessPacket(serialized.packet); | 995 ProcessPacket(serialized.packet); |
| 956 EXPECT_EQ(GetParam().version_serialization, | 996 EXPECT_EQ(GetParam().version_serialization, |
| 957 header.public_header.version_flag); | 997 header.public_header.version_flag); |
| 958 delete serialized.packet; | 998 delete serialized.packet; |
| 959 } | 999 } |
| 960 | 1000 |
| 961 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { | 1001 TEST_P(QuicPacketCreatorTest, ConsumeDataLargerThanOneStreamFrame) { |
| 962 if (!GetParam().version_serialization) { | 1002 if (!GetParam().version_serialization) { |
| 963 creator_.StopSendingVersion(); | 1003 creator_.StopSendingVersion(); |
| 964 } | 1004 } |
| 965 // A string larger than fits into a frame. | 1005 // A string larger than fits into a frame. |
| 966 size_t payload_length; | 1006 size_t payload_length; |
| 967 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( | 1007 creator_.SetMaxPacketLength(GetPacketLengthForOneStream( |
| 968 client_framer_.version(), | 1008 client_framer_.version(), |
| 969 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 1009 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 970 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, | 1010 creator_.connection_id_length(), PACKET_1BYTE_PACKET_NUMBER, |
| 971 NOT_IN_FEC_GROUP, &payload_length)); | 1011 NOT_IN_FEC_GROUP, &payload_length)); |
| 972 QuicFrame frame; | 1012 QuicFrame frame; |
| 973 const string too_long_payload(payload_length * 2, 'a'); | 1013 const string too_long_payload(payload_length * 2, 'a'); |
| 974 QuicIOVector io_vector(MakeIOVector(too_long_payload)); | 1014 QuicIOVector io_vector(MakeIOVector(too_long_payload)); |
| 975 UniqueStreamBuffer stream_buffer; | 1015 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 976 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, true, | 1016 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 977 &frame, &stream_buffer); | 1017 ASSERT_TRUE(creator_.ConsumeData(1u, io_vector, 0u, 0u, true, false, &frame)); |
| 1018 ASSERT_TRUE(frame.stream_frame); |
| 1019 size_t consumed = frame.stream_frame->data.length(); |
| 978 EXPECT_EQ(payload_length, consumed); | 1020 EXPECT_EQ(payload_length, consumed); |
| 979 const string payload(payload_length, 'a'); | 1021 const string payload(payload_length, 'a'); |
| 980 CheckStreamFrame(frame, 1u, payload, 0u, false); | 1022 CheckStreamFrame(frame, 1u, payload, 0u, false); |
| 981 RetransmittableFrames cleanup_frames(ENCRYPTION_NONE); | 1023 creator_.Flush(); |
| 982 cleanup_frames.AddFrame(frame); | 1024 ClearSerializedPacket(&serialized_packet_); |
| 983 } | 1025 } |
| 984 | 1026 |
| 985 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { | 1027 TEST_P(QuicPacketCreatorTest, AddFrameAndFlush) { |
| 986 if (!GetParam().version_serialization) { | 1028 if (!GetParam().version_serialization) { |
| 987 creator_.StopSendingVersion(); | 1029 creator_.StopSendingVersion(); |
| 988 } | 1030 } |
| 989 const size_t max_plaintext_size = | 1031 const size_t max_plaintext_size = |
| 990 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 1032 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 991 EXPECT_FALSE(creator_.HasPendingFrames()); | 1033 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 992 EXPECT_EQ(max_plaintext_size - | 1034 EXPECT_EQ(max_plaintext_size - |
| 993 GetPacketHeaderSize( | 1035 GetPacketHeaderSize( |
| 994 creator_.connection_id_length(), | 1036 creator_.connection_id_length(), |
| 995 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 1037 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 996 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 1038 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), |
| 997 creator_.BytesFree()); | 1039 creator_.BytesFree()); |
| 998 | 1040 |
| 999 // Add a variety of frame types and then a padding frame. | 1041 // Add a variety of frame types and then a padding frame. |
| 1000 QuicAckFrame ack_frame(MakeAckFrame(0u)); | 1042 QuicAckFrame ack_frame(MakeAckFrame(0u)); |
| 1001 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 1043 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 1002 EXPECT_TRUE(creator_.HasPendingFrames()); | 1044 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1003 | 1045 |
| 1004 QuicFrame frame; | 1046 QuicFrame frame; |
| 1005 QuicIOVector io_vector(MakeIOVector("test")); | 1047 QuicIOVector io_vector(MakeIOVector("test")); |
| 1006 UniqueStreamBuffer stream_buffer; | 1048 ASSERT_TRUE( |
| 1007 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 1049 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1008 &frame, &stream_buffer); | 1050 ASSERT_TRUE(frame.stream_frame); |
| 1051 size_t consumed = frame.stream_frame->data.length(); |
| 1009 EXPECT_EQ(4u, consumed); | 1052 EXPECT_EQ(4u, consumed); |
| 1010 ASSERT_TRUE(frame.stream_frame); | |
| 1011 EXPECT_TRUE(creator_.AddSavedFrame(frame)); | |
| 1012 EXPECT_TRUE(creator_.HasPendingFrames()); | 1053 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1013 | 1054 |
| 1014 QuicPaddingFrame padding_frame; | 1055 QuicPaddingFrame padding_frame; |
| 1015 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); | 1056 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(padding_frame))); |
| 1016 EXPECT_TRUE(creator_.HasPendingFrames()); | 1057 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1017 EXPECT_EQ(0u, creator_.BytesFree()); | 1058 EXPECT_EQ(0u, creator_.BytesFree()); |
| 1018 | 1059 |
| 1060 // Packet is full. Creator will flush. |
| 1061 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1062 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1019 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 1063 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 1020 | 1064 |
| 1021 // Ensure the packet is successfully created. | 1065 // Ensure the packet is successfully created. |
| 1022 char buffer[kMaxPacketSize]; | 1066 ASSERT_TRUE(serialized_packet_.packet); |
| 1023 SerializedPacket serialized = | 1067 ASSERT_TRUE(serialized_packet_.retransmittable_frames); |
| 1024 creator_.SerializePacket(buffer, kMaxPacketSize); | 1068 RetransmittableFrames* retransmittable = |
| 1025 ASSERT_TRUE(serialized.packet); | 1069 serialized_packet_.retransmittable_frames; |
| 1026 delete serialized.packet; | |
| 1027 ASSERT_TRUE(serialized.retransmittable_frames); | |
| 1028 RetransmittableFrames* retransmittable = serialized.retransmittable_frames; | |
| 1029 ASSERT_EQ(1u, retransmittable->frames().size()); | 1070 ASSERT_EQ(1u, retransmittable->frames().size()); |
| 1030 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); | 1071 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); |
| 1031 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); | 1072 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); |
| 1032 delete serialized.retransmittable_frames; | 1073 ClearSerializedPacket(&serialized_packet_); |
| 1033 | 1074 |
| 1034 EXPECT_FALSE(creator_.HasPendingFrames()); | 1075 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1035 EXPECT_EQ(max_plaintext_size - | 1076 EXPECT_EQ(max_plaintext_size - |
| 1036 GetPacketHeaderSize( | 1077 GetPacketHeaderSize( |
| 1037 creator_.connection_id_length(), | 1078 creator_.connection_id_length(), |
| 1038 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), | 1079 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), |
| 1039 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), | 1080 PACKET_1BYTE_PACKET_NUMBER, NOT_IN_FEC_GROUP), |
| 1040 creator_.BytesFree()); | 1081 creator_.BytesFree()); |
| 1041 } | 1082 } |
| 1042 | 1083 |
| (...skipping 12 matching lines...) Expand all Loading... |
| 1055 EXPECT_GT(creator_.BytesFree(), frame_len); | 1096 EXPECT_GT(creator_.BytesFree(), frame_len); |
| 1056 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 1097 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
| 1057 | 1098 |
| 1058 // Add ack frame to creator. | 1099 // Add ack frame to creator. |
| 1059 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 1100 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 1060 EXPECT_TRUE(creator_.HasPendingFrames()); | 1101 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1061 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); | 1102 EXPECT_GT(creator_.max_packet_length(), creator_.PacketSize()); |
| 1062 EXPECT_LT(0u, creator_.BytesFree()); | 1103 EXPECT_LT(0u, creator_.BytesFree()); |
| 1063 | 1104 |
| 1064 // Make sure that an additional stream frame can be added to the packet. | 1105 // Make sure that an additional stream frame can be added to the packet. |
| 1065 QuicFrame stream_frame; | 1106 QuicFrame frame; |
| 1066 QuicIOVector io_vector(MakeIOVector("test")); | 1107 QuicIOVector io_vector(MakeIOVector("test")); |
| 1067 UniqueStreamBuffer stream_buffer; | 1108 ASSERT_TRUE( |
| 1068 size_t consumed = creator_.CreateStreamFrame(2u, io_vector, 0u, 0u, false, | 1109 creator_.ConsumeData(2u, io_vector, 0u, 0u, false, false, &frame)); |
| 1069 &stream_frame, &stream_buffer); | 1110 ASSERT_TRUE(frame.stream_frame); |
| 1111 size_t consumed = frame.stream_frame->data.length(); |
| 1070 EXPECT_EQ(4u, consumed); | 1112 EXPECT_EQ(4u, consumed); |
| 1071 ASSERT_TRUE(stream_frame.stream_frame); | |
| 1072 EXPECT_TRUE(creator_.AddSavedFrame(stream_frame)); | |
| 1073 EXPECT_TRUE(creator_.HasPendingFrames()); | 1113 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1074 | 1114 |
| 1075 // Ensure the packet is successfully created, and the packet size estimate | 1115 // Ensure the packet is successfully created, and the packet size estimate |
| 1076 // matches the serialized packet length. | 1116 // matches the serialized packet length. |
| 1077 EXPECT_CALL(entropy_calculator_, | 1117 EXPECT_CALL(entropy_calculator_, EntropyHash(_)).WillOnce(testing::Return(0)); |
| 1078 EntropyHash(_)).WillOnce(testing::Return(0)); | 1118 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1119 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1079 size_t est_packet_size = creator_.PacketSize(); | 1120 size_t est_packet_size = creator_.PacketSize(); |
| 1080 char buffer[kMaxPacketSize]; | 1121 creator_.Flush(); |
| 1081 SerializedPacket serialized = | 1122 ASSERT_TRUE(serialized_packet_.packet); |
| 1082 creator_.SerializePacket(buffer, kMaxPacketSize); | 1123 EXPECT_EQ(est_packet_size, client_framer_.GetMaxPlaintextSize( |
| 1083 ASSERT_TRUE(serialized.packet); | 1124 serialized_packet_.packet->length())); |
| 1084 EXPECT_EQ(est_packet_size, | 1125 ClearSerializedPacket(&serialized_packet_); |
| 1085 client_framer_.GetMaxPlaintextSize(serialized.packet->length())); | |
| 1086 delete serialized.retransmittable_frames; | |
| 1087 delete serialized.packet; | |
| 1088 } | 1126 } |
| 1089 | 1127 |
| 1090 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) { | 1128 TEST_P(QuicPacketCreatorTest, SerializeTruncatedAckFrameWithSmallPacketSize) { |
| 1091 if (!GetParam().version_serialization) { | 1129 if (!GetParam().version_serialization) { |
| 1092 creator_.StopSendingVersion(); | 1130 creator_.StopSendingVersion(); |
| 1093 } | 1131 } |
| 1094 creator_.SetMaxPacketLength(500u); | 1132 creator_.SetMaxPacketLength(500u); |
| 1095 | 1133 |
| 1096 const size_t max_plaintext_size = | 1134 const size_t max_plaintext_size = |
| 1097 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); | 1135 client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()); |
| 1098 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); | 1136 EXPECT_EQ(max_plaintext_size - creator_.PacketSize(), creator_.BytesFree()); |
| 1099 | 1137 |
| 1100 // Serialized length of ack frame with 2000 nack ranges should be limited by | 1138 // Serialized length of ack frame with 2000 nack ranges should be limited by |
| 1101 // the packet size. | 1139 // the packet size. |
| 1102 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); | 1140 QuicAckFrame ack_frame = MakeAckFrameWithNackRanges(2000u, 0u); |
| 1103 size_t frame_len = client_framer_.GetSerializedFrameLength( | 1141 size_t frame_len = client_framer_.GetSerializedFrameLength( |
| 1104 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, | 1142 QuicFrame(&ack_frame), creator_.BytesFree(), true, true, NOT_IN_FEC_GROUP, |
| 1105 PACKET_1BYTE_PACKET_NUMBER); | 1143 PACKET_1BYTE_PACKET_NUMBER); |
| 1106 EXPECT_EQ(creator_.BytesFree(), frame_len); | 1144 EXPECT_EQ(creator_.BytesFree(), frame_len); |
| 1107 | 1145 |
| 1108 // Add ack frame to creator. | 1146 // Add ack frame to creator. |
| 1109 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); | 1147 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); |
| 1110 EXPECT_TRUE(creator_.HasPendingFrames()); | 1148 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1111 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), | 1149 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(creator_.max_packet_length()), |
| 1112 creator_.PacketSize()); | 1150 creator_.PacketSize()); |
| 1113 EXPECT_EQ(0u, creator_.BytesFree()); | 1151 EXPECT_EQ(0u, creator_.BytesFree()); |
| 1114 | 1152 |
| 1115 // Ensure the packet is successfully created, and the packet size estimate | 1153 // Ensure the packet is successfully created, and the packet size estimate |
| 1116 // may not match the serialized packet length. | 1154 // may not match the serialized packet length. |
| 1117 EXPECT_CALL(entropy_calculator_, | 1155 EXPECT_CALL(entropy_calculator_, EntropyHash(_)).WillOnce(Return(0)); |
| 1118 EntropyHash(_)).WillOnce(Return(0)); | |
| 1119 size_t est_packet_size = creator_.PacketSize(); | 1156 size_t est_packet_size = creator_.PacketSize(); |
| 1120 char buffer[kMaxPacketSize]; | 1157 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1121 SerializedPacket serialized = | 1158 .WillOnce(Invoke(this, &QuicPacketCreatorTest::SaveSerializedPacket)); |
| 1122 creator_.SerializePacket(buffer, kMaxPacketSize); | 1159 creator_.Flush(); |
| 1123 ASSERT_TRUE(serialized.packet); | 1160 ASSERT_TRUE(serialized_packet_.packet); |
| 1124 EXPECT_GE(est_packet_size, | 1161 EXPECT_GE(est_packet_size, client_framer_.GetMaxPlaintextSize( |
| 1125 client_framer_.GetMaxPlaintextSize(serialized.packet->length())); | 1162 serialized_packet_.packet->length())); |
| 1126 delete serialized.packet; | 1163 ClearSerializedPacket(&serialized_packet_); |
| 1127 } | 1164 } |
| 1128 | 1165 |
| 1129 | 1166 |
| 1130 TEST_P(QuicPacketCreatorTest, EntropyFlag) { | 1167 TEST_P(QuicPacketCreatorTest, EntropyFlag) { |
| 1131 frames_.push_back( | 1168 frames_.push_back( |
| 1132 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); | 1169 QuicFrame(new QuicStreamFrame(0u, false, 0u, StringPiece()))); |
| 1133 | 1170 |
| 1134 char buffer[kMaxPacketSize]; | 1171 char buffer[kMaxPacketSize]; |
| 1135 for (int i = 0; i < 2; ++i) { | 1172 for (int i = 0; i < 2; ++i) { |
| 1136 for (int j = 0; j < 64; ++j) { | 1173 for (int j = 0; j < 64; ++j) { |
| (...skipping 66 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1203 | 1240 |
| 1204 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); | 1241 serialized = creator_.SerializeFec(buffer, kMaxPacketSize); |
| 1205 ASSERT_EQ(3u, serialized.packet_number); | 1242 ASSERT_EQ(3u, serialized.packet_number); |
| 1206 delete serialized.packet; | 1243 delete serialized.packet; |
| 1207 } | 1244 } |
| 1208 | 1245 |
| 1209 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) { | 1246 TEST_P(QuicPacketCreatorTest, ResetFecGroupWithQueuedFrames) { |
| 1210 // Add a stream frame to the creator. | 1247 // Add a stream frame to the creator. |
| 1211 QuicFrame frame; | 1248 QuicFrame frame; |
| 1212 QuicIOVector io_vector(MakeIOVector("test")); | 1249 QuicIOVector io_vector(MakeIOVector("test")); |
| 1213 UniqueStreamBuffer stream_buffer; | 1250 ASSERT_TRUE( |
| 1214 size_t consumed = creator_.CreateStreamFrame(1u, io_vector, 0u, 0u, false, | 1251 creator_.ConsumeData(1u, io_vector, 0u, 0u, false, false, &frame)); |
| 1215 &frame, &stream_buffer); | 1252 ASSERT_TRUE(frame.stream_frame); |
| 1253 size_t consumed = frame.stream_frame->data.length(); |
| 1216 EXPECT_EQ(4u, consumed); | 1254 EXPECT_EQ(4u, consumed); |
| 1217 ASSERT_TRUE(frame.stream_frame); | |
| 1218 EXPECT_TRUE(creator_.AddSavedFrame(frame)); | |
| 1219 EXPECT_TRUE(creator_.HasPendingFrames()); | 1255 EXPECT_TRUE(creator_.HasPendingFrames()); |
| 1220 EXPECT_DFATAL(creator_.ResetFecGroup(), | 1256 EXPECT_DFATAL(creator_.ResetFecGroup(), |
| 1221 "Cannot reset FEC group with pending frames."); | 1257 "Cannot reset FEC group with pending frames."); |
| 1222 | 1258 |
| 1223 // Serialize packet for transmission. | 1259 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
| 1224 char buffer[kMaxPacketSize]; | 1260 .WillOnce(Invoke(this, &QuicPacketCreatorTest::ClearSerializedPacket)); |
| 1225 SerializedPacket serialized = | 1261 creator_.Flush(); |
| 1226 creator_.SerializePacket(buffer, kMaxPacketSize); | |
| 1227 delete serialized.packet; | |
| 1228 delete serialized.retransmittable_frames; | |
| 1229 EXPECT_FALSE(creator_.HasPendingFrames()); | 1262 EXPECT_FALSE(creator_.HasPendingFrames()); |
| 1230 | 1263 |
| 1231 // Close the FEC Group. | 1264 // Close the FEC Group. |
| 1232 creator_.ResetFecGroup(); | 1265 creator_.ResetFecGroup(); |
| 1233 EXPECT_FALSE(creator_.IsFecGroupOpen()); | 1266 EXPECT_FALSE(creator_.IsFecGroupOpen()); |
| 1234 } | 1267 } |
| 1235 | 1268 |
| 1236 } // namespace | 1269 } // namespace |
| 1237 } // namespace test | 1270 } // namespace test |
| 1238 } // namespace net | 1271 } // namespace net |
| OLD | NEW |