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

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

Issue 12334063: Land recent QUIC changes. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: more EXPECT_FALSE Created 7 years, 10 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
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_packet_entropy_manager.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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"
10 #include "net/quic/crypto/quic_encrypter.h"
11 #include "net/quic/crypto/quic_random.h"
9 #include "net/quic/quic_utils.h" 12 #include "net/quic/quic_utils.h"
10 #include "net/quic/test_tools/quic_test_utils.h" 13 #include "net/quic/test_tools/quic_test_utils.h"
11 #include "testing/gmock/include/gmock/gmock.h" 14 #include "testing/gmock/include/gmock/gmock.h"
12 15
13 using base::StringPiece; 16 using base::StringPiece;
14 using std::string; 17 using std::string;
15 using std::vector; 18 using std::vector;
16 using testing::InSequence; 19 using testing::InSequence;
17 using testing::_; 20 using testing::_;
18 21
19 namespace net { 22 namespace net {
20 namespace test { 23 namespace test {
21 namespace { 24 namespace {
22 25
23 class QuicPacketCreatorTest : public ::testing::Test { 26 class QuicPacketCreatorTest : public ::testing::Test {
24 protected: 27 protected:
25 QuicPacketCreatorTest() 28 QuicPacketCreatorTest()
26 : framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)), 29 : framer_(QuicDecrypter::Create(kNULL), QuicEncrypter::Create(kNULL)),
27 id_(1), 30 id_(1),
28 sequence_number_(0), 31 sequence_number_(0),
29 guid_(2), 32 guid_(2),
30 data_("foo"), 33 data_("foo"),
31 creator_(guid_, &framer_) { 34 creator_(guid_, &framer_, QuicRandom::GetInstance()) {
32 framer_.set_visitor(&framer_visitor_); 35 framer_.set_visitor(&framer_visitor_);
33 } 36 }
34 ~QuicPacketCreatorTest() { 37 ~QuicPacketCreatorTest() {
35 for (QuicFrames::iterator it = frames_.begin(); it != frames_.end(); ++it) {
36 QuicConnection::DeleteEnclosedFrame(&(*it));
37 }
38 } 38 }
39 39
40 void ProcessPacket(QuicPacket* packet) { 40 void ProcessPacket(QuicPacket* packet) {
41 scoped_ptr<QuicEncryptedPacket> encrypted(framer_.EncryptPacket(*packet)); 41 scoped_ptr<QuicEncryptedPacket> encrypted(
42 framer_.EncryptPacket(sequence_number_, *packet));
42 framer_.ProcessPacket(*encrypted); 43 framer_.ProcessPacket(*encrypted);
43 } 44 }
44 45
45 void CheckStreamFrame(const QuicFrame& frame, QuicStreamId stream_id, 46 void CheckStreamFrame(const QuicFrame& frame, QuicStreamId stream_id,
46 const string& data, QuicStreamOffset offset, bool fin) { 47 const string& data, QuicStreamOffset offset, bool fin) {
47 EXPECT_EQ(STREAM_FRAME, frame.type); 48 EXPECT_EQ(STREAM_FRAME, frame.type);
48 ASSERT_TRUE(frame.stream_frame); 49 ASSERT_TRUE(frame.stream_frame);
49 EXPECT_EQ(stream_id, frame.stream_frame->stream_id); 50 EXPECT_EQ(stream_id, frame.stream_frame->stream_id);
50 EXPECT_EQ(data, frame.stream_frame->data); 51 EXPECT_EQ(data, frame.stream_frame->data);
51 EXPECT_EQ(offset, frame.stream_frame->offset); 52 EXPECT_EQ(offset, frame.stream_frame->offset);
52 EXPECT_EQ(fin, frame.stream_frame->fin); 53 EXPECT_EQ(fin, frame.stream_frame->fin);
53 } 54 }
54 55
55 QuicFrames frames_; 56 QuicFrames frames_;
56 QuicFramer framer_; 57 QuicFramer framer_;
57 testing::StrictMock<MockFramerVisitor> framer_visitor_; 58 testing::StrictMock<MockFramerVisitor> framer_visitor_;
58 QuicStreamId id_; 59 QuicStreamId id_;
59 QuicPacketSequenceNumber sequence_number_; 60 QuicPacketSequenceNumber sequence_number_;
60 QuicGuid guid_; 61 QuicGuid guid_;
61 string data_; 62 string data_;
62 QuicPacketCreator creator_; 63 QuicPacketCreator creator_;
63 }; 64 };
64 65
65 TEST_F(QuicPacketCreatorTest, SerializeFrame) { 66 TEST_F(QuicPacketCreatorTest, SerializeFrame) {
66 frames_.push_back(QuicFrame(new QuicStreamFrame( 67 frames_.push_back(QuicFrame(new QuicStreamFrame(
67 0u, false, 0u, StringPiece("")))); 68 0u, false, 0u, StringPiece(""))));
68 PacketPair pair = creator_.SerializeAllFrames(frames_); 69 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
70 delete frames_[0].stream_frame;
69 71
70 { 72 {
71 InSequence s; 73 InSequence s;
72 EXPECT_CALL(framer_visitor_, OnPacket()); 74 EXPECT_CALL(framer_visitor_, OnPacket());
73 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 75 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
74 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 76 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
75 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 77 EXPECT_CALL(framer_visitor_, OnPacketComplete());
76 } 78 }
77 ProcessPacket(pair.second); 79 ProcessPacket(serialized.packet);
78 delete pair.second; 80 delete serialized.packet;
79 } 81 }
80 82
81 TEST_F(QuicPacketCreatorTest, SerializeFrames) { 83 TEST_F(QuicPacketCreatorTest, SerializeFrames) {
82 frames_.push_back(QuicFrame(new QuicAckFrame(0u, 0u))); 84 frames_.push_back(QuicFrame(new QuicAckFrame(0u, 0u)));
83 frames_.push_back(QuicFrame(new QuicStreamFrame( 85 frames_.push_back(QuicFrame(new QuicStreamFrame(
84 0u, false, 0u, StringPiece("")))); 86 0u, false, 0u, StringPiece(""))));
85 frames_.push_back(QuicFrame(new QuicStreamFrame( 87 frames_.push_back(QuicFrame(new QuicStreamFrame(
86 0u, true, 0u, StringPiece("")))); 88 0u, true, 0u, StringPiece(""))));
87 PacketPair pair = creator_.SerializeAllFrames(frames_); 89 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
90 delete frames_[0].ack_frame;
91 delete frames_[1].stream_frame;
92 delete frames_[2].stream_frame;
88 93
89 { 94 {
90 InSequence s; 95 InSequence s;
91 EXPECT_CALL(framer_visitor_, OnPacket()); 96 EXPECT_CALL(framer_visitor_, OnPacket());
92 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 97 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
93 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 98 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
94 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 99 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
95 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 100 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
96 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 101 EXPECT_CALL(framer_visitor_, OnPacketComplete());
97 } 102 }
98 ProcessPacket(pair.second); 103 ProcessPacket(serialized.packet);
99 delete pair.second; 104 delete serialized.packet;
100 } 105 }
101 106
102 TEST_F(QuicPacketCreatorTest, SerializeWithFEC) { 107 TEST_F(QuicPacketCreatorTest, SerializeWithFEC) {
103 creator_.options()->max_packets_per_fec_group = 6; 108 creator_.options()->max_packets_per_fec_group = 6;
104 ASSERT_FALSE(creator_.ShouldSendFec(false)); 109 ASSERT_FALSE(creator_.ShouldSendFec(false));
105 creator_.MaybeStartFEC(); 110 creator_.MaybeStartFEC();
106 111
107 frames_.push_back(QuicFrame(new QuicStreamFrame( 112 frames_.push_back(QuicFrame(new QuicStreamFrame(
108 0u, false, 0u, StringPiece("")))); 113 0u, false, 0u, StringPiece(""))));
109 PacketPair pair = creator_.SerializeAllFrames(frames_); 114 SerializedPacket serialized = creator_.SerializeAllFrames(frames_);
115 delete frames_[0].stream_frame;
110 116
111 { 117 {
112 InSequence s; 118 InSequence s;
113 EXPECT_CALL(framer_visitor_, OnPacket()); 119 EXPECT_CALL(framer_visitor_, OnPacket());
114 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 120 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
115 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_)); 121 EXPECT_CALL(framer_visitor_, OnFecProtectedPayload(_));
116 EXPECT_CALL(framer_visitor_, OnStreamFrame(_)); 122 EXPECT_CALL(framer_visitor_, OnStreamFrame(_));
117 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 123 EXPECT_CALL(framer_visitor_, OnPacketComplete());
118 } 124 }
119 ProcessPacket(pair.second); 125 ProcessPacket(serialized.packet);
120 delete pair.second; 126 delete serialized.packet;
121 127
122 ASSERT_FALSE(creator_.ShouldSendFec(false)); 128 ASSERT_FALSE(creator_.ShouldSendFec(false));
123 ASSERT_TRUE(creator_.ShouldSendFec(true)); 129 ASSERT_TRUE(creator_.ShouldSendFec(true));
124 130
125 pair = creator_.SerializeFec(); 131 serialized = creator_.SerializeFec();
126 ASSERT_EQ(2u, pair.first); 132 ASSERT_EQ(2u, serialized.sequence_number);
127 133
128 { 134 {
129 InSequence s; 135 InSequence s;
130 EXPECT_CALL(framer_visitor_, OnPacket()); 136 EXPECT_CALL(framer_visitor_, OnPacket());
131 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 137 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
132 EXPECT_CALL(framer_visitor_, OnFecData(_)); 138 EXPECT_CALL(framer_visitor_, OnFecData(_));
133 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 139 EXPECT_CALL(framer_visitor_, OnPacketComplete());
134 } 140 }
135 ProcessPacket(pair.second); 141 ProcessPacket(serialized.packet);
136 delete pair.second; 142 delete serialized.packet;
137 } 143 }
138 144
139 TEST_F(QuicPacketCreatorTest, CloseConnection) { 145 TEST_F(QuicPacketCreatorTest, SerializeConnectionClose) {
140 QuicConnectionCloseFrame frame; 146 QuicConnectionCloseFrame frame;
141 frame.error_code = QUIC_NO_ERROR; 147 frame.error_code = QUIC_NO_ERROR;
142 frame.ack_frame = QuicAckFrame(0u, 0u); 148 frame.ack_frame = QuicAckFrame(0u, 0u);
143 149
144 PacketPair pair = creator_.CloseConnection(&frame); 150 SerializedPacket serialized = creator_.SerializeConnectionClose(&frame);
145 ASSERT_EQ(1u, pair.first); 151 ASSERT_EQ(1u, serialized.sequence_number);
146 ASSERT_EQ(1u, creator_.sequence_number()); 152 ASSERT_EQ(1u, creator_.sequence_number());
147 153
148 InSequence s; 154 InSequence s;
149 EXPECT_CALL(framer_visitor_, OnPacket()); 155 EXPECT_CALL(framer_visitor_, OnPacket());
150 EXPECT_CALL(framer_visitor_, OnPacketHeader(_)); 156 EXPECT_CALL(framer_visitor_, OnPacketHeader(_));
151 EXPECT_CALL(framer_visitor_, OnAckFrame(_)); 157 EXPECT_CALL(framer_visitor_, OnAckFrame(_));
152 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_)); 158 EXPECT_CALL(framer_visitor_, OnConnectionCloseFrame(_));
153 EXPECT_CALL(framer_visitor_, OnPacketComplete()); 159 EXPECT_CALL(framer_visitor_, OnPacketComplete());
154 160
155 ProcessPacket(pair.second); 161 ProcessPacket(serialized.packet);
156 delete pair.second; 162 delete serialized.packet;
157 } 163 }
158 164
159 TEST_F(QuicPacketCreatorTest, CreateStreamFrame) { 165 TEST_F(QuicPacketCreatorTest, CreateStreamFrame) {
160 QuicFrame frame; 166 QuicFrame frame;
161 size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, false, &frame); 167 size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, false, &frame);
162 EXPECT_EQ(4u, consumed); 168 EXPECT_EQ(4u, consumed);
163 CheckStreamFrame(frame, 1u, "test", 0u, false); 169 CheckStreamFrame(frame, 1u, "test", 0u, false);
164 delete frame.stream_frame; 170 delete frame.stream_frame;
165 } 171 }
166 172
(...skipping 26 matching lines...) Expand all
193 } 199 }
194 200
195 TEST_F(QuicPacketCreatorTest, AddFrameAndSerialize) { 201 TEST_F(QuicPacketCreatorTest, AddFrameAndSerialize) {
196 const size_t max_plaintext_size = 202 const size_t max_plaintext_size =
197 framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length); 203 framer_.GetMaxPlaintextSize(creator_.options()->max_packet_length);
198 EXPECT_FALSE(creator_.HasPendingFrames()); 204 EXPECT_FALSE(creator_.HasPendingFrames());
199 EXPECT_EQ(max_plaintext_size - kPacketHeaderSize, creator_.BytesFree()); 205 EXPECT_EQ(max_plaintext_size - kPacketHeaderSize, creator_.BytesFree());
200 206
201 // Add a variety of frame types and then a padding frame. 207 // Add a variety of frame types and then a padding frame.
202 QuicAckFrame ack_frame; 208 QuicAckFrame ack_frame;
203 EXPECT_TRUE(creator_.AddFrame(QuicFrame(&ack_frame))); 209 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
204 EXPECT_TRUE(creator_.HasPendingFrames()); 210 EXPECT_TRUE(creator_.HasPendingFrames());
205 211
206 QuicCongestionFeedbackFrame congestion_feedback; 212 QuicCongestionFeedbackFrame congestion_feedback;
207 congestion_feedback.type = kFixRate; 213 congestion_feedback.type = kFixRate;
208 EXPECT_TRUE(creator_.AddFrame(QuicFrame(&congestion_feedback))); 214 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&congestion_feedback)));
209 EXPECT_TRUE(creator_.HasPendingFrames()); 215 EXPECT_TRUE(creator_.HasPendingFrames());
210 216
211 QuicFrame frame; 217 QuicFrame frame;
212 size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, false, &frame); 218 size_t consumed = creator_.CreateStreamFrame(1u, "test", 0u, false, &frame);
213 EXPECT_EQ(4u, consumed); 219 EXPECT_EQ(4u, consumed);
214 ASSERT_TRUE(frame.stream_frame); 220 ASSERT_TRUE(frame.stream_frame);
215 EXPECT_TRUE(creator_.AddFrame(frame)); 221 EXPECT_TRUE(creator_.AddSavedFrame(frame));
216 EXPECT_TRUE(creator_.HasPendingFrames()); 222 EXPECT_TRUE(creator_.HasPendingFrames());
217 223
218 QuicPaddingFrame padding_frame; 224 QuicPaddingFrame padding_frame;
219 EXPECT_TRUE(creator_.AddFrame(QuicFrame(&padding_frame))); 225 EXPECT_TRUE(creator_.AddSavedFrame(QuicFrame(&padding_frame)));
220 EXPECT_TRUE(creator_.HasPendingFrames()); 226 EXPECT_TRUE(creator_.HasPendingFrames());
221 EXPECT_EQ(0u, creator_.BytesFree()); 227 EXPECT_EQ(0u, creator_.BytesFree());
222 228
223 EXPECT_FALSE(creator_.AddFrame(QuicFrame(&ack_frame))); 229 EXPECT_FALSE(creator_.AddSavedFrame(QuicFrame(&ack_frame)));
224 230
225 // Ensure the packet is successfully created. 231 // Ensure the packet is successfully created.
226 QuicFrames retransmittable_frames; 232 SerializedPacket serialized = creator_.SerializePacket();
227 PacketPair pair = creator_.SerializePacket(&retransmittable_frames); 233 ASSERT_TRUE(serialized.packet);
228 ASSERT_TRUE(pair.second); 234 delete serialized.packet;
229 delete pair.second; 235 ASSERT_TRUE(serialized.retransmittable_frames);
230 ASSERT_EQ(1u, retransmittable_frames.size()); 236 RetransmittableFrames* retransmittable = serialized.retransmittable_frames;
231 EXPECT_EQ(STREAM_FRAME, retransmittable_frames[0].type); 237 ASSERT_EQ(1u, retransmittable->frames().size());
238 EXPECT_EQ(STREAM_FRAME, retransmittable->frames()[0].type);
239 ASSERT_TRUE(retransmittable->frames()[0].stream_frame);
240 delete serialized.retransmittable_frames;
232 241
233 EXPECT_FALSE(creator_.HasPendingFrames()); 242 EXPECT_FALSE(creator_.HasPendingFrames());
234 EXPECT_EQ(max_plaintext_size - kPacketHeaderSize, creator_.BytesFree()); 243 EXPECT_EQ(max_plaintext_size - kPacketHeaderSize, creator_.BytesFree());
235
236 delete frame.stream_frame;
237 } 244 }
238 245
239 } // namespace 246 } // namespace
240 } // namespace test 247 } // namespace test
241 } // namespace net 248 } // namespace net
OLDNEW
« no previous file with comments | « net/quic/quic_packet_creator.cc ('k') | net/quic/quic_packet_entropy_manager.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698