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

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

Issue 266243004: Clang format slam. Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 years, 7 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/quic/quic_packet_creator.h" 5 #include "net/quic/quic_packet_creator.h"
6 6
7 #include "base/stl_util.h" 7 #include "base/stl_util.h"
8 #include "net/quic/crypto/null_encrypter.h" 8 #include "net/quic/crypto/null_encrypter.h"
9 #include "net/quic/crypto/quic_decrypter.h" 9 #include "net/quic/crypto/quic_decrypter.h"
10 #include "net/quic/crypto/quic_encrypter.h" 10 #include "net/quic/crypto/quic_encrypter.h"
(...skipping 13 matching lines...) Expand all
24 using testing::Return; 24 using testing::Return;
25 using testing::SaveArg; 25 using testing::SaveArg;
26 using testing::_; 26 using testing::_;
27 27
28 namespace net { 28 namespace net {
29 namespace test { 29 namespace test {
30 namespace { 30 namespace {
31 31
32 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}. 32 // Run tests with combinations of {QuicVersion, ToggleVersionSerialization}.
33 struct TestParams { 33 struct TestParams {
34 TestParams(QuicVersion version, 34 TestParams(QuicVersion version, bool version_serialization)
35 bool version_serialization) 35 : version(version), version_serialization(version_serialization) {}
36 : version(version),
37 version_serialization(version_serialization) {
38 }
39 36
40 friend ostream& operator<<(ostream& os, const TestParams& p) { 37 friend ostream& operator<<(ostream& os, const TestParams& p) {
41 os << "{ client_version: " << QuicVersionToString(p.version) 38 os << "{ client_version: " << QuicVersionToString(p.version)
42 << " include version: " << p.version_serialization << " }"; 39 << " include version: " << p.version_serialization << " }";
43 return os; 40 return os;
44 } 41 }
45 42
46 QuicVersion version; 43 QuicVersion version;
47 bool version_serialization; 44 bool version_serialization;
48 }; 45 };
49 46
50 // Constructs various test permutations. 47 // Constructs various test permutations.
51 vector<TestParams> GetTestParams() { 48 vector<TestParams> GetTestParams() {
52 vector<TestParams> params; 49 vector<TestParams> params;
53 QuicVersionVector all_supported_versions = QuicSupportedVersions(); 50 QuicVersionVector all_supported_versions = QuicSupportedVersions();
54 for (size_t i = 0; i < all_supported_versions.size(); ++i) { 51 for (size_t i = 0; i < all_supported_versions.size(); ++i) {
55 params.push_back(TestParams(all_supported_versions[i], true)); 52 params.push_back(TestParams(all_supported_versions[i], true));
56 params.push_back(TestParams(all_supported_versions[i], false)); 53 params.push_back(TestParams(all_supported_versions[i], false));
57 } 54 }
58 return params; 55 return params;
59 } 56 }
60 57
61 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> { 58 class QuicPacketCreatorTest : public ::testing::TestWithParam<TestParams> {
62 protected: 59 protected:
63 QuicPacketCreatorTest() 60 QuicPacketCreatorTest()
64 : server_framer_(SupportedVersions(GetParam().version), QuicTime::Zero(), 61 : server_framer_(SupportedVersions(GetParam().version),
62 QuicTime::Zero(),
65 true), 63 true),
66 client_framer_(SupportedVersions(GetParam().version), QuicTime::Zero(), 64 client_framer_(SupportedVersions(GetParam().version),
65 QuicTime::Zero(),
67 false), 66 false),
68 sequence_number_(0), 67 sequence_number_(0),
69 connection_id_(2), 68 connection_id_(2),
70 data_("foo"), 69 data_("foo"),
71 creator_(connection_id_, &client_framer_, &mock_random_, false) { 70 creator_(connection_id_, &client_framer_, &mock_random_, false) {
72 client_framer_.set_visitor(&framer_visitor_); 71 client_framer_.set_visitor(&framer_visitor_);
73 server_framer_.set_visitor(&framer_visitor_); 72 server_framer_.set_visitor(&framer_visitor_);
74 } 73 }
75 ~QuicPacketCreatorTest() { 74 ~QuicPacketCreatorTest() {}
76 }
77 75
78 void ProcessPacket(QuicPacket* packet) { 76 void ProcessPacket(QuicPacket* packet) {
79 scoped_ptr<QuicEncryptedPacket> encrypted( 77 scoped_ptr<QuicEncryptedPacket> encrypted(server_framer_.EncryptPacket(
80 server_framer_.EncryptPacket(ENCRYPTION_NONE, sequence_number_, 78 ENCRYPTION_NONE, sequence_number_, *packet));
81 *packet));
82 server_framer_.ProcessPacket(*encrypted); 79 server_framer_.ProcessPacket(*encrypted);
83 } 80 }
84 81
85 void CheckStreamFrame(const QuicFrame& frame, 82 void CheckStreamFrame(const QuicFrame& frame,
86 QuicStreamId stream_id, 83 QuicStreamId stream_id,
87 const string& data, 84 const string& data,
88 QuicStreamOffset offset, 85 QuicStreamOffset offset,
89 bool fin) { 86 bool fin) {
90 EXPECT_EQ(STREAM_FRAME, frame.type); 87 EXPECT_EQ(STREAM_FRAME, frame.type);
91 ASSERT_TRUE(frame.stream_frame); 88 ASSERT_TRUE(frame.stream_frame);
(...skipping 10 matching lines...) Expand all
102 return GetPacketHeaderSize(creator_.options()->send_connection_id_length, 99 return GetPacketHeaderSize(creator_.options()->send_connection_id_length,
103 kIncludeVersion, 100 kIncludeVersion,
104 creator_.options()->send_sequence_number_length, 101 creator_.options()->send_sequence_number_length,
105 is_in_fec_group); 102 is_in_fec_group);
106 } 103 }
107 104
108 // Returns the number of bytes of overhead that will be added to a packet 105 // Returns the number of bytes of overhead that will be added to a packet
109 // of maximum length. 106 // of maximum length.
110 size_t GetEncryptionOverhead() { 107 size_t GetEncryptionOverhead() {
111 return creator_.options()->max_packet_length - 108 return creator_.options()->max_packet_length -
112 client_framer_.GetMaxPlaintextSize( 109 client_framer_.GetMaxPlaintextSize(
113 creator_.options()->max_packet_length); 110 creator_.options()->max_packet_length);
114 } 111 }
115 112
116 // Returns the number of bytes consumed by the non-data fields of a stream 113 // Returns the number of bytes consumed by the non-data fields of a stream
117 // frame, assuming it is the last frame in the packet 114 // frame, assuming it is the last frame in the packet
118 size_t GetStreamFrameOverhead(InFecGroup is_in_fec_group) { 115 size_t GetStreamFrameOverhead(InFecGroup is_in_fec_group) {
119 return QuicFramer::GetMinStreamFrameSize( 116 return QuicFramer::GetMinStreamFrameSize(
120 client_framer_.version(), kStreamId, kOffset, true, is_in_fec_group); 117 client_framer_.version(), kStreamId, kOffset, true, is_in_fec_group);
121 } 118 }
122 119
123 static const QuicStreamId kStreamId = 1u; 120 static const QuicStreamId kStreamId = 1u;
124 static const QuicStreamOffset kOffset = 1u; 121 static const QuicStreamOffset kOffset = 1u;
125 122
126 QuicFrames frames_; 123 QuicFrames frames_;
127 QuicFramer server_framer_; 124 QuicFramer server_framer_;
128 QuicFramer client_framer_; 125 QuicFramer client_framer_;
129 testing::StrictMock<MockFramerVisitor> framer_visitor_; 126 testing::StrictMock<MockFramerVisitor> framer_visitor_;
130 QuicPacketSequenceNumber sequence_number_; 127 QuicPacketSequenceNumber sequence_number_;
131 QuicConnectionId connection_id_; 128 QuicConnectionId connection_id_;
132 string data_; 129 string data_;
133 MockRandom mock_random_; 130 MockRandom mock_random_;
134 QuicPacketCreator creator_; 131 QuicPacketCreator creator_;
135 }; 132 };
136 133
137 // Run all packet creator tests with all supported versions of QUIC, and with 134 // Run all packet creator tests with all supported versions of QUIC, and with
138 // and without version in the packet header. 135 // and without version in the packet header.
139 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests, 136 INSTANTIATE_TEST_CASE_P(QuicPacketCreatorTests,
140 QuicPacketCreatorTest, 137 QuicPacketCreatorTest,
141 ::testing::ValuesIn(GetTestParams())); 138 ::testing::ValuesIn(GetTestParams()));
142 139
143
144 TEST_P(QuicPacketCreatorTest, SerializeFrames) { 140 TEST_P(QuicPacketCreatorTest, SerializeFrames) {
145 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u)))); 141 frames_.push_back(QuicFrame(new QuicAckFrame(MakeAckFrame(0u, 0u))));
146 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); 142 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
147 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector()))); 143 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, true, 0u, IOVector())));
148 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); 144 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
149 delete frames_[0].ack_frame; 145 delete frames_[0].ack_frame;
150 delete frames_[1].stream_frame; 146 delete frames_[1].stream_frame;
151 delete frames_[2].stream_frame; 147 delete frames_[2].stream_frame;
152 148
153 { 149 {
(...skipping 232 matching lines...) Expand 10 before | Expand all | Expand 10 after
386 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 382 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
387 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); 383 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_));
388 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 384 EXPECT_CALL(framer_visitor_, OnPacketComplete());
389 385
390 ProcessPacket(serialized.packet); 386 ProcessPacket(serialized.packet);
391 delete serialized.packet; 387 delete serialized.packet;
392 } 388 }
393 389
394 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) { 390 TEST_P(QuicPacketCreatorTest, CreateStreamFrame) {
395 QuicFrame frame; 391 QuicFrame frame;
396 size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 0u, 392 size_t consumed =
397 false, &frame); 393 creator_.CreateStreamFrame(1u, MakeIOVector("test"), 0u, false, &frame);
398 EXPECT_EQ(4u, consumed); 394 EXPECT_EQ(4u, consumed);
399 CheckStreamFrame(frame, 1u, "test", 0u, false); 395 CheckStreamFrame(frame, 1u, "test", 0u, false);
400 delete frame.stream_frame; 396 delete frame.stream_frame;
401 } 397 }
402 398
403 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) { 399 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFin) {
404 QuicFrame frame; 400 QuicFrame frame;
405 size_t consumed = creator_.CreateStreamFrame(1u, MakeIOVector("test"), 10u, 401 size_t consumed =
406 true, &frame); 402 creator_.CreateStreamFrame(1u, MakeIOVector("test"), 10u, true, &frame);
407 EXPECT_EQ(4u, consumed); 403 EXPECT_EQ(4u, consumed);
408 CheckStreamFrame(frame, 1u, "test", 10u, true); 404 CheckStreamFrame(frame, 1u, "test", 10u, true);
409 delete frame.stream_frame; 405 delete frame.stream_frame;
410 } 406 }
411 407
412 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { 408 TEST_P(QuicPacketCreatorTest, CreateStreamFrameFinOnly) {
413 QuicFrame frame; 409 QuicFrame frame;
414 size_t consumed = creator_.CreateStreamFrame(1u, IOVector(), 0u, true, 410 size_t consumed =
415 &frame); 411 creator_.CreateStreamFrame(1u, IOVector(), 0u, true, &frame);
416 EXPECT_EQ(0u, consumed); 412 EXPECT_EQ(0u, consumed);
417 CheckStreamFrame(frame, 1u, string(), 0u, true); 413 CheckStreamFrame(frame, 1u, string(), 0u, true);
418 delete frame.stream_frame; 414 delete frame.stream_frame;
419 } 415 }
420 416
421 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) { 417 TEST_P(QuicPacketCreatorTest, CreateAllFreeBytesForStreamFrames) {
422 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 418 const size_t overhead =
423 + GetEncryptionOverhead(); 419 GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) + GetEncryptionOverhead();
424 for (size_t i = overhead; i < overhead + 100; ++i) { 420 for (size_t i = overhead; i < overhead + 100; ++i) {
425 creator_.options()->max_packet_length = i; 421 creator_.options()->max_packet_length = i;
426 const bool should_have_room = i > overhead + GetStreamFrameOverhead( 422 const bool should_have_room =
427 NOT_IN_FEC_GROUP); 423 i > overhead + GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
428 ASSERT_EQ(should_have_room, 424 ASSERT_EQ(should_have_room,
429 creator_.HasRoomForStreamFrame(kStreamId, kOffset)); 425 creator_.HasRoomForStreamFrame(kStreamId, kOffset));
430 if (should_have_room) { 426 if (should_have_room) {
431 QuicFrame frame; 427 QuicFrame frame;
432 size_t bytes_consumed = creator_.CreateStreamFrame( 428 size_t bytes_consumed = creator_.CreateStreamFrame(
433 kStreamId, MakeIOVector("testdata"), kOffset, false, &frame); 429 kStreamId, MakeIOVector("testdata"), kOffset, false, &frame);
434 EXPECT_LT(0u, bytes_consumed); 430 EXPECT_LT(0u, bytes_consumed);
435 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 431 ASSERT_TRUE(creator_.AddSavedFrame(frame));
436 SerializedPacket serialized_packet = creator_.SerializePacket(); 432 SerializedPacket serialized_packet = creator_.SerializePacket();
437 ASSERT_TRUE(serialized_packet.packet); 433 ASSERT_TRUE(serialized_packet.packet);
438 delete serialized_packet.packet; 434 delete serialized_packet.packet;
439 delete serialized_packet.retransmittable_frames; 435 delete serialized_packet.retransmittable_frames;
440 } 436 }
441 } 437 }
442 } 438 }
443 439
444 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) { 440 TEST_P(QuicPacketCreatorTest, StreamFrameConsumption) {
445 // Compute the total overhead for a single frame in packet. 441 // Compute the total overhead for a single frame in packet.
446 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 442 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) +
447 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 443 GetEncryptionOverhead() +
444 GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
448 size_t capacity = kDefaultMaxPacketSize - overhead; 445 size_t capacity = kDefaultMaxPacketSize - overhead;
449 // Now, test various sizes around this size. 446 // Now, test various sizes around this size.
450 for (int delta = -5; delta <= 5; ++delta) { 447 for (int delta = -5; delta <= 5; ++delta) {
451 string data(capacity + delta, 'A'); 448 string data(capacity + delta, 'A');
452 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 449 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
453 QuicFrame frame; 450 QuicFrame frame;
454 size_t bytes_consumed = creator_.CreateStreamFrame( 451 size_t bytes_consumed = creator_.CreateStreamFrame(
455 kStreamId, MakeIOVector(data), kOffset, false, &frame); 452 kStreamId, MakeIOVector(data), kOffset, false, &frame);
456 EXPECT_EQ(capacity - bytes_free, bytes_consumed); 453 EXPECT_EQ(capacity - bytes_free, bytes_consumed);
457 454
458 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 455 ASSERT_TRUE(creator_.AddSavedFrame(frame));
459 // BytesFree() returns bytes available for the next frame, which will 456 // BytesFree() returns bytes available for the next frame, which will
460 // be two bytes smaller since the stream frame would need to be grown. 457 // be two bytes smaller since the stream frame would need to be grown.
461 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame()); 458 EXPECT_EQ(2u, creator_.ExpansionOnNewFrame());
462 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2; 459 size_t expected_bytes_free = bytes_free < 3 ? 0 : bytes_free - 2;
463 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; 460 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
464 SerializedPacket serialized_packet = creator_.SerializePacket(); 461 SerializedPacket serialized_packet = creator_.SerializePacket();
465 ASSERT_TRUE(serialized_packet.packet); 462 ASSERT_TRUE(serialized_packet.packet);
466 delete serialized_packet.packet; 463 delete serialized_packet.packet;
467 delete serialized_packet.retransmittable_frames; 464 delete serialized_packet.retransmittable_frames;
468 } 465 }
469 } 466 }
470 467
471 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) { 468 TEST_P(QuicPacketCreatorTest, StreamFrameConsumptionWithFec) {
472 // Turn on FEC protection. 469 // Turn on FEC protection.
473 creator_.options()->max_packets_per_fec_group = 6; 470 creator_.options()->max_packets_per_fec_group = 6;
474 // Compute the total overhead for a single frame in packet. 471 // Compute the total overhead for a single frame in packet.
475 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) 472 const size_t overhead = GetPacketHeaderOverhead(IN_FEC_GROUP) +
476 + GetEncryptionOverhead() + GetStreamFrameOverhead(IN_FEC_GROUP); 473 GetEncryptionOverhead() +
474 GetStreamFrameOverhead(IN_FEC_GROUP);
477 size_t capacity = kDefaultMaxPacketSize - overhead; 475 size_t capacity = kDefaultMaxPacketSize - overhead;
478 // Now, test various sizes around this size. 476 // Now, test various sizes around this size.
479 for (int delta = -5; delta <= 5; ++delta) { 477 for (int delta = -5; delta <= 5; ++delta) {
480 string data(capacity + delta, 'A'); 478 string data(capacity + delta, 'A');
481 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 479 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
482 QuicFrame frame; 480 QuicFrame frame;
483 size_t bytes_consumed = creator_.CreateStreamFrame( 481 size_t bytes_consumed = creator_.CreateStreamFrame(
484 kStreamId, MakeIOVector(data), kOffset, false, &frame); 482 kStreamId, MakeIOVector(data), kOffset, false, &frame);
485 EXPECT_EQ(capacity - bytes_free, bytes_consumed); 483 EXPECT_EQ(capacity - bytes_free, bytes_consumed);
486 484
487 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 485 ASSERT_TRUE(creator_.AddSavedFrame(frame));
488 // BytesFree() returns bytes available for the next frame. Since stream 486 // BytesFree() returns bytes available for the next frame. Since stream
489 // frame does not grow for FEC protected packets, this should be the same 487 // frame does not grow for FEC protected packets, this should be the same
490 // as bytes_free (bound by 0). 488 // as bytes_free (bound by 0).
491 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame()); 489 EXPECT_EQ(0u, creator_.ExpansionOnNewFrame());
492 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0; 490 size_t expected_bytes_free = bytes_free > 0 ? bytes_free : 0;
493 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta; 491 EXPECT_EQ(expected_bytes_free, creator_.BytesFree()) << "delta: " << delta;
494 SerializedPacket serialized_packet = creator_.SerializePacket(); 492 SerializedPacket serialized_packet = creator_.SerializePacket();
495 ASSERT_TRUE(serialized_packet.packet); 493 ASSERT_TRUE(serialized_packet.packet);
496 delete serialized_packet.packet; 494 delete serialized_packet.packet;
497 delete serialized_packet.retransmittable_frames; 495 delete serialized_packet.retransmittable_frames;
498 } 496 }
499 } 497 }
500 498
501 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) { 499 TEST_P(QuicPacketCreatorTest, CryptoStreamFramePacketPadding) {
502 // Compute the total overhead for a single frame in packet. 500 // Compute the total overhead for a single frame in packet.
503 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 501 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) +
504 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 502 GetEncryptionOverhead() +
503 GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
505 ASSERT_GT(kMaxPacketSize, overhead); 504 ASSERT_GT(kMaxPacketSize, overhead);
506 size_t capacity = kDefaultMaxPacketSize - overhead; 505 size_t capacity = kDefaultMaxPacketSize - overhead;
507 // Now, test various sizes around this size. 506 // Now, test various sizes around this size.
508 for (int delta = -5; delta <= 5; ++delta) { 507 for (int delta = -5; delta <= 5; ++delta) {
509 string data(capacity + delta, 'A'); 508 string data(capacity + delta, 'A');
510 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 509 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
511 510
512 QuicFrame frame; 511 QuicFrame frame;
513 size_t bytes_consumed = creator_.CreateStreamFrame( 512 size_t bytes_consumed = creator_.CreateStreamFrame(
514 kStreamId, MakeIOVector(data), kOffset, false, &frame); 513 kStreamId, MakeIOVector(data), kOffset, false, &frame);
515 EXPECT_LT(0u, bytes_consumed); 514 EXPECT_LT(0u, bytes_consumed);
516 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 515 ASSERT_TRUE(creator_.AddSavedFrame(frame));
517 SerializedPacket serialized_packet = creator_.SerializePacket(); 516 SerializedPacket serialized_packet = creator_.SerializePacket();
518 ASSERT_TRUE(serialized_packet.packet); 517 ASSERT_TRUE(serialized_packet.packet);
519 // If there is not enough space in the packet to fit a padding frame 518 // If there is not enough space in the packet to fit a padding frame
520 // (1 byte) and to expand the stream frame (another 2 bytes) the packet 519 // (1 byte) and to expand the stream frame (another 2 bytes) the packet
521 // will not be padded. 520 // will not be padded.
522 if (bytes_free < 3) { 521 if (bytes_free < 3) {
523 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) 522 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) -
524 - bytes_free, serialized_packet.packet->length()); 523 bytes_free,
524 serialized_packet.packet->length());
525 } else { 525 } else {
526 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), 526 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize),
527 serialized_packet.packet->length()); 527 serialized_packet.packet->length());
528 } 528 }
529 delete serialized_packet.packet; 529 delete serialized_packet.packet;
530 delete serialized_packet.retransmittable_frames; 530 delete serialized_packet.retransmittable_frames;
531 } 531 }
532 } 532 }
533 533
534 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) { 534 TEST_P(QuicPacketCreatorTest, NonCryptoStreamFramePacketNonPadding) {
535 // Compute the total overhead for a single frame in packet. 535 // Compute the total overhead for a single frame in packet.
536 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) 536 const size_t overhead = GetPacketHeaderOverhead(NOT_IN_FEC_GROUP) +
537 + GetEncryptionOverhead() + GetStreamFrameOverhead(NOT_IN_FEC_GROUP); 537 GetEncryptionOverhead() +
538 GetStreamFrameOverhead(NOT_IN_FEC_GROUP);
538 ASSERT_GT(kDefaultMaxPacketSize, overhead); 539 ASSERT_GT(kDefaultMaxPacketSize, overhead);
539 size_t capacity = kDefaultMaxPacketSize - overhead; 540 size_t capacity = kDefaultMaxPacketSize - overhead;
540 // Now, test various sizes around this size. 541 // Now, test various sizes around this size.
541 for (int delta = -5; delta <= 5; ++delta) { 542 for (int delta = -5; delta <= 5; ++delta) {
542 string data(capacity + delta, 'A'); 543 string data(capacity + delta, 'A');
543 size_t bytes_free = delta > 0 ? 0 : 0 - delta; 544 size_t bytes_free = delta > 0 ? 0 : 0 - delta;
544 545
545 QuicFrame frame; 546 QuicFrame frame;
546 size_t bytes_consumed = creator_.CreateStreamFrame( 547 size_t bytes_consumed = creator_.CreateStreamFrame(
547 kStreamId + 2, MakeIOVector(data), kOffset, false, &frame); 548 kStreamId + 2, MakeIOVector(data), kOffset, false, &frame);
548 EXPECT_LT(0u, bytes_consumed); 549 EXPECT_LT(0u, bytes_consumed);
549 ASSERT_TRUE(creator_.AddSavedFrame(frame)); 550 ASSERT_TRUE(creator_.AddSavedFrame(frame));
550 SerializedPacket serialized_packet = creator_.SerializePacket(); 551 SerializedPacket serialized_packet = creator_.SerializePacket();
551 ASSERT_TRUE(serialized_packet.packet); 552 ASSERT_TRUE(serialized_packet.packet);
552 if (bytes_free > 0) { 553 if (bytes_free > 0) {
553 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) 554 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize) -
554 - bytes_free, serialized_packet.packet->length()); 555 bytes_free,
556 serialized_packet.packet->length());
555 } else { 557 } else {
556 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize), 558 EXPECT_EQ(client_framer_.GetMaxPlaintextSize(kDefaultMaxPacketSize),
557 serialized_packet.packet->length()); 559 serialized_packet.packet->length());
558 } 560 }
559 delete serialized_packet.packet; 561 delete serialized_packet.packet;
560 delete serialized_packet.retransmittable_frames; 562 delete serialized_packet.retransmittable_frames;
561 } 563 }
562 } 564 }
563 565
564 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { 566 TEST_P(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) {
(...skipping 83 matching lines...) Expand 10 before | Expand all | Expand 10 after
648 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); 650 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
649 delete frames_[0].stream_frame; 651 delete frames_[0].stream_frame;
650 652
651 QuicPacketHeader header; 653 QuicPacketHeader header;
652 { 654 {
653 InSequence s; 655 InSequence s;
654 EXPECT_CALL(framer_visitor_, OnPacket()); 656 EXPECT_CALL(framer_visitor_, OnPacket());
655 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_)); 657 EXPECT_CALL(framer_visitor_, OnUnauthenticatedPublicHeader(_));
656 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_)); 658 EXPECT_CALL(framer_visitor_, OnUnauthenticatedHeader(_));
657 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_)); 659 EXPECT_CALL(framer_visitor_, OnDecryptedPacket(_));
658 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( 660 EXPECT_CALL(framer_visitor_, OnPacketHeader(_))
659 DoAll(SaveArg<0>(&header), Return(true))); 661 .WillOnce(DoAll(SaveArg<0>(&header), Return(true)));
660 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 662 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
661 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 663 EXPECT_CALL(framer_visitor_, OnPacketComplete());
662 } 664 }
663 ProcessPacket(serialized.packet); 665 ProcessPacket(serialized.packet);
664 EXPECT_EQ(GetParam().version_serialization, 666 EXPECT_EQ(GetParam().version_serialization,
665 header.public_header.version_flag); 667 header.public_header.version_flag);
666 delete serialized.packet; 668 delete serialized.packet;
667 } 669 }
668 670
669 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { 671 TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) {
670 if (!GetParam().version_serialization) { 672 if (!GetParam().version_serialization) {
671 creator_.StopSendingVersion(); 673 creator_.StopSendingVersion();
672 } 674 }
673 // A string larger than fits into a frame. 675 // A string larger than fits into a frame.
674 size_t payload_length; 676 size_t payload_length;
675 creator_.options()->max_packet_length = GetPacketLengthForOneStream( 677 creator_.options()->max_packet_length = GetPacketLengthForOneStream(
676 client_framer_.version(), 678 client_framer_.version(),
677 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 679 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
678 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP, &payload_length); 680 PACKET_1BYTE_SEQUENCE_NUMBER,
681 NOT_IN_FEC_GROUP,
682 &payload_length);
679 QuicFrame frame; 683 QuicFrame frame;
680 const string too_long_payload(payload_length * 2, 'a'); 684 const string too_long_payload(payload_length * 2, 'a');
681 size_t consumed = creator_.CreateStreamFrame( 685 size_t consumed = creator_.CreateStreamFrame(
682 1u, MakeIOVector(too_long_payload), 0u, true, &frame); 686 1u, MakeIOVector(too_long_payload), 0u, true, &frame);
683 EXPECT_EQ(payload_length, consumed); 687 EXPECT_EQ(payload_length, consumed);
684 const string payload(payload_length, 'a'); 688 const string payload(payload_length, 'a');
685 CheckStreamFrame(frame, 1u, payload, 0u, false); 689 CheckStreamFrame(frame, 1u, payload, 0u, false);
686 delete frame.stream_frame; 690 delete frame.stream_frame;
687 } 691 }
688 692
689 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { 693 TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) {
690 if (!GetParam().version_serialization) { 694 if (!GetParam().version_serialization) {
691 creator_.StopSendingVersion(); 695 creator_.StopSendingVersion();
692 } 696 }
693 const size_t max_plaintext_size = 697 const size_t max_plaintext_size =
694 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); 698 client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length);
695 EXPECT_FALSE(creator_.HasPendingFrames()); 699 EXPECT_FALSE(creator_.HasPendingFrames());
696 EXPECT_EQ(max_plaintext_size - 700 EXPECT_EQ(max_plaintext_size -
697 GetPacketHeaderSize( 701 GetPacketHeaderSize(
698 creator_.options()->send_connection_id_length, 702 creator_.options()->send_connection_id_length,
699 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 703 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
700 PACKET_1BYTE_SEQUENCE_NUMBER, NOT_IN_FEC_GROUP), 704 PACKET_1BYTE_SEQUENCE_NUMBER,
705 NOT_IN_FEC_GROUP),
701 creator_.BytesFree()); 706 creator_.BytesFree());
702 707
703 // Add a variety of frame types and then a padding frame. 708 // Add a variety of frame types and then a padding frame.
704 QuicAckFrame ack_frame(MakeAckFrame(0u, 0u)); 709 QuicAckFrame ack_frame(MakeAckFrame(0u, 0u));
705 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 710 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
706 EXPECT_TRUE(creator_.HasPendingFrames()); 711 EXPECT_TRUE(creator_.HasPendingFrames());
707 712
708 QuicCongestionFeedbackFrame congestion_feedback; 713 QuicCongestionFeedbackFrame congestion_feedback;
709 congestion_feedback.type = kFixRate; 714 congestion_feedback.type = kFixRate;
710 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback))); 715 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback)));
711 EXPECT_TRUE(creator_.HasPendingFrames()); 716 EXPECT_TRUE(creator_.HasPendingFrames());
712 717
713 QuicFrame frame; 718 QuicFrame frame;
714 size_t consumed = creator_.CreateStreamFrame( 719 size_t consumed =
715 1u, MakeIOVector("test"), 0u, false, &frame); 720 creator_.CreateStreamFrame(1u, MakeIOVector("test"), 0u, false, &frame);
716 EXPECT_EQ(4u, consumed); 721 EXPECT_EQ(4u, consumed);
717 ASSERT_TRUE(frame.stream_frame); 722 ASSERT_TRUE(frame.stream_frame);
718 EXPECT_TRUE(creator_.AddSavedFrame(frame)); 723 EXPECT_TRUE(creator_.AddSavedFrame(frame));
719 EXPECT_TRUE(creator_.HasPendingFrames()); 724 EXPECT_TRUE(creator_.HasPendingFrames());
720 725
721 QuicPaddingFrame padding_frame; 726 QuicPaddingFrame padding_frame;
722 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&padding_frame))); 727 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&padding_frame)));
723 EXPECT_TRUE(creator_.HasPendingFrames()); 728 EXPECT_TRUE(creator_.HasPendingFrames());
724 EXPECT_EQ(0u, creator_.BytesFree()); 729 EXPECT_EQ(0u, creator_.BytesFree());
725 730
726 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame))); 731 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
727 732
728 // Ensure the packet is successfully created. 733 // Ensure the packet is successfully created.
729 SerializedPacket serialized = creator_.SerializePacket(); 734 SerializedPacket serialized = creator_.SerializePacket();
730 ASSERT_TRUE(serialized.packet); 735 ASSERT_TRUE(serialized.packet);
731 delete serialized.packet; 736 delete serialized.packet;
732 ASSERT_TRUE(serialized.retransmittable_frames); 737 ASSERT_TRUE(serialized.retransmittable_frames);
733 RetransmittableFrames* retransmittable = serialized.retransmittable_frames; 738 RetransmittableFrames* retransmittable = serialized.retransmittable_frames;
734 ASSERT_EQ(1u, retransmittable->frames().size()); 739 ASSERT_EQ(1u, retransmittable->frames().size());
735 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type); 740 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type);
736 ASSERT_TRUE(retransmittable->frames()[0].stream_frame); 741 ASSERT_TRUE(retransmittable->frames()[0].stream_frame);
737 delete serialized.retransmittable_frames; 742 delete serialized.retransmittable_frames;
738 743
739 EXPECT_FALSE(creator_.HasPendingFrames()); 744 EXPECT_FALSE(creator_.HasPendingFrames());
740 EXPECT_EQ(max_plaintext_size - 745 EXPECT_EQ(max_plaintext_size -
741 GetPacketHeaderSize( 746 GetPacketHeaderSize(
742 creator_.options()->send_connection_id_length, 747 creator_.options()->send_connection_id_length,
743 QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 748 QuicPacketCreatorPeer::SendVersionInPacket(&creator_),
744 PACKET_1BYTE_SEQUENCE_NUMBER, 749 PACKET_1BYTE_SEQUENCE_NUMBER,
745 NOT_IN_FEC_GROUP), 750 NOT_IN_FEC_GROUP),
746 creator_.BytesFree()); 751 creator_.BytesFree());
747 } 752 }
748 753
749 TEST_P(QuicPacketCreatorTest, EntropyFlag) { 754 TEST_P(QuicPacketCreatorTest, EntropyFlag) {
750 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector()))); 755 frames_.push_back(QuicFrame(new QuicStreamFrame(0u, false, 0u, IOVector())));
751 756
752 for (int i = 0; i < 2; ++i) { 757 for (int i = 0; i < 2; ++i) {
753 for (int j = 0; j < 64; ++j) { 758 for (int j = 0; j < 64; ++j) {
754 SerializedPacket serialized = creator_.SerializeAllFrames(frames_); 759 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
755 // Verify both BoolSource and hash algorithm. 760 // Verify both BoolSource and hash algorithm.
756 bool expected_rand_bool = 761 bool expected_rand_bool =
757 (mock_random_.RandUint64() & (GG_UINT64_C(1) << j)) != 0; 762 (mock_random_.RandUint64() & (GG_UINT64_C(1) << j)) != 0;
758 bool observed_rand_bool = 763 bool observed_rand_bool =
759 (serialized.entropy_hash & (1 << ((j+1) % 8))) != 0; 764 (serialized.entropy_hash & (1 << ((j + 1) % 8))) != 0;
760 uint8 rest_of_hash = serialized.entropy_hash & ~(1 << ((j+1) % 8)); 765 uint8 rest_of_hash = serialized.entropy_hash & ~(1 << ((j + 1) % 8));
761 EXPECT_EQ(expected_rand_bool, observed_rand_bool); 766 EXPECT_EQ(expected_rand_bool, observed_rand_bool);
762 EXPECT_EQ(0, rest_of_hash); 767 EXPECT_EQ(0, rest_of_hash);
763 delete serialized.packet; 768 delete serialized.packet;
764 } 769 }
765 // After 64 calls, BoolSource will refresh the bucket - make sure it does. 770 // After 64 calls, BoolSource will refresh the bucket - make sure it does.
766 mock_random_.ChangeValue(); 771 mock_random_.ChangeValue();
767 } 772 }
768 773
769 delete frames_[0].stream_frame; 774 delete frames_[0].stream_frame;
770 } 775 }
771 776
772 } // namespace 777 } // namespace
773 } // namespace test 778 } // namespace test
774 } // namespace net 779 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698