| 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 179 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 190 SerializedPacket packet5_; | 190 SerializedPacket packet5_; |
| 191 | 191 |
| 192 private: | 192 private: |
| 193 scoped_ptr<char[]> data_array_; | 193 scoped_ptr<char[]> data_array_; |
| 194 }; | 194 }; |
| 195 | 195 |
| 196 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { | 196 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_NotWritable) { |
| 197 delegate_.SetCanWrite(false); | 197 delegate_.SetCanWrite(false); |
| 198 | 198 |
| 199 generator_.SetShouldSendAck(false); | 199 generator_.SetShouldSendAck(false); |
| 200 EXPECT_TRUE(generator_.HasQueuedData()); | 200 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 201 } | 201 } |
| 202 | 202 |
| 203 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { | 203 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldNotFlush) { |
| 204 delegate_.SetCanWrite(true); | 204 delegate_.SetCanWrite(true); |
| 205 generator_.StartBatchOperations(); | 205 generator_.StartBatchOperations(); |
| 206 | 206 |
| 207 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 207 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
| 208 | 208 |
| 209 generator_.SetShouldSendAck(false); | 209 generator_.SetShouldSendAck(false); |
| 210 EXPECT_TRUE(generator_.HasQueuedData()); | 210 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 211 } | 211 } |
| 212 | 212 |
| 213 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { | 213 TEST_F(QuicPacketGeneratorTest, ShouldSendAck_WritableAndShouldFlush) { |
| 214 delegate_.SetCanWrite(true); | 214 delegate_.SetCanWrite(true); |
| 215 | 215 |
| 216 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 216 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
| 217 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 217 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 218 DoAll(SaveArg<0>(&packet_), Return(true))); | 218 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 219 | 219 |
| 220 generator_.SetShouldSendAck(false); | 220 generator_.SetShouldSendAck(false); |
| 221 EXPECT_FALSE(generator_.HasQueuedData()); | 221 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 222 | 222 |
| 223 PacketContents contents; | 223 PacketContents contents; |
| 224 contents.num_ack_frames = 1; | 224 contents.num_ack_frames = 1; |
| 225 CheckPacketContains(contents, packet_); | 225 CheckPacketContains(contents, packet_); |
| 226 } | 226 } |
| 227 | 227 |
| 228 TEST_F(QuicPacketGeneratorTest, | 228 TEST_F(QuicPacketGeneratorTest, |
| 229 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { | 229 ShouldSendAckWithFeedback_WritableAndShouldNotFlush) { |
| 230 delegate_.SetCanWrite(true); | 230 delegate_.SetCanWrite(true); |
| 231 generator_.StartBatchOperations(); | 231 generator_.StartBatchOperations(); |
| 232 | 232 |
| 233 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 233 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
| 234 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 234 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( |
| 235 Return(CreateFeedbackFrame())); | 235 Return(CreateFeedbackFrame())); |
| 236 | 236 |
| 237 generator_.SetShouldSendAck(true); | 237 generator_.SetShouldSendAck(true); |
| 238 EXPECT_TRUE(generator_.HasQueuedData()); | 238 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 239 } | 239 } |
| 240 | 240 |
| 241 TEST_F(QuicPacketGeneratorTest, | 241 TEST_F(QuicPacketGeneratorTest, |
| 242 ShouldSendAckWithFeedback_WritableAndShouldFlush) { | 242 ShouldSendAckWithFeedback_WritableAndShouldFlush) { |
| 243 delegate_.SetCanWrite(true); | 243 delegate_.SetCanWrite(true); |
| 244 | 244 |
| 245 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 245 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
| 246 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 246 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( |
| 247 Return(CreateFeedbackFrame())); | 247 Return(CreateFeedbackFrame())); |
| 248 | 248 |
| 249 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 249 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 250 DoAll(SaveArg<0>(&packet_), Return(true))); | 250 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 251 | 251 |
| 252 generator_.SetShouldSendAck(true); | 252 generator_.SetShouldSendAck(true); |
| 253 EXPECT_FALSE(generator_.HasQueuedData()); | 253 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 254 | 254 |
| 255 PacketContents contents; | 255 PacketContents contents; |
| 256 contents.num_ack_frames = 1; | 256 contents.num_ack_frames = 1; |
| 257 contents.num_feedback_frames = 1; | 257 contents.num_feedback_frames = 1; |
| 258 CheckPacketContains(contents, packet_); | 258 CheckPacketContains(contents, packet_); |
| 259 } | 259 } |
| 260 | 260 |
| 261 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) { | 261 TEST_F(QuicPacketGeneratorTest, AddControlFrame_NotWritable) { |
| 262 delegate_.SetCanWrite(false); | 262 delegate_.SetCanWrite(false); |
| 263 | 263 |
| 264 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 264 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
| 265 EXPECT_TRUE(generator_.HasQueuedData()); | 265 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 266 } | 266 } |
| 267 | 267 |
| 268 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) { | 268 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldNotFlush) { |
| 269 delegate_.SetCanWrite(true); | 269 delegate_.SetCanWrite(true); |
| 270 generator_.StartBatchOperations(); | 270 generator_.StartBatchOperations(); |
| 271 | 271 |
| 272 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 272 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
| 273 EXPECT_TRUE(generator_.HasQueuedData()); | 273 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 274 } | 274 } |
| 275 | 275 |
| 276 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { | 276 TEST_F(QuicPacketGeneratorTest, AddControlFrame_WritableAndShouldFlush) { |
| 277 delegate_.SetCanWrite(true); | 277 delegate_.SetCanWrite(true); |
| 278 | 278 |
| 279 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 279 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 280 DoAll(SaveArg<0>(&packet_), Return(true))); | 280 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 281 | 281 |
| 282 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 282 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
| 283 EXPECT_FALSE(generator_.HasQueuedData()); | 283 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 284 | 284 |
| 285 PacketContents contents; | 285 PacketContents contents; |
| 286 contents.num_rst_stream_frames = 1; | 286 contents.num_rst_stream_frames = 1; |
| 287 CheckPacketContains(contents, packet_); | 287 CheckPacketContains(contents, packet_); |
| 288 } | 288 } |
| 289 | 289 |
| 290 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { | 290 TEST_F(QuicPacketGeneratorTest, ConsumeData_NotWritable) { |
| 291 delegate_.SetCanWrite(false); | 291 delegate_.SetCanWrite(false); |
| 292 | 292 |
| 293 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); | 293 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); |
| 294 EXPECT_EQ(0u, consumed.bytes_consumed); | 294 EXPECT_EQ(0u, consumed.bytes_consumed); |
| 295 EXPECT_FALSE(consumed.fin_consumed); | 295 EXPECT_FALSE(consumed.fin_consumed); |
| 296 EXPECT_FALSE(generator_.HasQueuedData()); | 296 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 297 } | 297 } |
| 298 | 298 |
| 299 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { | 299 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldNotFlush) { |
| 300 delegate_.SetCanWrite(true); | 300 delegate_.SetCanWrite(true); |
| 301 generator_.StartBatchOperations(); | 301 generator_.StartBatchOperations(); |
| 302 | 302 |
| 303 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); | 303 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); |
| 304 EXPECT_EQ(3u, consumed.bytes_consumed); | 304 EXPECT_EQ(3u, consumed.bytes_consumed); |
| 305 EXPECT_TRUE(consumed.fin_consumed); | 305 EXPECT_TRUE(consumed.fin_consumed); |
| 306 EXPECT_TRUE(generator_.HasQueuedData()); | 306 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 307 } | 307 } |
| 308 | 308 |
| 309 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { | 309 TEST_F(QuicPacketGeneratorTest, ConsumeData_WritableAndShouldFlush) { |
| 310 delegate_.SetCanWrite(true); | 310 delegate_.SetCanWrite(true); |
| 311 | 311 |
| 312 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 312 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 313 DoAll(SaveArg<0>(&packet_), Return(true))); | 313 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 314 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); | 314 QuicConsumedData consumed = generator_.ConsumeData(1, "foo", 2, true); |
| 315 EXPECT_EQ(3u, consumed.bytes_consumed); | 315 EXPECT_EQ(3u, consumed.bytes_consumed); |
| 316 EXPECT_TRUE(consumed.fin_consumed); | 316 EXPECT_TRUE(consumed.fin_consumed); |
| 317 EXPECT_FALSE(generator_.HasQueuedData()); | 317 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 318 | 318 |
| 319 PacketContents contents; | 319 PacketContents contents; |
| 320 contents.num_stream_frames = 1; | 320 contents.num_stream_frames = 1; |
| 321 CheckPacketContains(contents, packet_); | 321 CheckPacketContains(contents, packet_); |
| 322 } | 322 } |
| 323 | 323 |
| 324 TEST_F(QuicPacketGeneratorTest, | 324 TEST_F(QuicPacketGeneratorTest, |
| 325 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { | 325 ConsumeDataMultipleTimes_WritableAndShouldNotFlush) { |
| 326 delegate_.SetCanWrite(true); | 326 delegate_.SetCanWrite(true); |
| 327 generator_.StartBatchOperations(); | 327 generator_.StartBatchOperations(); |
| 328 | 328 |
| 329 generator_.ConsumeData(1, "foo", 2, true); | 329 generator_.ConsumeData(1, "foo", 2, true); |
| 330 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false); | 330 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false); |
| 331 EXPECT_EQ(4u, consumed.bytes_consumed); | 331 EXPECT_EQ(4u, consumed.bytes_consumed); |
| 332 EXPECT_FALSE(consumed.fin_consumed); | 332 EXPECT_FALSE(consumed.fin_consumed); |
| 333 EXPECT_TRUE(generator_.HasQueuedData()); | 333 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 334 } | 334 } |
| 335 | 335 |
| 336 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { | 336 TEST_F(QuicPacketGeneratorTest, ConsumeData_BatchOperations) { |
| 337 delegate_.SetCanWrite(true); | 337 delegate_.SetCanWrite(true); |
| 338 generator_.StartBatchOperations(); | 338 generator_.StartBatchOperations(); |
| 339 | 339 |
| 340 generator_.ConsumeData(1, "foo", 2, true); | 340 generator_.ConsumeData(1, "foo", 2, true); |
| 341 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false); | 341 QuicConsumedData consumed = generator_.ConsumeData(3, "quux", 7, false); |
| 342 EXPECT_EQ(4u, consumed.bytes_consumed); | 342 EXPECT_EQ(4u, consumed.bytes_consumed); |
| 343 EXPECT_FALSE(consumed.fin_consumed); | 343 EXPECT_FALSE(consumed.fin_consumed); |
| 344 EXPECT_TRUE(generator_.HasQueuedData()); | 344 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 345 | 345 |
| 346 // Now both frames will be flushed out. | 346 // Now both frames will be flushed out. |
| 347 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 347 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 348 DoAll(SaveArg<0>(&packet_), Return(true))); | 348 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 349 generator_.FinishBatchOperations(); | 349 generator_.FinishBatchOperations(); |
| 350 EXPECT_FALSE(generator_.HasQueuedData()); | 350 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 351 | 351 |
| 352 PacketContents contents; | 352 PacketContents contents; |
| 353 contents.num_stream_frames = 2; | 353 contents.num_stream_frames = 2; |
| 354 CheckPacketContains(contents, packet_); | 354 CheckPacketContains(contents, packet_); |
| 355 } | 355 } |
| 356 | 356 |
| 357 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { | 357 TEST_F(QuicPacketGeneratorTest, ConsumeDataFEC) { |
| 358 delegate_.SetCanWrite(true); | 358 delegate_.SetCanWrite(true); |
| 359 | 359 |
| 360 // Send FEC every two packets. | 360 // Send FEC every two packets. |
| (...skipping 12 matching lines...) Expand all Loading... |
| 373 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 373 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 374 DoAll(SaveArg<0>(&packet5_), Return(true))); | 374 DoAll(SaveArg<0>(&packet5_), Return(true))); |
| 375 } | 375 } |
| 376 | 376 |
| 377 // Send enough data to create 3 packets: two full and one partial. | 377 // Send enough data to create 3 packets: two full and one partial. |
| 378 size_t data_len = 2 * kMaxPacketSize + 100; | 378 size_t data_len = 2 * kMaxPacketSize + 100; |
| 379 QuicConsumedData consumed = | 379 QuicConsumedData consumed = |
| 380 generator_.ConsumeData(3, CreateData(data_len), 0, true); | 380 generator_.ConsumeData(3, CreateData(data_len), 0, true); |
| 381 EXPECT_EQ(data_len, consumed.bytes_consumed); | 381 EXPECT_EQ(data_len, consumed.bytes_consumed); |
| 382 EXPECT_TRUE(consumed.fin_consumed); | 382 EXPECT_TRUE(consumed.fin_consumed); |
| 383 EXPECT_FALSE(generator_.HasQueuedData()); | 383 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 384 | 384 |
| 385 CheckPacketHasSingleStreamFrame(packet_); | 385 CheckPacketHasSingleStreamFrame(packet_); |
| 386 CheckPacketHasSingleStreamFrame(packet2_); | 386 CheckPacketHasSingleStreamFrame(packet2_); |
| 387 CheckPacketIsFec(packet3_, 1); | 387 CheckPacketIsFec(packet3_, 1); |
| 388 | 388 |
| 389 CheckPacketHasSingleStreamFrame(packet4_); | 389 CheckPacketHasSingleStreamFrame(packet4_); |
| 390 CheckPacketIsFec(packet5_, 4); | 390 CheckPacketIsFec(packet5_, 4); |
| 391 } | 391 } |
| 392 | 392 |
| 393 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { | 393 TEST_F(QuicPacketGeneratorTest, ConsumeDataSendsFecAtEnd) { |
| (...skipping 11 matching lines...) Expand all Loading... |
| 405 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 405 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 406 DoAll(SaveArg<0>(&packet3_), Return(true))); | 406 DoAll(SaveArg<0>(&packet3_), Return(true))); |
| 407 } | 407 } |
| 408 | 408 |
| 409 // Send enough data to create 2 packets: one full and one partial. | 409 // Send enough data to create 2 packets: one full and one partial. |
| 410 size_t data_len = 1 * kMaxPacketSize + 100; | 410 size_t data_len = 1 * kMaxPacketSize + 100; |
| 411 QuicConsumedData consumed = | 411 QuicConsumedData consumed = |
| 412 generator_.ConsumeData(3, CreateData(data_len), 0, true); | 412 generator_.ConsumeData(3, CreateData(data_len), 0, true); |
| 413 EXPECT_EQ(data_len, consumed.bytes_consumed); | 413 EXPECT_EQ(data_len, consumed.bytes_consumed); |
| 414 EXPECT_TRUE(consumed.fin_consumed); | 414 EXPECT_TRUE(consumed.fin_consumed); |
| 415 EXPECT_FALSE(generator_.HasQueuedData()); | 415 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 416 | 416 |
| 417 CheckPacketHasSingleStreamFrame(packet_); | 417 CheckPacketHasSingleStreamFrame(packet_); |
| 418 CheckPacketHasSingleStreamFrame(packet2_); | 418 CheckPacketHasSingleStreamFrame(packet2_); |
| 419 CheckPacketIsFec(packet3_, 1); | 419 CheckPacketIsFec(packet3_, 1); |
| 420 } | 420 } |
| 421 | 421 |
| 422 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { | 422 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations) { |
| 423 delegate_.SetCanWrite(false); | 423 delegate_.SetCanWrite(false); |
| 424 | 424 |
| 425 generator_.SetShouldSendAck(true); | 425 generator_.SetShouldSendAck(true); |
| 426 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 426 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
| 427 EXPECT_TRUE(generator_.HasQueuedData()); | 427 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 428 | 428 |
| 429 delegate_.SetCanWrite(true); | 429 delegate_.SetCanWrite(true); |
| 430 | 430 |
| 431 generator_.StartBatchOperations(); | 431 generator_.StartBatchOperations(); |
| 432 | 432 |
| 433 // When the first write operation is invoked, the ack and feedback | 433 // When the first write operation is invoked, the ack and feedback |
| 434 // frames will be returned. | 434 // frames will be returned. |
| 435 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 435 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
| 436 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 436 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( |
| 437 Return(CreateFeedbackFrame())); | 437 Return(CreateFeedbackFrame())); |
| 438 | 438 |
| 439 // Send some data and a control frame | 439 // Send some data and a control frame |
| 440 generator_.ConsumeData(3, "quux", 7, false); | 440 generator_.ConsumeData(3, "quux", 7, false); |
| 441 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); | 441 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); |
| 442 | 442 |
| 443 // All five frames will be flushed out in a single packet. | 443 // All five frames will be flushed out in a single packet. |
| 444 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 444 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 445 DoAll(SaveArg<0>(&packet_), Return(true))); | 445 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 446 generator_.FinishBatchOperations(); | 446 generator_.FinishBatchOperations(); |
| 447 EXPECT_FALSE(generator_.HasQueuedData()); | 447 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 448 | 448 |
| 449 PacketContents contents; | 449 PacketContents contents; |
| 450 contents.num_ack_frames = 1; | 450 contents.num_ack_frames = 1; |
| 451 contents.num_goaway_frames = 1; | 451 contents.num_goaway_frames = 1; |
| 452 contents.num_feedback_frames = 1; | 452 contents.num_feedback_frames = 1; |
| 453 contents.num_rst_stream_frames = 1; | 453 contents.num_rst_stream_frames = 1; |
| 454 contents.num_stream_frames = 1; | 454 contents.num_stream_frames = 1; |
| 455 CheckPacketContains(contents, packet_); | 455 CheckPacketContains(contents, packet_); |
| 456 } | 456 } |
| 457 | 457 |
| 458 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { | 458 TEST_F(QuicPacketGeneratorTest, NotWritableThenBatchOperations2) { |
| 459 delegate_.SetCanWrite(false); | 459 delegate_.SetCanWrite(false); |
| 460 | 460 |
| 461 generator_.SetShouldSendAck(true); | 461 generator_.SetShouldSendAck(true); |
| 462 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); | 462 generator_.AddControlFrame(QuicFrame(CreateRstStreamFrame())); |
| 463 EXPECT_TRUE(generator_.HasQueuedData()); | 463 EXPECT_TRUE(generator_.HasQueuedFrames()); |
| 464 | 464 |
| 465 delegate_.SetCanWrite(true); | 465 delegate_.SetCanWrite(true); |
| 466 | 466 |
| 467 generator_.StartBatchOperations(); | 467 generator_.StartBatchOperations(); |
| 468 | 468 |
| 469 // When the first write operation is invoked, the ack and feedback | 469 // When the first write operation is invoked, the ack and feedback |
| 470 // frames will be returned. | 470 // frames will be returned. |
| 471 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); | 471 EXPECT_CALL(delegate_, CreateAckFrame()).WillOnce(Return(CreateAckFrame())); |
| 472 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( | 472 EXPECT_CALL(delegate_, CreateFeedbackFrame()).WillOnce( |
| 473 Return(CreateFeedbackFrame())); | 473 Return(CreateFeedbackFrame())); |
| 474 | 474 |
| 475 { | 475 { |
| 476 InSequence dummy; | 476 InSequence dummy; |
| 477 // All five frames will be flushed out in a single packet | 477 // All five frames will be flushed out in a single packet |
| 478 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 478 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 479 DoAll(SaveArg<0>(&packet_), Return(true))); | 479 DoAll(SaveArg<0>(&packet_), Return(true))); |
| 480 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( | 480 EXPECT_CALL(delegate_, OnSerializedPacket(_)).WillOnce( |
| 481 DoAll(SaveArg<0>(&packet2_), Return(true))); | 481 DoAll(SaveArg<0>(&packet2_), Return(true))); |
| 482 } | 482 } |
| 483 | 483 |
| 484 // Send enough data to exceed one packet | 484 // Send enough data to exceed one packet |
| 485 size_t data_len = kMaxPacketSize + 100; | 485 size_t data_len = kMaxPacketSize + 100; |
| 486 QuicConsumedData consumed = | 486 QuicConsumedData consumed = |
| 487 generator_.ConsumeData(3, CreateData(data_len), 0, true); | 487 generator_.ConsumeData(3, CreateData(data_len), 0, true); |
| 488 EXPECT_EQ(data_len, consumed.bytes_consumed); | 488 EXPECT_EQ(data_len, consumed.bytes_consumed); |
| 489 EXPECT_TRUE(consumed.fin_consumed); | 489 EXPECT_TRUE(consumed.fin_consumed); |
| 490 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); | 490 generator_.AddControlFrame(QuicFrame(CreateGoAwayFrame())); |
| 491 | 491 |
| 492 generator_.FinishBatchOperations(); | 492 generator_.FinishBatchOperations(); |
| 493 EXPECT_FALSE(generator_.HasQueuedData()); | 493 EXPECT_FALSE(generator_.HasQueuedFrames()); |
| 494 | 494 |
| 495 // The first packet should have the queued data and part of the stream data. | 495 // The first packet should have the queued data and part of the stream data. |
| 496 PacketContents contents; | 496 PacketContents contents; |
| 497 contents.num_ack_frames = 1; | 497 contents.num_ack_frames = 1; |
| 498 contents.num_feedback_frames = 1; | 498 contents.num_feedback_frames = 1; |
| 499 contents.num_rst_stream_frames = 1; | 499 contents.num_rst_stream_frames = 1; |
| 500 contents.num_stream_frames = 1; | 500 contents.num_stream_frames = 1; |
| 501 CheckPacketContains(contents, packet_); | 501 CheckPacketContains(contents, packet_); |
| 502 | 502 |
| 503 // The second should have the remainder of the stream data. | 503 // The second should have the remainder of the stream data. |
| 504 PacketContents contents2; | 504 PacketContents contents2; |
| 505 contents2.num_goaway_frames = 1; | 505 contents2.num_goaway_frames = 1; |
| 506 contents2.num_stream_frames = 1; | 506 contents2.num_stream_frames = 1; |
| 507 CheckPacketContains(contents2, packet2_); | 507 CheckPacketContains(contents2, packet2_); |
| 508 } | 508 } |
| 509 | 509 |
| 510 } // namespace test | 510 } // namespace test |
| 511 } // namespace net | 511 } // namespace net |
| OLD | NEW |