Index: net/quic/quic_packet_creator_test.cc |
diff --git a/net/quic/quic_packet_creator_test.cc b/net/quic/quic_packet_creator_test.cc |
index 752da9118d1220428f6b99b045a2cfbdaf4d5ef5..423028a5f196c2b9cf8cb7b1dfb6b719bd18b605 100644 |
--- a/net/quic/quic_packet_creator_test.cc |
+++ b/net/quic/quic_packet_creator_test.cc |
@@ -10,39 +10,49 @@ |
#include "net/quic/crypto/quic_encrypter.h" |
#include "net/quic/crypto/quic_random.h" |
#include "net/quic/quic_utils.h" |
+#include "net/quic/test_tools/quic_packet_creator_peer.h" |
#include "net/quic/test_tools/quic_test_utils.h" |
#include "testing/gmock/include/gmock/gmock.h" |
using base::StringPiece; |
using std::string; |
using std::vector; |
+using testing::DoAll; |
using testing::InSequence; |
+using testing::Return; |
+using testing::SaveArg; |
using testing::_; |
namespace net { |
namespace test { |
namespace { |
-class QuicPacketCreatorTest : public ::testing::Test { |
+class QuicPacketCreatorTest : public ::testing::TestWithParam<bool> { |
protected: |
QuicPacketCreatorTest() |
- : framer_(kQuicVersion1, |
- QuicDecrypter::Create(kNULL), |
- QuicEncrypter::Create(kNULL)), |
+ : server_framer_(kQuicVersion1, |
+ QuicDecrypter::Create(kNULL), |
+ QuicEncrypter::Create(kNULL), |
+ true), |
+ client_framer_(kQuicVersion1, |
+ QuicDecrypter::Create(kNULL), |
+ QuicEncrypter::Create(kNULL), |
+ false), |
id_(1), |
sequence_number_(0), |
guid_(2), |
data_("foo"), |
- creator_(guid_, &framer_, QuicRandom::GetInstance()) { |
- framer_.set_visitor(&framer_visitor_); |
+ creator_(guid_, &client_framer_, QuicRandom::GetInstance(), false) { |
+ client_framer_.set_visitor(&framer_visitor_); |
+ server_framer_.set_visitor(&framer_visitor_); |
} |
~QuicPacketCreatorTest() { |
} |
void ProcessPacket(QuicPacket* packet) { |
scoped_ptr<QuicEncryptedPacket> encrypted( |
- framer_.EncryptPacket(sequence_number_, *packet)); |
- framer_.ProcessPacket(*encrypted); |
+ server_framer_.EncryptPacket(sequence_number_, *packet)); |
+ server_framer_.ProcessPacket(*encrypted); |
} |
void CheckStreamFrame(const QuicFrame& frame, QuicStreamId stream_id, |
@@ -56,7 +66,8 @@ class QuicPacketCreatorTest : public ::testing::Test { |
} |
QuicFrames frames_; |
- QuicFramer framer_; |
+ QuicFramer server_framer_; |
+ QuicFramer client_framer_; |
testing::StrictMock<MockFramerVisitor> framer_visitor_; |
QuicStreamId id_; |
QuicPacketSequenceNumber sequence_number_; |
@@ -65,25 +76,8 @@ class QuicPacketCreatorTest : public ::testing::Test { |
QuicPacketCreator creator_; |
}; |
-TEST_F(QuicPacketCreatorTest, SerializeFrame) { |
- frames_.push_back(QuicFrame(new QuicStreamFrame( |
- 0u, false, 0u, StringPiece("")))); |
- SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
- delete frames_[0].stream_frame; |
- |
- { |
- InSequence s; |
- EXPECT_CALL(framer_visitor_, OnPacket()); |
- EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); |
- EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
- EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
- } |
- ProcessPacket(serialized.packet); |
- delete serialized.packet; |
-} |
- |
TEST_F(QuicPacketCreatorTest, SerializeFrames) { |
- frames_.push_back(QuicFrame(new QuicAckFrame(0u, 0u))); |
+ frames_.push_back(QuicFrame(new QuicAckFrame(0u, QuicTime::Zero(), 0u))); |
frames_.push_back(QuicFrame(new QuicStreamFrame( |
0u, false, 0u, StringPiece("")))); |
frames_.push_back(QuicFrame(new QuicStreamFrame( |
@@ -147,7 +141,7 @@ TEST_F(QuicPacketCreatorTest, SerializeWithFEC) { |
TEST_F(QuicPacketCreatorTest, SerializeConnectionClose) { |
QuicConnectionCloseFrame frame; |
frame.error_code = QUIC_NO_ERROR; |
- frame.ack_frame = QuicAckFrame(0u, 0u); |
+ frame.ack_frame = QuicAckFrame(0u, QuicTime::Zero(), 0u); |
SerializedPacket serialized = creator_.SerializeConnectionClose(&frame); |
ASSERT_EQ(1u, serialized.sequence_number); |
@@ -188,11 +182,54 @@ TEST_F(QuicPacketCreatorTest, CreateStreamFrameFinOnly) { |
delete frame.stream_frame; |
} |
-TEST_F(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { |
+TEST_F(QuicPacketCreatorTest, SerializeVersionNegotiationPacket) { |
+ QuicVersionTagList versions; |
+ versions.push_back(kQuicVersion1); |
+ scoped_ptr<QuicEncryptedPacket> encrypted( |
+ creator_.SerializeVersionNegotiationPacket(versions)); |
+ |
+ { |
+ InSequence s; |
+ EXPECT_CALL(framer_visitor_, OnPacket()); |
+ EXPECT_CALL(framer_visitor_, OnVersionNegotiationPacket(_)); |
+ } |
+ client_framer_.ProcessPacket(*encrypted.get()); |
+} |
+ |
+INSTANTIATE_TEST_CASE_P(ToggleVersionSerialization, |
+ QuicPacketCreatorTest, |
+ ::testing::Values(false, true)); |
+ |
+TEST_P(QuicPacketCreatorTest, SerializeFrame) { |
+ if (!GetParam()) { |
+ creator_.StopSendingVersion(); |
+ } |
+ frames_.push_back(QuicFrame(new QuicStreamFrame( |
+ 0u, false, 0u, StringPiece("")))); |
+ SerializedPacket serialized = creator_.SerializeAllFrames(frames_); |
+ delete frames_[0].stream_frame; |
+ |
+ QuicPacketHeader header; |
+ { |
+ InSequence s; |
+ EXPECT_CALL(framer_visitor_, OnPacket()); |
+ EXPECT_CALL(framer_visitor_, OnPacketHeader(_)).WillOnce( |
+ DoAll(SaveArg<0>(&header), Return(true))); |
+ EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); |
+ EXPECT_CALL(framer_visitor_, OnPacketComplete()); |
+ } |
+ ProcessPacket(serialized.packet); |
+ EXPECT_EQ(GetParam(), header.public_header.version_flag); |
+ delete serialized.packet; |
+} |
+ |
+TEST_P(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { |
+ if (!GetParam()) { |
+ creator_.StopSendingVersion(); |
+ } |
// A string larger than fits into a frame. |
- size_t ciphertext_size = NullEncrypter().GetCiphertextSize(1); |
- creator_.options()->max_packet_length = ciphertext_size + |
- QuicPacketCreator::StreamFramePacketOverhead(1, !kIncludeVersion); |
+ creator_.options()->max_packet_length = GetPacketLengthForOneStream( |
+ QuicPacketCreatorPeer::SendVersionInPacket(&creator_), 1); |
QuicFrame frame; |
size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, true, &frame); |
EXPECT_EQ(1u, consumed); |
@@ -200,11 +237,16 @@ TEST_F(QuicPacketCreatorTest, CreateStreamFrameTooLarge) { |
delete frame.stream_frame; |
} |
-TEST_F(QuicPacketCreatorTest, AddFrameAndSerialize) { |
+TEST_P(QuicPacketCreatorTest, AddFrameAndSerialize) { |
+ if (!GetParam()) { |
+ creator_.StopSendingVersion(); |
+ } |
const size_t max_plaintext_size = |
- framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); |
+ client_framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); |
EXPECT_FALSE(creator_.HasPendingFrames()); |
- EXPECT_EQ(max_plaintext_size - GetPacketHeaderSize(!kIncludeVersion), |
+ EXPECT_EQ(max_plaintext_size - |
+ GetPacketHeaderSize( |
+ QuicPacketCreatorPeer::SendVersionInPacket(&creator_)), |
creator_.BytesFree()); |
// Add a variety of frame types and then a padding frame. |
@@ -243,7 +285,9 @@ TEST_F(QuicPacketCreatorTest, AddFrameAndSerialize) { |
delete serialized.retransmittable_frames; |
EXPECT_FALSE(creator_.HasPendingFrames()); |
- EXPECT_EQ(max_plaintext_size - GetPacketHeaderSize(!kIncludeVersion), |
+ EXPECT_EQ(max_plaintext_size - |
+ GetPacketHeaderSize( |
+ QuicPacketCreatorPeer::SendVersionInPacket(&creator_)), |
creator_.BytesFree()); |
} |