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_generator.h" | 5 #include "net/quic/quic_packet_generator.h" |
6 | 6 |
7 #include <string> | 7 #include <string> |
8 | 8 |
9 #include "net/quic/crypto/crypto_protocol.h" | 9 #include "net/quic/crypto/crypto_protocol.h" |
10 #include "net/quic/crypto/null_encrypter.h" | 10 #include "net/quic/crypto/null_encrypter.h" |
(...skipping 28 matching lines...) Expand all Loading... |
39 IsHandshake handshake)); | 39 IsHandshake handshake)); |
40 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); | 40 MOCK_METHOD0(CreateAckFrame, QuicAckFrame*()); |
41 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); | 41 MOCK_METHOD0(CreateFeedbackFrame, QuicCongestionFeedbackFrame*()); |
42 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*()); | 42 MOCK_METHOD0(CreateStopWaitingFrame, QuicStopWaitingFrame*()); |
43 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); | 43 MOCK_METHOD1(OnSerializedPacket, bool(const SerializedPacket& packet)); |
44 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool)); | 44 MOCK_METHOD2(CloseConnection, void(QuicErrorCode, bool)); |
45 | 45 |
46 void SetCanWriteAnything() { | 46 void SetCanWriteAnything() { |
47 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) | 47 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) |
48 .WillRepeatedly(Return(true)); | 48 .WillRepeatedly(Return(true)); |
49 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, | 49 EXPECT_CALL( |
50 NO_RETRANSMITTABLE_DATA, _)) | 50 *this, |
| 51 ShouldGeneratePacket(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA, _)) |
51 .WillRepeatedly(Return(true)); | 52 .WillRepeatedly(Return(true)); |
52 } | 53 } |
53 | 54 |
54 void SetCanNotWrite() { | 55 void SetCanNotWrite() { |
55 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) | 56 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) |
56 .WillRepeatedly(Return(false)); | 57 .WillRepeatedly(Return(false)); |
57 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, | 58 EXPECT_CALL( |
58 NO_RETRANSMITTABLE_DATA, _)) | 59 *this, |
| 60 ShouldGeneratePacket(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA, _)) |
59 .WillRepeatedly(Return(false)); | 61 .WillRepeatedly(Return(false)); |
60 } | 62 } |
61 | 63 |
62 // Use this when only ack and feedback frames should be allowed to be written. | 64 // Use this when only ack and feedback frames should be allowed to be written. |
63 void SetCanWriteOnlyNonRetransmittable() { | 65 void SetCanWriteOnlyNonRetransmittable() { |
64 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) | 66 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, _, _)) |
65 .WillRepeatedly(Return(false)); | 67 .WillRepeatedly(Return(false)); |
66 EXPECT_CALL(*this, ShouldGeneratePacket(NOT_RETRANSMISSION, | 68 EXPECT_CALL( |
67 NO_RETRANSMITTABLE_DATA, _)) | 69 *this, |
| 70 ShouldGeneratePacket(NOT_RETRANSMISSION, NO_RETRANSMITTABLE_DATA, _)) |
68 .WillRepeatedly(Return(true)); | 71 .WillRepeatedly(Return(true)); |
69 } | 72 } |
70 | 73 |
71 private: | 74 private: |
72 DISALLOW_COPY_AND_ASSIGN(MockDelegate); | 75 DISALLOW_COPY_AND_ASSIGN(MockDelegate); |
73 }; | 76 }; |
74 | 77 |
75 // Simple struct for describing the contents of a packet. | 78 // Simple struct for describing the contents of a packet. |
76 // Useful in conjunction with a SimpleQuicFrame for validating | 79 // Useful in conjunction with a SimpleQuicFrame for validating |
77 // that a packet contains the expected frames. | 80 // that a packet contains the expected frames. |
78 struct PacketContents { | 81 struct PacketContents { |
79 PacketContents() | 82 PacketContents() |
80 : num_ack_frames(0), | 83 : num_ack_frames(0), |
81 num_connection_close_frames(0), | 84 num_connection_close_frames(0), |
82 num_feedback_frames(0), | 85 num_feedback_frames(0), |
83 num_goaway_frames(0), | 86 num_goaway_frames(0), |
84 num_rst_stream_frames(0), | 87 num_rst_stream_frames(0), |
85 num_stop_waiting_frames(0), | 88 num_stop_waiting_frames(0), |
86 num_stream_frames(0), | 89 num_stream_frames(0), |
87 fec_group(0) { | 90 fec_group(0) {} |
88 } | |
89 | 91 |
90 size_t num_ack_frames; | 92 size_t num_ack_frames; |
91 size_t num_connection_close_frames; | 93 size_t num_connection_close_frames; |
92 size_t num_feedback_frames; | 94 size_t num_feedback_frames; |
93 size_t num_goaway_frames; | 95 size_t num_goaway_frames; |
94 size_t num_rst_stream_frames; | 96 size_t num_rst_stream_frames; |
95 size_t num_stop_waiting_frames; | 97 size_t num_stop_waiting_frames; |
96 size_t num_stream_frames; | 98 size_t num_stream_frames; |
97 | 99 |
98 QuicFecGroupNumber fec_group; | 100 QuicFecGroupNumber fec_group; |
99 }; | 101 }; |
100 | 102 |
101 } // namespace | 103 } // namespace |
102 | 104 |
103 class QuicPacketGeneratorTest : public ::testing::Test { | 105 class QuicPacketGeneratorTest : public ::testing::Test { |
104 protected: | 106 protected: |
105 QuicPacketGeneratorTest() | 107 QuicPacketGeneratorTest() |
106 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false), | 108 : framer_(QuicSupportedVersions(), QuicTime::Zero(), false), |
107 creator_(42, &framer_, &random_, false), | 109 creator_(42, &framer_, &random_, false), |
108 generator_(&delegate_, NULL, &creator_), | 110 generator_(&delegate_, NULL, &creator_), |
109 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), | 111 packet_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), |
110 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), | 112 packet2_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), |
111 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), | 113 packet3_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), |
112 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), | 114 packet4_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL), |
113 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) { | 115 packet5_(0, PACKET_1BYTE_SEQUENCE_NUMBER, NULL, 0, NULL) {} |
114 } | |
115 | 116 |
116 ~QuicPacketGeneratorTest() { | 117 ~QuicPacketGeneratorTest() { |
117 delete packet_.packet; | 118 delete packet_.packet; |
118 delete packet_.retransmittable_frames; | 119 delete packet_.retransmittable_frames; |
119 delete packet2_.packet; | 120 delete packet2_.packet; |
120 delete packet2_.retransmittable_frames; | 121 delete packet2_.retransmittable_frames; |
121 delete packet3_.packet; | 122 delete packet3_.packet; |
122 delete packet3_.retransmittable_frames; | 123 delete packet3_.retransmittable_frames; |
123 delete packet4_.packet; | 124 delete packet4_.packet; |
124 delete packet4_.retransmittable_frames; | 125 delete packet4_.retransmittable_frames; |
(...skipping 23 matching lines...) Expand all Loading... |
148 QuicRstStreamFrame* CreateRstStreamFrame() { | 149 QuicRstStreamFrame* CreateRstStreamFrame() { |
149 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); | 150 return new QuicRstStreamFrame(1, QUIC_STREAM_NO_ERROR, 0); |
150 } | 151 } |
151 | 152 |
152 QuicGoAwayFrame* CreateGoAwayFrame() { | 153 QuicGoAwayFrame* CreateGoAwayFrame() { |
153 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); | 154 return new QuicGoAwayFrame(QUIC_NO_ERROR, 1, string()); |
154 } | 155 } |
155 | 156 |
156 void CheckPacketContains(const PacketContents& contents, | 157 void CheckPacketContains(const PacketContents& contents, |
157 const SerializedPacket& packet) { | 158 const SerializedPacket& packet) { |
158 size_t num_retransmittable_frames = contents.num_connection_close_frames + | 159 size_t num_retransmittable_frames = |
159 contents.num_goaway_frames + contents.num_rst_stream_frames + | 160 contents.num_connection_close_frames + contents.num_goaway_frames + |
160 contents.num_stream_frames; | 161 contents.num_rst_stream_frames + contents.num_stream_frames; |
161 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames + | 162 size_t num_frames = contents.num_feedback_frames + contents.num_ack_frames + |
162 contents.num_stop_waiting_frames + num_retransmittable_frames; | 163 contents.num_stop_waiting_frames + |
| 164 num_retransmittable_frames; |
163 | 165 |
164 if (num_retransmittable_frames == 0) { | 166 if (num_retransmittable_frames == 0) { |
165 ASSERT_TRUE(packet.retransmittable_frames == NULL); | 167 ASSERT_TRUE(packet.retransmittable_frames == NULL); |
166 } else { | 168 } else { |
167 ASSERT_TRUE(packet.retransmittable_frames != NULL); | 169 ASSERT_TRUE(packet.retransmittable_frames != NULL); |
168 EXPECT_EQ(num_retransmittable_frames, | 170 EXPECT_EQ(num_retransmittable_frames, |
169 packet.retransmittable_frames->frames().size()); | 171 packet.retransmittable_frames->frames().size()); |
170 } | 172 } |
171 | 173 |
172 ASSERT_TRUE(packet.packet != NULL); | 174 ASSERT_TRUE(packet.packet != NULL); |
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
225 SerializedPacket packet3_; | 227 SerializedPacket packet3_; |
226 SerializedPacket packet4_; | 228 SerializedPacket packet4_; |
227 SerializedPacket packet5_; | 229 SerializedPacket packet5_; |
228 | 230 |
229 private: | 231 private: |
230 scoped_ptr<char[]> data_array_; | 232 scoped_ptr<char[]> data_array_; |
231 }; | 233 }; |
232 | 234 |
233 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegateInterface { | 235 class MockDebugDelegate : public QuicPacketGenerator::DebugDelegateInterface { |
234 public: | 236 public: |
235 MOCK_METHOD1(OnFrameAddedToPacket, | 237 MOCK_METHOD1(OnFrameAddedToPacket, void(const QuicFrame&)); |
236 void(const QuicFrame&)); | |
237 }; | 238 }; |
238 | 239 |
239 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { | 240 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { |
240 delegate_.SetCanNotWrite(); | 241 delegate_.SetCanNotWrite(); |
241 | 242 |
242 generator_.SetShouldSendAck(false, false); | 243 generator_.SetShouldSendAck(false, false); |
243 EXPECT_TRUE(generator_.HasQueuedFrames()); | 244 EXPECT_TRUE(generator_.HasQueuedFrames()); |
244 } | 245 } |
245 | 246 |
246 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { | 247 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { |
247 StrictMock<MockDebugDelegate> debug_delegate; | 248 StrictMock<MockDebugDelegate> debug_delegate; |
248 | 249 |
249 generator_.set_debug_delegate(&debug_delegate); | 250 generator_.set_debug_delegate(&debug_delegate); |
250 delegate_.SetCanWriteOnlyNonRetransmittable(); | 251 delegate_.SetCanWriteOnlyNonRetransmittable(); |
251 generator_.StartBatchOperations(); | 252 generator_.StartBatchOperations(); |
252 | 253 |
253 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 254 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
254 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); | 255 EXPECT_CALL(debug_delegate, OnFrameAddedToPacket(_)).Times(1); |
255 | 256 |
256 generator_.SetShouldSendAck(false, false); | 257 generator_.SetShouldSendAck(false, false); |
257 EXPECT_TRUE(generator_.HasQueuedFrames()); | 258 EXPECT_TRUE(generator_.HasQueuedFrames()); |
258 } | 259 } |
259 | 260 |
260 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { | 261 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { |
261 delegate_.SetCanWriteOnlyNonRetransmittable(); | 262 delegate_.SetCanWriteOnlyNonRetransmittable(); |
262 | 263 |
263 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 264 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
264 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 265 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
265 DoAll(SaveArg<0>(&packet_), Return(true))); | 266 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
266 | 267 |
267 generator_.SetShouldSendAck(false, false); | 268 generator_.SetShouldSendAck(false, false); |
268 EXPECT_FALSE(generator_.HasQueuedFrames()); | 269 EXPECT_FALSE(generator_.HasQueuedFrames()); |
269 | 270 |
270 PacketContents contents; | 271 PacketContents contents; |
271 contents.num_ack_frames = 1; | 272 contents.num_ack_frames = 1; |
272 CheckPacketContains(contents, packet_); | 273 CheckPacketContains(contents, packet_); |
273 } | 274 } |
274 | 275 |
275 TEST_F(QuicPacketGeneratorTest, | 276 TEST_F(QuicPacketGeneratorTest, |
276 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { | 277 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { |
277 delegate_.SetCanWriteOnlyNonRetransmittable(); | 278 delegate_.SetCanWriteOnlyNonRetransmittable(); |
278 generator_.StartBatchOperations(); | 279 generator_.StartBatchOperations(); |
279 | 280 |
280 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 281 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
281 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 282 EXPECT_CALL(delegate_, CreateFeedbackFrame()) |
282 Return(CreateFeedbackFrame())); | 283 .WillOnce(Return(CreateFeedbackFrame())); |
283 | 284 |
284 generator_.SetShouldSendAck(true, false); | 285 generator_.SetShouldSendAck(true, false); |
285 EXPECT_TRUE(generator_.HasQueuedFrames()); | 286 EXPECT_TRUE(generator_.HasQueuedFrames()); |
286 } | 287 } |
287 | 288 |
288 TEST_F(QuicPacketGeneratorTest, | 289 TEST_F(QuicPacketGeneratorTest, |
289 ShouldSendAckWithFeedback_WritableAndShouldFlush) { | 290 ShouldSendAckWithFeedback_WritableAndShouldFlush) { |
290 delegate_.SetCanWriteOnlyNonRetransmittable(); | 291 delegate_.SetCanWriteOnlyNonRetransmittable(); |
291 | 292 |
292 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 293 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
293 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 294 EXPECT_CALL(delegate_, CreateFeedbackFrame()) |
294 Return(CreateFeedbackFrame())); | 295 .WillOnce(Return(CreateFeedbackFrame())); |
295 EXPECT_CALL(delegate_, CreateStopWaitingFrame()).WillOnce( | 296 EXPECT_CALL(delegate_, CreateStopWaitingFrame()) |
296 Return(CreateStopWaitingFrame())); | 297 .WillOnce(Return(CreateStopWaitingFrame())); |
297 | 298 |
298 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 299 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
299 DoAll(SaveArg<0>(&packet_), Return(true))); | 300 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
300 | 301 |
301 generator_.SetShouldSendAck(true, true); | 302 generator_.SetShouldSendAck(true, true); |
302 EXPECT_FALSE(generator_.HasQueuedFrames()); | 303 EXPECT_FALSE(generator_.HasQueuedFrames()); |
303 | 304 |
304 PacketContents contents; | 305 PacketContents contents; |
305 contents.num_ack_frames = 1; | 306 contents.num_ack_frames = 1; |
306 contents.num_feedback_frames = 1; | 307 contents.num_feedback_frames = 1; |
307 contents.num_stop_waiting_frames = 1; | 308 contents.num_stop_waiting_frames = 1; |
308 CheckPacketContains(contents, packet_); | 309 CheckPacketContains(contents, packet_); |
309 } | 310 } |
(...skipping 22 matching lines...) Expand all Loading... |
332 | 333 |
333 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) { | 334 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritableBatchThenFlush) { |
334 delegate_.SetCanNotWrite(); | 335 delegate_.SetCanNotWrite(); |
335 generator_.StartBatchOperations(); | 336 generator_.StartBatchOperations(); |
336 | 337 |
337 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 338 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
338 EXPECT_TRUE(generator_.HasQueuedFrames()); | 339 EXPECT_TRUE(generator_.HasQueuedFrames()); |
339 generator_.FinishBatchOperations(); | 340 generator_.FinishBatchOperations(); |
340 EXPECT_TRUE(generator_.HasQueuedFrames()); | 341 EXPECT_TRUE(generator_.HasQueuedFrames()); |
341 | 342 |
342 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 343 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
343 DoAll(SaveArg<0>(&packet_), Return(true))); | 344 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
344 generator_.FlushAllQueuedFrames(); | 345 generator_.FlushAllQueuedFrames(); |
345 EXPECT_FALSE(generator_.HasQueuedFrames()); | 346 EXPECT_FALSE(generator_.HasQueuedFrames()); |
346 | 347 |
347 PacketContents contents; | 348 PacketContents contents; |
348 contents.num_rst_stream_frames = 1; | 349 contents.num_rst_stream_frames = 1; |
349 CheckPacketContains(contents, packet_); | 350 CheckPacketContains(contents, packet_); |
350 } | 351 } |
351 | 352 |
352 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { | 353 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { |
353 delegate_.SetCanWriteAnything(); | 354 delegate_.SetCanWriteAnything(); |
354 | 355 |
355 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 356 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
356 DoAll(SaveArg<0>(&packet_), Return(true))); | 357 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
357 | 358 |
358 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 359 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
359 EXPECT_FALSE(generator_.HasQueuedFrames()); | 360 EXPECT_FALSE(generator_.HasQueuedFrames()); |
360 | 361 |
361 PacketContents contents; | 362 PacketContents contents; |
362 contents.num_rst_stream_frames = 1; | 363 contents.num_rst_stream_frames = 1; |
363 CheckPacketContains(contents, packet_); | 364 CheckPacketContains(contents, packet_); |
364 } | 365 } |
365 | 366 |
366 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { | 367 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { |
367 delegate_.SetCanNotWrite(); | 368 delegate_.SetCanNotWrite(); |
368 | 369 |
369 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, | 370 QuicConsumedData consumed = |
370 true, NULL); | 371 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); |
371 EXPECT_EQ(0u, consumed.bytes_consumed); | 372 EXPECT_EQ(0u, consumed.bytes_consumed); |
372 EXPECT_FALSE(consumed.fin_consumed); | 373 EXPECT_FALSE(consumed.fin_consumed); |
373 EXPECT_FALSE(generator_.HasQueuedFrames()); | 374 EXPECT_FALSE(generator_.HasQueuedFrames()); |
374 } | 375 } |
375 | 376 |
376 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { | 377 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { |
377 delegate_.SetCanWriteAnything(); | 378 delegate_.SetCanWriteAnything(); |
378 generator_.StartBatchOperations(); | 379 generator_.StartBatchOperations(); |
379 | 380 |
380 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, | 381 QuicConsumedData consumed = |
381 true, NULL); | 382 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); |
382 EXPECT_EQ(3u, consumed.bytes_consumed); | 383 EXPECT_EQ(3u, consumed.bytes_consumed); |
383 EXPECT_TRUE(consumed.fin_consumed); | 384 EXPECT_TRUE(consumed.fin_consumed); |
384 EXPECT_TRUE(generator_.HasQueuedFrames()); | 385 EXPECT_TRUE(generator_.HasQueuedFrames()); |
385 } | 386 } |
386 | 387 |
387 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { | 388 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { |
388 delegate_.SetCanWriteAnything(); | 389 delegate_.SetCanWriteAnything(); |
389 | 390 |
390 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 391 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
391 DoAll(SaveArg<0>(&packet_), Return(true))); | 392 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
392 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 2, | 393 QuicConsumedData consumed = |
393 true, NULL); | 394 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); |
394 EXPECT_EQ(3u, consumed.bytes_consumed); | 395 EXPECT_EQ(3u, consumed.bytes_consumed); |
395 EXPECT_TRUE(consumed.fin_consumed); | 396 EXPECT_TRUE(consumed.fin_consumed); |
396 EXPECT_FALSE(generator_.HasQueuedFrames()); | 397 EXPECT_FALSE(generator_.HasQueuedFrames()); |
397 | 398 |
398 PacketContents contents; | 399 PacketContents contents; |
399 contents.num_stream_frames = 1; | 400 contents.num_stream_frames = 1; |
400 CheckPacketContains(contents, packet_); | 401 CheckPacketContains(contents, packet_); |
401 } | 402 } |
402 | 403 |
403 TEST_F(QuicPacketGeneratorTest, | 404 TEST_F(QuicPacketGeneratorTest, |
404 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { | 405 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { |
405 delegate_.SetCanWriteAnything(); | 406 delegate_.SetCanWriteAnything(); |
406 generator_.StartBatchOperations(); | 407 generator_.StartBatchOperations(); |
407 | 408 |
408 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); | 409 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); |
409 QuicConsumedData consumed = generator_.ConsumeData(3, MakeIOVector("quux"), 7, | 410 QuicConsumedData consumed = |
410 false, NULL); | 411 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL); |
411 EXPECT_EQ(4u, consumed.bytes_consumed); | 412 EXPECT_EQ(4u, consumed.bytes_consumed); |
412 EXPECT_FALSE(consumed.fin_consumed); | 413 EXPECT_FALSE(consumed.fin_consumed); |
413 EXPECT_TRUE(generator_.HasQueuedFrames()); | 414 EXPECT_TRUE(generator_.HasQueuedFrames()); |
414 } | 415 } |
415 | 416 |
416 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { | 417 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { |
417 delegate_.SetCanWriteAnything(); | 418 delegate_.SetCanWriteAnything(); |
418 generator_.StartBatchOperations(); | 419 generator_.StartBatchOperations(); |
419 | 420 |
420 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); | 421 generator_.ConsumeData(1, MakeIOVector("foo"), 2, true, NULL); |
421 QuicConsumedData consumed = generator_.ConsumeData(3, MakeIOVector("quux"), 7, | 422 QuicConsumedData consumed = |
422 false, NULL); | 423 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL); |
423 EXPECT_EQ(4u, consumed.bytes_consumed); | 424 EXPECT_EQ(4u, consumed.bytes_consumed); |
424 EXPECT_FALSE(consumed.fin_consumed); | 425 EXPECT_FALSE(consumed.fin_consumed); |
425 EXPECT_TRUE(generator_.HasQueuedFrames()); | 426 EXPECT_TRUE(generator_.HasQueuedFrames()); |
426 | 427 |
427 // Now both frames will be flushed out. | 428 // Now both frames will be flushed out. |
428 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 429 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
429 DoAll(SaveArg<0>(&packet_), Return(true))); | 430 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
430 generator_.FinishBatchOperations(); | 431 generator_.FinishBatchOperations(); |
431 EXPECT_FALSE(generator_.HasQueuedFrames()); | 432 EXPECT_FALSE(generator_.HasQueuedFrames()); |
432 | 433 |
433 PacketContents contents; | 434 PacketContents contents; |
434 contents.num_stream_frames = 2; | 435 contents.num_stream_frames = 2; |
435 CheckPacketContains(contents, packet_); | 436 CheckPacketContains(contents, packet_); |
436 } | 437 } |
437 | 438 |
438 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { | 439 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { |
439 delegate_.SetCanWriteAnything(); | 440 delegate_.SetCanWriteAnything(); |
440 | 441 |
441 // Send FEC every two packets. | 442 // Send FEC every two packets. |
442 creator_.options()->max_packets_per_fec_group = 2; | 443 creator_.options()->max_packets_per_fec_group = 2; |
443 | 444 |
444 { | 445 { |
445 InSequence dummy; | 446 InSequence dummy; |
446 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 447 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
447 DoAll(SaveArg<0>(&packet_), Return(true))); | 448 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
448 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 449 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
449 DoAll(SaveArg<0>(&packet2_), Return(true))); | 450 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true))); |
450 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 451 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
451 DoAll(SaveArg<0>(&packet3_), Return(true))); | 452 .WillOnce(DoAll(SaveArg<0>(&packet3_), Return(true))); |
452 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 453 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
453 DoAll(SaveArg<0>(&packet4_), Return(true))); | 454 .WillOnce(DoAll(SaveArg<0>(&packet4_), Return(true))); |
454 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 455 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
455 DoAll(SaveArg<0>(&packet5_), Return(true))); | 456 .WillOnce(DoAll(SaveArg<0>(&packet5_), Return(true))); |
456 } | 457 } |
457 | 458 |
458 // Send enough data to create 3 packets: two full and one partial. | 459 // Send enough data to create 3 packets: two full and one partial. |
459 size_t data_len = 2 * kDefaultMaxPacketSize + 100; | 460 size_t data_len = 2 * kDefaultMaxPacketSize + 100; |
460 QuicConsumedData consumed = | 461 QuicConsumedData consumed = |
461 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); | 462 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); |
462 EXPECT_EQ(data_len, consumed.bytes_consumed); | 463 EXPECT_EQ(data_len, consumed.bytes_consumed); |
463 EXPECT_TRUE(consumed.fin_consumed); | 464 EXPECT_TRUE(consumed.fin_consumed); |
464 EXPECT_FALSE(generator_.HasQueuedFrames()); | 465 EXPECT_FALSE(generator_.HasQueuedFrames()); |
465 | 466 |
466 CheckPacketHasSingleStreamFrame(packet_); | 467 CheckPacketHasSingleStreamFrame(packet_); |
467 CheckPacketHasSingleStreamFrame(packet2_); | 468 CheckPacketHasSingleStreamFrame(packet2_); |
468 CheckPacketIsFec(packet3_, 1); | 469 CheckPacketIsFec(packet3_, 1); |
469 | 470 |
470 CheckPacketHasSingleStreamFrame(packet4_); | 471 CheckPacketHasSingleStreamFrame(packet4_); |
471 CheckPacketIsFec(packet5_, 4); | 472 CheckPacketIsFec(packet5_, 4); |
472 } | 473 } |
473 | 474 |
474 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { | 475 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { |
475 delegate_.SetCanWriteAnything(); | 476 delegate_.SetCanWriteAnything(); |
476 | 477 |
477 // Send FEC every six packets. | 478 // Send FEC every six packets. |
478 creator_.options()->max_packets_per_fec_group = 6; | 479 creator_.options()->max_packets_per_fec_group = 6; |
479 | 480 |
480 { | 481 { |
481 InSequence dummy; | 482 InSequence dummy; |
482 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 483 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
483 DoAll(SaveArg<0>(&packet_), Return(true))); | 484 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
484 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 485 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
485 DoAll(SaveArg<0>(&packet2_), Return(true))); | 486 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true))); |
486 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 487 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
487 DoAll(SaveArg<0>(&packet3_), Return(true))); | 488 .WillOnce(DoAll(SaveArg<0>(&packet3_), Return(true))); |
488 } | 489 } |
489 | 490 |
490 // Send enough data to create 2 packets: one full and one partial. | 491 // Send enough data to create 2 packets: one full and one partial. |
491 size_t data_len = 1 * kDefaultMaxPacketSize + 100; | 492 size_t data_len = 1 * kDefaultMaxPacketSize + 100; |
492 QuicConsumedData consumed = | 493 QuicConsumedData consumed = |
493 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); | 494 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); |
494 EXPECT_EQ(data_len, consumed.bytes_consumed); | 495 EXPECT_EQ(data_len, consumed.bytes_consumed); |
495 EXPECT_TRUE(consumed.fin_consumed); | 496 EXPECT_TRUE(consumed.fin_consumed); |
496 EXPECT_FALSE(generator_.HasQueuedFrames()); | 497 EXPECT_FALSE(generator_.HasQueuedFrames()); |
497 | 498 |
498 CheckPacketHasSingleStreamFrame(packet_); | 499 CheckPacketHasSingleStreamFrame(packet_); |
499 CheckPacketHasSingleStreamFrame(packet2_); | 500 CheckPacketHasSingleStreamFrame(packet2_); |
500 CheckPacketIsFec(packet3_, 1); | 501 CheckPacketIsFec(packet3_, 1); |
501 } | 502 } |
502 | 503 |
503 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { | 504 TEST_F(QuicPacketGeneratorTest, ConsumeData_FramesPreviouslyQueued) { |
504 // Set the packet size be enough for two stream frames with 0 stream offset, | 505 // Set the packet size be enough for two stream frames with 0 stream offset, |
505 // but not enough for a stream frame of 0 offset and one with non-zero offset. | 506 // but not enough for a stream frame of 0 offset and one with non-zero offset. |
506 creator_.options()->max_packet_length = | 507 creator_.options()->max_packet_length = |
507 NullEncrypter().GetCiphertextSize(0) + | 508 NullEncrypter().GetCiphertextSize(0) + |
508 GetPacketHeaderSize(creator_.options()->send_connection_id_length, | 509 GetPacketHeaderSize(creator_.options()->send_connection_id_length, |
509 true, | 510 true, |
510 creator_.options()->send_sequence_number_length, | 511 creator_.options()->send_sequence_number_length, |
511 NOT_IN_FEC_GROUP) + | 512 NOT_IN_FEC_GROUP) + |
512 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger | 513 // Add an extra 3 bytes for the payload and 1 byte so BytesFree is larger |
513 // than the GetMinStreamFrameSize. | 514 // than the GetMinStreamFrameSize. |
514 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, false, | 515 QuicFramer::GetMinStreamFrameSize( |
515 NOT_IN_FEC_GROUP) + 3 + | 516 framer_.version(), 1, 0, false, NOT_IN_FEC_GROUP) + |
516 QuicFramer::GetMinStreamFrameSize(framer_.version(), 1, 0, true, | 517 3 + QuicFramer::GetMinStreamFrameSize( |
517 NOT_IN_FEC_GROUP) + 1; | 518 framer_.version(), 1, 0, true, NOT_IN_FEC_GROUP) + |
| 519 1; |
518 delegate_.SetCanWriteAnything(); | 520 delegate_.SetCanWriteAnything(); |
519 { | 521 { |
520 InSequence dummy; | 522 InSequence dummy; |
521 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 523 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
522 DoAll(SaveArg<0>(&packet_), Return(true))); | 524 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
523 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 525 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
524 DoAll(SaveArg<0>(&packet2_), Return(true))); | 526 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true))); |
525 } | 527 } |
526 generator_.StartBatchOperations(); | 528 generator_.StartBatchOperations(); |
527 // Queue enough data to prevent a stream frame with a non-zero offset from | 529 // Queue enough data to prevent a stream frame with a non-zero offset from |
528 // fitting. | 530 // fitting. |
529 QuicConsumedData consumed = generator_.ConsumeData(1, MakeIOVector("foo"), 0, | 531 QuicConsumedData consumed = |
530 false, NULL); | 532 generator_.ConsumeData(1, MakeIOVector("foo"), 0, false, NULL); |
531 EXPECT_EQ(3u, consumed.bytes_consumed); | 533 EXPECT_EQ(3u, consumed.bytes_consumed); |
532 EXPECT_FALSE(consumed.fin_consumed); | 534 EXPECT_FALSE(consumed.fin_consumed); |
533 EXPECT_TRUE(generator_.HasQueuedFrames()); | 535 EXPECT_TRUE(generator_.HasQueuedFrames()); |
534 | 536 |
535 // This frame will not fit with the existing frame, causing the queued frame | 537 // This frame will not fit with the existing frame, causing the queued frame |
536 // to be serialized, and it will not fit with another frame like it, so it is | 538 // to be serialized, and it will not fit with another frame like it, so it is |
537 // serialized by itself. | 539 // serialized by itself. |
538 consumed = generator_.ConsumeData(1, MakeIOVector("bar"), 3, true, NULL); | 540 consumed = generator_.ConsumeData(1, MakeIOVector("bar"), 3, true, NULL); |
539 EXPECT_EQ(3u, consumed.bytes_consumed); | 541 EXPECT_EQ(3u, consumed.bytes_consumed); |
540 EXPECT_TRUE(consumed.fin_consumed); | 542 EXPECT_TRUE(consumed.fin_consumed); |
(...skipping 12 matching lines...) Expand all Loading... |
553 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 555 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
554 EXPECT_TRUE(generator_.HasQueuedFrames()); | 556 EXPECT_TRUE(generator_.HasQueuedFrames()); |
555 | 557 |
556 delegate_.SetCanWriteAnything(); | 558 delegate_.SetCanWriteAnything(); |
557 | 559 |
558 generator_.StartBatchOperations(); | 560 generator_.StartBatchOperations(); |
559 | 561 |
560 // When the first write operation is invoked, the ack and feedback | 562 // When the first write operation is invoked, the ack and feedback |
561 // frames will be returned. | 563 // frames will be returned. |
562 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 564 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
563 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 565 EXPECT_CALL(delegate_, CreateFeedbackFrame()) |
564 Return(CreateFeedbackFrame())); | 566 .WillOnce(Return(CreateFeedbackFrame())); |
565 | 567 |
566 // Send some data and a control frame | 568 // Send some data and a control frame |
567 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL); | 569 generator_.ConsumeData(3, MakeIOVector("quux"), 7, false, NULL); |
568 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); | 570 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); |
569 | 571 |
570 // All five frames will be flushed out in a single packet. | 572 // All five frames will be flushed out in a single packet. |
571 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 573 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
572 DoAll(SaveArg<0>(&packet_), Return(true))); | 574 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
573 generator_.FinishBatchOperations(); | 575 generator_.FinishBatchOperations(); |
574 EXPECT_FALSE(generator_.HasQueuedFrames()); | 576 EXPECT_FALSE(generator_.HasQueuedFrames()); |
575 | 577 |
576 PacketContents contents; | 578 PacketContents contents; |
577 contents.num_ack_frames = 1; | 579 contents.num_ack_frames = 1; |
578 contents.num_goaway_frames = 1; | 580 contents.num_goaway_frames = 1; |
579 contents.num_feedback_frames = 1; | 581 contents.num_feedback_frames = 1; |
580 contents.num_rst_stream_frames = 1; | 582 contents.num_rst_stream_frames = 1; |
581 contents.num_stream_frames = 1; | 583 contents.num_stream_frames = 1; |
582 CheckPacketContains(contents, packet_); | 584 CheckPacketContains(contents, packet_); |
583 } | 585 } |
584 | 586 |
585 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { | 587 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { |
586 delegate_.SetCanNotWrite(); | 588 delegate_.SetCanNotWrite(); |
587 | 589 |
588 generator_.SetShouldSendAck(true, false); | 590 generator_.SetShouldSendAck(true, false); |
589 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 591 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
590 EXPECT_TRUE(generator_.HasQueuedFrames()); | 592 EXPECT_TRUE(generator_.HasQueuedFrames()); |
591 | 593 |
592 delegate_.SetCanWriteAnything(); | 594 delegate_.SetCanWriteAnything(); |
593 | 595 |
594 generator_.StartBatchOperations(); | 596 generator_.StartBatchOperations(); |
595 | 597 |
596 // When the first write operation is invoked, the ack and feedback | 598 // When the first write operation is invoked, the ack and feedback |
597 // frames will be returned. | 599 // frames will be returned. |
598 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 600 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
599 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 601 EXPECT_CALL(delegate_, CreateFeedbackFrame()) |
600 Return(CreateFeedbackFrame())); | 602 .WillOnce(Return(CreateFeedbackFrame())); |
601 | 603 |
602 { | 604 { |
603 InSequence dummy; | 605 InSequence dummy; |
604 // All five frames will be flushed out in a single packet | 606 // All five frames will be flushed out in a single packet |
605 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 607 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
606 DoAll(SaveArg<0>(&packet_), Return(true))); | 608 .WillOnce(DoAll(SaveArg<0>(&packet_), Return(true))); |
607 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 609 EXPECT_CALL(delegate_, OnSerializedPacket(_)) |
608 DoAll(SaveArg<0>(&packet2_), Return(true))); | 610 .WillOnce(DoAll(SaveArg<0>(&packet2_), Return(true))); |
609 } | 611 } |
610 | 612 |
611 // Send enough data to exceed one packet | 613 // Send enough data to exceed one packet |
612 size_t data_len = kDefaultMaxPacketSize + 100; | 614 size_t data_len = kDefaultMaxPacketSize + 100; |
613 QuicConsumedData consumed = | 615 QuicConsumedData consumed = |
614 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); | 616 generator_.ConsumeData(3, CreateData(data_len), 0, true, NULL); |
615 EXPECT_EQ(data_len, consumed.bytes_consumed); | 617 EXPECT_EQ(data_len, consumed.bytes_consumed); |
616 EXPECT_TRUE(consumed.fin_consumed); | 618 EXPECT_TRUE(consumed.fin_consumed); |
617 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); | 619 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); |
618 | 620 |
(...skipping 10 matching lines...) Expand all Loading... |
629 | 631 |
630 // The second should have the remainder of the stream data. | 632 // The second should have the remainder of the stream data. |
631 PacketContents contents2; | 633 PacketContents contents2; |
632 contents2.num_goaway_frames = 1; | 634 contents2.num_goaway_frames = 1; |
633 contents2.num_stream_frames = 1; | 635 contents2.num_stream_frames = 1; |
634 CheckPacketContains(contents2, packet2_); | 636 CheckPacketContains(contents2, packet2_); |
635 } | 637 } |
636 | 638 |
637 } // namespace test | 639 } // namespace test |
638 } // namespace net | 640 } // namespace net |
OLD | NEW |