OLD | NEW |
1 // Copyright 2013 The Chromium Authors. All rights reserved. | 1 // Copyright 2013 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/websockets/websocket_deflate_stream.h" | 5 #include "net/websockets/websocket_deflate_stream.h" |
6 | 6 |
7 #include <stddef.h> | 7 #include <stddef.h> |
8 #include <stdint.h> | 8 #include <stdint.h> |
9 | 9 |
10 #include <deque> | 10 #include <deque> |
11 #include <iterator> | 11 #include <iterator> |
12 #include <memory> | 12 #include <memory> |
13 #include <string> | 13 #include <string> |
14 #include <utility> | 14 #include <utility> |
15 #include <vector> | 15 #include <vector> |
16 | 16 |
17 #include "base/bind.h" | 17 #include "base/bind.h" |
18 #include "base/macros.h" | 18 #include "base/macros.h" |
19 #include "base/memory/ptr_util.h" | 19 #include "base/memory/ptr_util.h" |
20 #include "base/memory/ref_counted.h" | 20 #include "base/memory/ref_counted.h" |
21 #include "net/base/completion_callback.h" | 21 #include "net/base/completion_callback.h" |
22 #include "net/base/io_buffer.h" | 22 #include "net/base/io_buffer.h" |
23 #include "net/base/net_errors.h" | 23 #include "net/base/net_errors.h" |
| 24 #include "net/test/gtest_util.h" |
24 #include "net/websockets/websocket_deflate_parameters.h" | 25 #include "net/websockets/websocket_deflate_parameters.h" |
25 #include "net/websockets/websocket_deflate_predictor.h" | 26 #include "net/websockets/websocket_deflate_predictor.h" |
26 #include "net/websockets/websocket_deflater.h" | 27 #include "net/websockets/websocket_deflater.h" |
27 #include "net/websockets/websocket_frame.h" | 28 #include "net/websockets/websocket_frame.h" |
28 #include "net/websockets/websocket_inflater.h" | 29 #include "net/websockets/websocket_inflater.h" |
29 #include "net/websockets/websocket_stream.h" | 30 #include "net/websockets/websocket_stream.h" |
30 #include "net/websockets/websocket_test_util.h" | 31 #include "net/websockets/websocket_test_util.h" |
31 #include "testing/gmock/include/gmock/gmock.h" | 32 #include "testing/gmock/include/gmock/gmock.h" |
32 #include "testing/gtest/include/gtest/gtest.h" | 33 #include "testing/gtest/include/gtest/gtest.h" |
33 | 34 |
| 35 using net::test::IsError; |
| 36 using net::test::IsOk; |
| 37 |
34 namespace net { | 38 namespace net { |
35 namespace { | 39 namespace { |
36 | 40 |
37 typedef ::testing::MockFunction<void(int)> MockCallback; // NOLINT | 41 typedef ::testing::MockFunction<void(int)> MockCallback; // NOLINT |
38 using ::testing::_; | 42 using ::testing::_; |
39 using ::testing::InSequence; | 43 using ::testing::InSequence; |
40 using ::testing::Invoke; | 44 using ::testing::Invoke; |
41 using ::testing::Return; | 45 using ::testing::Return; |
42 | 46 |
43 typedef uint32_t FrameFlag; | 47 typedef uint32_t FrameFlag; |
(...skipping 318 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
362 }; | 366 }; |
363 | 367 |
364 TEST_F(WebSocketDeflateStreamTest, ReadFailedImmediately) { | 368 TEST_F(WebSocketDeflateStreamTest, ReadFailedImmediately) { |
365 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 369 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
366 CompletionCallback callback; | 370 CompletionCallback callback; |
367 { | 371 { |
368 InSequence s; | 372 InSequence s; |
369 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 373 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
370 .WillOnce(Return(ERR_FAILED)); | 374 .WillOnce(Return(ERR_FAILED)); |
371 } | 375 } |
372 EXPECT_EQ(ERR_FAILED, deflate_stream_->ReadFrames(&frames, callback)); | 376 EXPECT_THAT(deflate_stream_->ReadFrames(&frames, callback), |
| 377 IsError(ERR_FAILED)); |
373 } | 378 } |
374 | 379 |
375 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedFrameImmediately) { | 380 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedFrameImmediately) { |
376 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; | 381 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; |
377 AppendTo(&frames_to_output, | 382 AppendTo(&frames_to_output, |
378 WebSocketFrameHeader::kOpCodeText, | 383 WebSocketFrameHeader::kOpCodeText, |
379 kFinal, | 384 kFinal, |
380 "hello"); | 385 "hello"); |
381 ReadFramesStub stub(OK, &frames_to_output); | 386 ReadFramesStub stub(OK, &frames_to_output); |
382 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 387 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
383 | 388 |
384 { | 389 { |
385 InSequence s; | 390 InSequence s; |
386 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 391 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
387 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 392 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
388 } | 393 } |
389 CompletionCallback callback; | 394 CompletionCallback callback; |
390 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 395 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
391 ASSERT_EQ(1u, frames.size()); | 396 ASSERT_EQ(1u, frames.size()); |
392 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 397 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
393 EXPECT_TRUE(frames[0]->header.final); | 398 EXPECT_TRUE(frames[0]->header.final); |
394 EXPECT_FALSE(frames[0]->header.reserved1); | 399 EXPECT_FALSE(frames[0]->header.reserved1); |
395 EXPECT_EQ("hello", ToString(frames[0])); | 400 EXPECT_EQ("hello", ToString(frames[0])); |
396 } | 401 } |
397 | 402 |
398 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedFrameAsync) { | 403 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedFrameAsync) { |
399 ReadFramesStub stub(ERR_IO_PENDING); | 404 ReadFramesStub stub(ERR_IO_PENDING); |
400 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 405 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
401 MockCallback mock_callback, checkpoint; | 406 MockCallback mock_callback, checkpoint; |
402 CompletionCallback callback = | 407 CompletionCallback callback = |
403 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); | 408 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); |
404 | 409 |
405 { | 410 { |
406 InSequence s; | 411 InSequence s; |
407 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 412 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
408 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 413 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
409 EXPECT_CALL(checkpoint, Call(0)); | 414 EXPECT_CALL(checkpoint, Call(0)); |
410 EXPECT_CALL(mock_callback, Call(OK)); | 415 EXPECT_CALL(mock_callback, Call(OK)); |
411 } | 416 } |
412 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 417 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), |
| 418 IsError(ERR_IO_PENDING)); |
413 ASSERT_EQ(0u, frames.size()); | 419 ASSERT_EQ(0u, frames.size()); |
414 | 420 |
415 checkpoint.Call(0); | 421 checkpoint.Call(0); |
416 | 422 |
417 AppendTo(stub.frames_passed(), | 423 AppendTo(stub.frames_passed(), |
418 WebSocketFrameHeader::kOpCodeText, | 424 WebSocketFrameHeader::kOpCodeText, |
419 kFinal, | 425 kFinal, |
420 "hello"); | 426 "hello"); |
421 stub.callback().Run(OK); | 427 stub.callback().Run(OK); |
422 ASSERT_EQ(1u, frames.size()); | 428 ASSERT_EQ(1u, frames.size()); |
(...skipping 10 matching lines...) Expand all Loading... |
433 CompletionCallback callback = | 439 CompletionCallback callback = |
434 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); | 440 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); |
435 | 441 |
436 { | 442 { |
437 InSequence s; | 443 InSequence s; |
438 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 444 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
439 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 445 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
440 EXPECT_CALL(checkpoint, Call(0)); | 446 EXPECT_CALL(checkpoint, Call(0)); |
441 EXPECT_CALL(mock_callback, Call(ERR_FAILED)); | 447 EXPECT_CALL(mock_callback, Call(ERR_FAILED)); |
442 } | 448 } |
443 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 449 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), |
| 450 IsError(ERR_IO_PENDING)); |
444 ASSERT_EQ(0u, frames.size()); | 451 ASSERT_EQ(0u, frames.size()); |
445 | 452 |
446 checkpoint.Call(0); | 453 checkpoint.Call(0); |
447 | 454 |
448 AppendTo(stub.frames_passed(), | 455 AppendTo(stub.frames_passed(), |
449 WebSocketFrameHeader::kOpCodeText, | 456 WebSocketFrameHeader::kOpCodeText, |
450 kFinal, | 457 kFinal, |
451 "hello"); | 458 "hello"); |
452 stub.callback().Run(ERR_FAILED); | 459 stub.callback().Run(ERR_FAILED); |
453 ASSERT_EQ(0u, frames.size()); | 460 ASSERT_EQ(0u, frames.size()); |
454 } | 461 } |
455 | 462 |
456 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameImmediately) { | 463 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameImmediately) { |
457 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; | 464 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; |
458 AppendTo(&frames_to_output, | 465 AppendTo(&frames_to_output, |
459 WebSocketFrameHeader::kOpCodeText, | 466 WebSocketFrameHeader::kOpCodeText, |
460 kFinal | kReserved1, | 467 kFinal | kReserved1, |
461 std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 468 std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
462 ReadFramesStub stub(OK, &frames_to_output); | 469 ReadFramesStub stub(OK, &frames_to_output); |
463 CompletionCallback callback; | 470 CompletionCallback callback; |
464 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 471 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
465 { | 472 { |
466 InSequence s; | 473 InSequence s; |
467 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 474 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
468 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 475 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
469 } | 476 } |
470 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 477 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
471 ASSERT_EQ(1u, frames.size()); | 478 ASSERT_EQ(1u, frames.size()); |
472 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 479 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
473 EXPECT_TRUE(frames[0]->header.final); | 480 EXPECT_TRUE(frames[0]->header.final); |
474 EXPECT_FALSE(frames[0]->header.reserved1); | 481 EXPECT_FALSE(frames[0]->header.reserved1); |
475 EXPECT_EQ("Hello", ToString(frames[0])); | 482 EXPECT_EQ("Hello", ToString(frames[0])); |
476 } | 483 } |
477 | 484 |
478 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameAsync) { | 485 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameAsync) { |
479 ReadFramesStub stub(ERR_IO_PENDING); | 486 ReadFramesStub stub(ERR_IO_PENDING); |
480 MockCallback mock_callback, checkpoint; | 487 MockCallback mock_callback, checkpoint; |
481 CompletionCallback callback = | 488 CompletionCallback callback = |
482 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); | 489 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); |
483 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 490 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
484 { | 491 { |
485 InSequence s; | 492 InSequence s; |
486 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 493 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
487 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 494 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
488 EXPECT_CALL(checkpoint, Call(0)); | 495 EXPECT_CALL(checkpoint, Call(0)); |
489 EXPECT_CALL(mock_callback, Call(OK)); | 496 EXPECT_CALL(mock_callback, Call(OK)); |
490 } | 497 } |
491 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 498 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), |
| 499 IsError(ERR_IO_PENDING)); |
492 | 500 |
493 checkpoint.Call(0); | 501 checkpoint.Call(0); |
494 | 502 |
495 AppendTo(stub.frames_passed(), | 503 AppendTo(stub.frames_passed(), |
496 WebSocketFrameHeader::kOpCodeText, | 504 WebSocketFrameHeader::kOpCodeText, |
497 kFinal | kReserved1, | 505 kFinal | kReserved1, |
498 std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 506 std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
499 stub.callback().Run(OK); | 507 stub.callback().Run(OK); |
500 | 508 |
501 ASSERT_EQ(1u, frames.size()); | 509 ASSERT_EQ(1u, frames.size()); |
(...skipping 19 matching lines...) Expand all Loading... |
521 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 529 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
522 | 530 |
523 { | 531 { |
524 InSequence s; | 532 InSequence s; |
525 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 533 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
526 .WillOnce(Invoke(&stub1, &ReadFramesStub::Call)) | 534 .WillOnce(Invoke(&stub1, &ReadFramesStub::Call)) |
527 .WillOnce(Invoke(&stub2, &ReadFramesStub::Call)); | 535 .WillOnce(Invoke(&stub2, &ReadFramesStub::Call)); |
528 EXPECT_CALL(checkpoint, Call(0)); | 536 EXPECT_CALL(checkpoint, Call(0)); |
529 EXPECT_CALL(mock_callback, Call(OK)); | 537 EXPECT_CALL(mock_callback, Call(OK)); |
530 } | 538 } |
531 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 539 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), |
| 540 IsError(ERR_IO_PENDING)); |
532 ASSERT_EQ(0u, frames.size()); | 541 ASSERT_EQ(0u, frames.size()); |
533 | 542 |
534 AppendTo(stub2.frames_passed(), | 543 AppendTo(stub2.frames_passed(), |
535 WebSocketFrameHeader::kOpCodeText, | 544 WebSocketFrameHeader::kOpCodeText, |
536 kFinal, | 545 kFinal, |
537 data2); | 546 data2); |
538 | 547 |
539 checkpoint.Call(0); | 548 checkpoint.Call(0); |
540 stub2.callback().Run(OK); | 549 stub2.callback().Run(OK); |
541 | 550 |
(...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
581 data2); | 590 data2); |
582 ReadFramesStub stub(OK, &frames_to_output); | 591 ReadFramesStub stub(OK, &frames_to_output); |
583 CompletionCallback callback; | 592 CompletionCallback callback; |
584 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 593 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
585 | 594 |
586 { | 595 { |
587 InSequence s; | 596 InSequence s; |
588 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 597 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
589 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 598 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
590 } | 599 } |
591 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 600 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
592 ASSERT_EQ(1u, frames.size()); | 601 ASSERT_EQ(1u, frames.size()); |
593 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 602 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
594 EXPECT_TRUE(frames[0]->header.final); | 603 EXPECT_TRUE(frames[0]->header.final); |
595 EXPECT_FALSE(frames[0]->header.reserved1); | 604 EXPECT_FALSE(frames[0]->header.reserved1); |
596 EXPECT_EQ("Hello", ToString(frames[0])); | 605 EXPECT_EQ("Hello", ToString(frames[0])); |
597 } | 606 } |
598 | 607 |
599 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedEmptyFrames) { | 608 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedEmptyFrames) { |
600 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; | 609 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; |
601 AppendTo(&frames_to_output, | 610 AppendTo(&frames_to_output, |
602 WebSocketFrameHeader::kOpCodeText, | 611 WebSocketFrameHeader::kOpCodeText, |
603 kNoFlag); | 612 kNoFlag); |
604 AppendTo(&frames_to_output, | 613 AppendTo(&frames_to_output, |
605 WebSocketFrameHeader::kOpCodeContinuation, | 614 WebSocketFrameHeader::kOpCodeContinuation, |
606 kFinal); | 615 kFinal); |
607 ReadFramesStub stub(OK, &frames_to_output); | 616 ReadFramesStub stub(OK, &frames_to_output); |
608 CompletionCallback callback; | 617 CompletionCallback callback; |
609 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 618 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
610 | 619 |
611 { | 620 { |
612 InSequence s; | 621 InSequence s; |
613 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 622 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
614 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 623 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
615 } | 624 } |
616 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 625 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
617 ASSERT_EQ(2u, frames.size()); | 626 ASSERT_EQ(2u, frames.size()); |
618 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 627 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
619 EXPECT_FALSE(frames[0]->header.final); | 628 EXPECT_FALSE(frames[0]->header.final); |
620 EXPECT_FALSE(frames[0]->header.reserved1); | 629 EXPECT_FALSE(frames[0]->header.reserved1); |
621 EXPECT_EQ("", ToString(frames[0])); | 630 EXPECT_EQ("", ToString(frames[0])); |
622 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, | 631 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, |
623 frames[1]->header.opcode); | 632 frames[1]->header.opcode); |
624 EXPECT_TRUE(frames[1]->header.final); | 633 EXPECT_TRUE(frames[1]->header.final); |
625 EXPECT_FALSE(frames[1]->header.reserved1); | 634 EXPECT_FALSE(frames[1]->header.reserved1); |
626 EXPECT_EQ("", ToString(frames[1])); | 635 EXPECT_EQ("", ToString(frames[1])); |
(...skipping 10 matching lines...) Expand all Loading... |
637 kFinal); | 646 kFinal); |
638 ReadFramesStub stub(OK, &frames_to_output); | 647 ReadFramesStub stub(OK, &frames_to_output); |
639 CompletionCallback callback; | 648 CompletionCallback callback; |
640 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 649 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
641 | 650 |
642 { | 651 { |
643 InSequence s; | 652 InSequence s; |
644 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 653 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
645 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 654 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
646 } | 655 } |
647 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 656 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
648 ASSERT_EQ(1u, frames.size()); | 657 ASSERT_EQ(1u, frames.size()); |
649 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 658 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
650 EXPECT_TRUE(frames[0]->header.final); | 659 EXPECT_TRUE(frames[0]->header.final); |
651 EXPECT_FALSE(frames[0]->header.reserved1); | 660 EXPECT_FALSE(frames[0]->header.reserved1); |
652 EXPECT_EQ("", ToString(frames[0])); | 661 EXPECT_EQ("", ToString(frames[0])); |
653 } | 662 } |
654 | 663 |
655 TEST_F(WebSocketDeflateStreamTest, | 664 TEST_F(WebSocketDeflateStreamTest, |
656 ReadCompressedFrameFollowedByEmptyFrame) { | 665 ReadCompressedFrameFollowedByEmptyFrame) { |
657 const std::string data("\xf2\x48\xcd\xc9\xc9\x07\x00", 7); | 666 const std::string data("\xf2\x48\xcd\xc9\xc9\x07\x00", 7); |
658 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; | 667 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; |
659 AppendTo(&frames_to_output, | 668 AppendTo(&frames_to_output, |
660 WebSocketFrameHeader::kOpCodeText, | 669 WebSocketFrameHeader::kOpCodeText, |
661 kReserved1, | 670 kReserved1, |
662 data); | 671 data); |
663 AppendTo(&frames_to_output, | 672 AppendTo(&frames_to_output, |
664 WebSocketFrameHeader::kOpCodeContinuation, | 673 WebSocketFrameHeader::kOpCodeContinuation, |
665 kFinal); | 674 kFinal); |
666 ReadFramesStub stub(OK, &frames_to_output); | 675 ReadFramesStub stub(OK, &frames_to_output); |
667 CompletionCallback callback; | 676 CompletionCallback callback; |
668 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 677 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
669 | 678 |
670 { | 679 { |
671 InSequence s; | 680 InSequence s; |
672 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 681 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
673 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 682 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
674 } | 683 } |
675 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 684 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
676 ASSERT_EQ(1u, frames.size()); | 685 ASSERT_EQ(1u, frames.size()); |
677 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 686 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
678 EXPECT_TRUE(frames[0]->header.final); | 687 EXPECT_TRUE(frames[0]->header.final); |
679 EXPECT_FALSE(frames[0]->header.reserved1); | 688 EXPECT_FALSE(frames[0]->header.reserved1); |
680 EXPECT_EQ("Hello", ToString(frames[0])); | 689 EXPECT_EQ("Hello", ToString(frames[0])); |
681 } | 690 } |
682 | 691 |
683 TEST_F(WebSocketDeflateStreamTest, ReadControlFrameBetweenDataFrames) { | 692 TEST_F(WebSocketDeflateStreamTest, ReadControlFrameBetweenDataFrames) { |
684 const std::string data1("\xf2\x48\xcd", 3); | 693 const std::string data1("\xf2\x48\xcd", 3); |
685 const std::string data2("\xc9\xc9\x07\x00", 4); | 694 const std::string data2("\xc9\xc9\x07\x00", 4); |
686 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; | 695 std::vector<std::unique_ptr<WebSocketFrame>> frames_to_output; |
687 AppendTo(&frames_to_output, | 696 AppendTo(&frames_to_output, |
688 WebSocketFrameHeader::kOpCodeText, | 697 WebSocketFrameHeader::kOpCodeText, |
689 kReserved1, | 698 kReserved1, |
690 data1); | 699 data1); |
691 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodePing, kFinal); | 700 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodePing, kFinal); |
692 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodeText, kFinal, data2); | 701 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodeText, kFinal, data2); |
693 ReadFramesStub stub(OK, &frames_to_output); | 702 ReadFramesStub stub(OK, &frames_to_output); |
694 CompletionCallback callback; | 703 CompletionCallback callback; |
695 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 704 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
696 | 705 |
697 { | 706 { |
698 InSequence s; | 707 InSequence s; |
699 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 708 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
700 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 709 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
701 } | 710 } |
702 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 711 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
703 ASSERT_EQ(2u, frames.size()); | 712 ASSERT_EQ(2u, frames.size()); |
704 EXPECT_EQ(WebSocketFrameHeader::kOpCodePing, frames[0]->header.opcode); | 713 EXPECT_EQ(WebSocketFrameHeader::kOpCodePing, frames[0]->header.opcode); |
705 EXPECT_TRUE(frames[0]->header.final); | 714 EXPECT_TRUE(frames[0]->header.final); |
706 EXPECT_FALSE(frames[0]->header.reserved1); | 715 EXPECT_FALSE(frames[0]->header.reserved1); |
707 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); | 716 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); |
708 EXPECT_TRUE(frames[1]->header.final); | 717 EXPECT_TRUE(frames[1]->header.final); |
709 EXPECT_FALSE(frames[1]->header.reserved1); | 718 EXPECT_FALSE(frames[1]->header.reserved1); |
710 EXPECT_EQ("Hello", ToString(frames[1])); | 719 EXPECT_EQ("Hello", ToString(frames[1])); |
711 } | 720 } |
712 | 721 |
(...skipping 13 matching lines...) Expand all Loading... |
726 | 735 |
727 ReadFramesStub stub(OK, &frames_to_output); | 736 ReadFramesStub stub(OK, &frames_to_output); |
728 CompletionCallback callback; | 737 CompletionCallback callback; |
729 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 738 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
730 { | 739 { |
731 InSequence s; | 740 InSequence s; |
732 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 741 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
733 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 742 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
734 } | 743 } |
735 | 744 |
736 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 745 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
737 ASSERT_EQ(3u, frames.size()); | 746 ASSERT_EQ(3u, frames.size()); |
738 EXPECT_EQ(WebSocketFrameHeader::kOpCodeBinary, frames[0]->header.opcode); | 747 EXPECT_EQ(WebSocketFrameHeader::kOpCodeBinary, frames[0]->header.opcode); |
739 EXPECT_FALSE(frames[0]->header.final); | 748 EXPECT_FALSE(frames[0]->header.final); |
740 EXPECT_FALSE(frames[0]->header.reserved1); | 749 EXPECT_FALSE(frames[0]->header.reserved1); |
741 EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[0]->header.payload_length)); | 750 EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[0]->header.payload_length)); |
742 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, | 751 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, |
743 frames[1]->header.opcode); | 752 frames[1]->header.opcode); |
744 EXPECT_FALSE(frames[1]->header.final); | 753 EXPECT_FALSE(frames[1]->header.final); |
745 EXPECT_FALSE(frames[1]->header.reserved1); | 754 EXPECT_FALSE(frames[1]->header.reserved1); |
746 EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[1]->header.payload_length)); | 755 EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[1]->header.payload_length)); |
(...skipping 25 matching lines...) Expand all Loading... |
772 | 781 |
773 ReadFramesStub stub(OK, &frames_to_output); | 782 ReadFramesStub stub(OK, &frames_to_output); |
774 CompletionCallback callback; | 783 CompletionCallback callback; |
775 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 784 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
776 { | 785 { |
777 InSequence s; | 786 InSequence s; |
778 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 787 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
779 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 788 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
780 } | 789 } |
781 | 790 |
782 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 791 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
783 ASSERT_EQ(2u, frames.size()); | 792 ASSERT_EQ(2u, frames.size()); |
784 EXPECT_EQ(WebSocketFrameHeader::kOpCodeBinary, frames[0]->header.opcode); | 793 EXPECT_EQ(WebSocketFrameHeader::kOpCodeBinary, frames[0]->header.opcode); |
785 EXPECT_FALSE(frames[0]->header.final); | 794 EXPECT_FALSE(frames[0]->header.final); |
786 EXPECT_FALSE(frames[0]->header.reserved1); | 795 EXPECT_FALSE(frames[0]->header.reserved1); |
787 EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[0]->header.payload_length)); | 796 EXPECT_EQ(kChunkSize, static_cast<size_t>(frames[0]->header.payload_length)); |
788 | 797 |
789 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, | 798 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, |
790 frames[1]->header.opcode); | 799 frames[1]->header.opcode); |
791 EXPECT_TRUE(frames[1]->header.final); | 800 EXPECT_TRUE(frames[1]->header.final); |
792 EXPECT_FALSE(frames[1]->header.reserved1); | 801 EXPECT_FALSE(frames[1]->header.reserved1); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
857 std::string("\x4a\x86\x33\x8d\x00\x00", 6)); | 866 std::string("\x4a\x86\x33\x8d\x00\x00", 6)); |
858 ReadFramesStub stub(OK, &frames_to_output); | 867 ReadFramesStub stub(OK, &frames_to_output); |
859 CompletionCallback callback; | 868 CompletionCallback callback; |
860 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 869 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
861 | 870 |
862 { | 871 { |
863 InSequence s; | 872 InSequence s; |
864 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 873 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
865 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 874 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
866 } | 875 } |
867 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 876 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
868 ASSERT_EQ(2u, frames.size()); | 877 ASSERT_EQ(2u, frames.size()); |
869 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 878 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
870 EXPECT_TRUE(frames[0]->header.final); | 879 EXPECT_TRUE(frames[0]->header.final); |
871 EXPECT_FALSE(frames[0]->header.reserved1); | 880 EXPECT_FALSE(frames[0]->header.reserved1); |
872 EXPECT_EQ("compressed1", ToString(frames[0])); | 881 EXPECT_EQ("compressed1", ToString(frames[0])); |
873 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); | 882 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); |
874 EXPECT_TRUE(frames[1]->header.final); | 883 EXPECT_TRUE(frames[1]->header.final); |
875 EXPECT_FALSE(frames[1]->header.reserved1); | 884 EXPECT_FALSE(frames[1]->header.reserved1); |
876 EXPECT_EQ("compressed2", ToString(frames[1])); | 885 EXPECT_EQ("compressed2", ToString(frames[1])); |
877 } | 886 } |
(...skipping 10 matching lines...) Expand all Loading... |
888 "uncompressed2"); | 897 "uncompressed2"); |
889 ReadFramesStub stub(OK, &frames_to_output); | 898 ReadFramesStub stub(OK, &frames_to_output); |
890 CompletionCallback callback; | 899 CompletionCallback callback; |
891 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 900 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
892 | 901 |
893 { | 902 { |
894 InSequence s; | 903 InSequence s; |
895 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 904 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
896 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 905 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
897 } | 906 } |
898 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 907 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
899 ASSERT_EQ(2u, frames.size()); | 908 ASSERT_EQ(2u, frames.size()); |
900 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 909 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
901 EXPECT_TRUE(frames[0]->header.final); | 910 EXPECT_TRUE(frames[0]->header.final); |
902 EXPECT_FALSE(frames[0]->header.reserved1); | 911 EXPECT_FALSE(frames[0]->header.reserved1); |
903 EXPECT_EQ("uncompressed1", ToString(frames[0])); | 912 EXPECT_EQ("uncompressed1", ToString(frames[0])); |
904 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); | 913 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); |
905 EXPECT_TRUE(frames[1]->header.final); | 914 EXPECT_TRUE(frames[1]->header.final); |
906 EXPECT_FALSE(frames[1]->header.reserved1); | 915 EXPECT_FALSE(frames[1]->header.reserved1); |
907 EXPECT_EQ("uncompressed2", ToString(frames[1])); | 916 EXPECT_EQ("uncompressed2", ToString(frames[1])); |
908 } | 917 } |
(...skipping 12 matching lines...) Expand all Loading... |
921 "uncompressed"); | 930 "uncompressed"); |
922 ReadFramesStub stub(OK, &frames_to_output); | 931 ReadFramesStub stub(OK, &frames_to_output); |
923 CompletionCallback callback; | 932 CompletionCallback callback; |
924 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 933 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
925 | 934 |
926 { | 935 { |
927 InSequence s; | 936 InSequence s; |
928 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 937 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
929 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 938 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
930 } | 939 } |
931 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 940 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
932 ASSERT_EQ(2u, frames.size()); | 941 ASSERT_EQ(2u, frames.size()); |
933 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 942 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
934 EXPECT_TRUE(frames[0]->header.final); | 943 EXPECT_TRUE(frames[0]->header.final); |
935 EXPECT_FALSE(frames[0]->header.reserved1); | 944 EXPECT_FALSE(frames[0]->header.reserved1); |
936 EXPECT_EQ("compressed", ToString(frames[0])); | 945 EXPECT_EQ("compressed", ToString(frames[0])); |
937 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); | 946 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); |
938 EXPECT_TRUE(frames[1]->header.final); | 947 EXPECT_TRUE(frames[1]->header.final); |
939 EXPECT_FALSE(frames[1]->header.reserved1); | 948 EXPECT_FALSE(frames[1]->header.reserved1); |
940 EXPECT_EQ("uncompressed", ToString(frames[1])); | 949 EXPECT_EQ("uncompressed", ToString(frames[1])); |
941 } | 950 } |
(...skipping 12 matching lines...) Expand all Loading... |
954 "\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x01\x00", 12)); | 963 "\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x01\x00", 12)); |
955 ReadFramesStub stub(OK, &frames_to_output); | 964 ReadFramesStub stub(OK, &frames_to_output); |
956 CompletionCallback callback; | 965 CompletionCallback callback; |
957 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 966 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
958 | 967 |
959 { | 968 { |
960 InSequence s; | 969 InSequence s; |
961 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 970 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
962 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 971 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
963 } | 972 } |
964 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 973 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), IsOk()); |
965 ASSERT_EQ(2u, frames.size()); | 974 ASSERT_EQ(2u, frames.size()); |
966 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 975 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
967 EXPECT_TRUE(frames[0]->header.final); | 976 EXPECT_TRUE(frames[0]->header.final); |
968 EXPECT_FALSE(frames[0]->header.reserved1); | 977 EXPECT_FALSE(frames[0]->header.reserved1); |
969 EXPECT_EQ("uncompressed", ToString(frames[0])); | 978 EXPECT_EQ("uncompressed", ToString(frames[0])); |
970 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); | 979 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[1]->header.opcode); |
971 EXPECT_TRUE(frames[1]->header.final); | 980 EXPECT_TRUE(frames[1]->header.final); |
972 EXPECT_FALSE(frames[1]->header.reserved1); | 981 EXPECT_FALSE(frames[1]->header.reserved1); |
973 EXPECT_EQ("compressed", ToString(frames[1])); | 982 EXPECT_EQ("compressed", ToString(frames[1])); |
974 } | 983 } |
(...skipping 12 matching lines...) Expand all Loading... |
987 InSequence s; | 996 InSequence s; |
988 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 997 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
989 .WillOnce(Invoke(stub_vector[0].get(), &ReadFramesStub::Call)); | 998 .WillOnce(Invoke(stub_vector[0].get(), &ReadFramesStub::Call)); |
990 | 999 |
991 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 1000 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
992 .WillOnce(Invoke(stub_vector[1].get(), &ReadFramesStub::Call)); | 1001 .WillOnce(Invoke(stub_vector[1].get(), &ReadFramesStub::Call)); |
993 | 1002 |
994 EXPECT_CALL(mock_callback, Call(OK)); | 1003 EXPECT_CALL(mock_callback, Call(OK)); |
995 } | 1004 } |
996 | 1005 |
997 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 1006 ASSERT_THAT(deflate_stream_->ReadFrames(&frames, callback), |
| 1007 IsError(ERR_IO_PENDING)); |
998 AppendTo(stub_vector[0]->frames_passed(), | 1008 AppendTo(stub_vector[0]->frames_passed(), |
999 WebSocketFrameHeader::kOpCodeText, | 1009 WebSocketFrameHeader::kOpCodeText, |
1000 kReserved1, | 1010 kReserved1, |
1001 std::string()); | 1011 std::string()); |
1002 stub_vector[0]->callback().Run(OK); | 1012 stub_vector[0]->callback().Run(OK); |
1003 AppendTo(stub_vector[1]->frames_passed(), | 1013 AppendTo(stub_vector[1]->frames_passed(), |
1004 WebSocketFrameHeader::kOpCodeContinuation, | 1014 WebSocketFrameHeader::kOpCodeContinuation, |
1005 kFinal, | 1015 kFinal, |
1006 std::string("\x02\x00")); | 1016 std::string("\x02\x00")); |
1007 stub_vector[1]->callback().Run(OK); | 1017 stub_vector[1]->callback().Run(OK); |
1008 ASSERT_EQ(1u, frames.size()); | 1018 ASSERT_EQ(1u, frames.size()); |
1009 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 1019 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
1010 EXPECT_EQ("", ToString(frames[0])); | 1020 EXPECT_EQ("", ToString(frames[0])); |
1011 } | 1021 } |
1012 | 1022 |
1013 TEST_F(WebSocketDeflateStreamTest, WriteEmpty) { | 1023 TEST_F(WebSocketDeflateStreamTest, WriteEmpty) { |
1014 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1024 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1015 CompletionCallback callback; | 1025 CompletionCallback callback; |
1016 { | 1026 { |
1017 InSequence s; | 1027 InSequence s; |
1018 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)).Times(0); | 1028 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)).Times(0); |
1019 } | 1029 } |
1020 EXPECT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1030 EXPECT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1021 } | 1031 } |
1022 | 1032 |
1023 TEST_F(WebSocketDeflateStreamTest, WriteFailedImmediately) { | 1033 TEST_F(WebSocketDeflateStreamTest, WriteFailedImmediately) { |
1024 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1034 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1025 CompletionCallback callback; | 1035 CompletionCallback callback; |
1026 { | 1036 { |
1027 InSequence s; | 1037 InSequence s; |
1028 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1038 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1029 .WillOnce(Return(ERR_FAILED)); | 1039 .WillOnce(Return(ERR_FAILED)); |
1030 } | 1040 } |
1031 | 1041 |
1032 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "hello"); | 1042 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "hello"); |
1033 predictor_->AddFramesToBeInput(frames); | 1043 predictor_->AddFramesToBeInput(frames); |
1034 EXPECT_EQ(ERR_FAILED, deflate_stream_->WriteFrames(&frames, callback)); | 1044 EXPECT_THAT(deflate_stream_->WriteFrames(&frames, callback), |
| 1045 IsError(ERR_FAILED)); |
1035 predictor_->Clear(); | 1046 predictor_->Clear(); |
1036 } | 1047 } |
1037 | 1048 |
1038 TEST_F(WebSocketDeflateStreamTest, WriteFrameImmediately) { | 1049 TEST_F(WebSocketDeflateStreamTest, WriteFrameImmediately) { |
1039 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1050 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1040 CompletionCallback callback; | 1051 CompletionCallback callback; |
1041 WriteFramesStub stub(predictor_, OK); | 1052 WriteFramesStub stub(predictor_, OK); |
1042 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); | 1053 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); |
1043 predictor_->AddFramesToBeInput(frames); | 1054 predictor_->AddFramesToBeInput(frames); |
1044 { | 1055 { |
1045 InSequence s; | 1056 InSequence s; |
1046 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) | 1057 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) |
1047 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1058 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1048 } | 1059 } |
1049 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1060 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1050 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1061 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1051 *stub.frames(); | 1062 *stub.frames(); |
1052 ASSERT_EQ(1u, frames_passed.size()); | 1063 ASSERT_EQ(1u, frames_passed.size()); |
1053 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1064 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1054 EXPECT_TRUE(frames_passed[0]->header.final); | 1065 EXPECT_TRUE(frames_passed[0]->header.final); |
1055 EXPECT_TRUE(frames_passed[0]->header.reserved1); | 1066 EXPECT_TRUE(frames_passed[0]->header.reserved1); |
1056 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), | 1067 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), |
1057 ToString(frames_passed[0])); | 1068 ToString(frames_passed[0])); |
1058 } | 1069 } |
1059 | 1070 |
1060 TEST_F(WebSocketDeflateStreamTest, WriteFrameAsync) { | 1071 TEST_F(WebSocketDeflateStreamTest, WriteFrameAsync) { |
1061 WriteFramesStub stub(predictor_, ERR_IO_PENDING); | 1072 WriteFramesStub stub(predictor_, ERR_IO_PENDING); |
1062 MockCallback mock_callback, checkpoint; | 1073 MockCallback mock_callback, checkpoint; |
1063 CompletionCallback callback = | 1074 CompletionCallback callback = |
1064 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); | 1075 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); |
1065 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1076 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1066 { | 1077 { |
1067 InSequence s; | 1078 InSequence s; |
1068 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1079 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1069 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1080 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1070 EXPECT_CALL(checkpoint, Call(0)); | 1081 EXPECT_CALL(checkpoint, Call(0)); |
1071 EXPECT_CALL(mock_callback, Call(OK)); | 1082 EXPECT_CALL(mock_callback, Call(OK)); |
1072 } | 1083 } |
1073 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); | 1084 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); |
1074 predictor_->AddFramesToBeInput(frames); | 1085 predictor_->AddFramesToBeInput(frames); |
1075 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->WriteFrames(&frames, callback)); | 1086 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), |
| 1087 IsError(ERR_IO_PENDING)); |
1076 | 1088 |
1077 checkpoint.Call(0); | 1089 checkpoint.Call(0); |
1078 stub.callback().Run(OK); | 1090 stub.callback().Run(OK); |
1079 | 1091 |
1080 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1092 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1081 *stub.frames(); | 1093 *stub.frames(); |
1082 ASSERT_EQ(1u, frames_passed.size()); | 1094 ASSERT_EQ(1u, frames_passed.size()); |
1083 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1095 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1084 EXPECT_TRUE(frames_passed[0]->header.final); | 1096 EXPECT_TRUE(frames_passed[0]->header.final); |
1085 EXPECT_TRUE(frames_passed[0]->header.reserved1); | 1097 EXPECT_TRUE(frames_passed[0]->header.reserved1); |
1086 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), | 1098 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), |
1087 ToString(frames_passed[0])); | 1099 ToString(frames_passed[0])); |
1088 } | 1100 } |
1089 | 1101 |
1090 TEST_F(WebSocketDeflateStreamTest, WriteControlFrameBetweenDataFrames) { | 1102 TEST_F(WebSocketDeflateStreamTest, WriteControlFrameBetweenDataFrames) { |
1091 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1103 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1092 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kNoFlag, "Hel"); | 1104 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kNoFlag, "Hel"); |
1093 AppendTo(&frames, WebSocketFrameHeader::kOpCodePing, kFinal); | 1105 AppendTo(&frames, WebSocketFrameHeader::kOpCodePing, kFinal); |
1094 AppendTo(&frames, WebSocketFrameHeader::kOpCodeContinuation, kFinal, "lo"); | 1106 AppendTo(&frames, WebSocketFrameHeader::kOpCodeContinuation, kFinal, "lo"); |
1095 predictor_->AddFramesToBeInput(frames); | 1107 predictor_->AddFramesToBeInput(frames); |
1096 WriteFramesStub stub(predictor_, OK); | 1108 WriteFramesStub stub(predictor_, OK); |
1097 CompletionCallback callback; | 1109 CompletionCallback callback; |
1098 | 1110 |
1099 { | 1111 { |
1100 InSequence s; | 1112 InSequence s; |
1101 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1113 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1102 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1114 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1103 } | 1115 } |
1104 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1116 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1105 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1117 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1106 *stub.frames(); | 1118 *stub.frames(); |
1107 ASSERT_EQ(2u, frames_passed.size()); | 1119 ASSERT_EQ(2u, frames_passed.size()); |
1108 EXPECT_EQ(WebSocketFrameHeader::kOpCodePing, frames_passed[0]->header.opcode); | 1120 EXPECT_EQ(WebSocketFrameHeader::kOpCodePing, frames_passed[0]->header.opcode); |
1109 EXPECT_TRUE(frames_passed[0]->header.final); | 1121 EXPECT_TRUE(frames_passed[0]->header.final); |
1110 EXPECT_FALSE(frames_passed[0]->header.reserved1); | 1122 EXPECT_FALSE(frames_passed[0]->header.reserved1); |
1111 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[1]->header.opcode); | 1123 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[1]->header.opcode); |
1112 EXPECT_TRUE(frames_passed[1]->header.final); | 1124 EXPECT_TRUE(frames_passed[1]->header.final); |
1113 EXPECT_TRUE(frames_passed[1]->header.reserved1); | 1125 EXPECT_TRUE(frames_passed[1]->header.reserved1); |
1114 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), | 1126 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), |
1115 ToString(frames_passed[1])); | 1127 ToString(frames_passed[1])); |
1116 } | 1128 } |
1117 | 1129 |
1118 TEST_F(WebSocketDeflateStreamTest, WriteEmptyMessage) { | 1130 TEST_F(WebSocketDeflateStreamTest, WriteEmptyMessage) { |
1119 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1131 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1120 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal); | 1132 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal); |
1121 predictor_->AddFramesToBeInput(frames); | 1133 predictor_->AddFramesToBeInput(frames); |
1122 WriteFramesStub stub(predictor_, OK); | 1134 WriteFramesStub stub(predictor_, OK); |
1123 CompletionCallback callback; | 1135 CompletionCallback callback; |
1124 | 1136 |
1125 { | 1137 { |
1126 InSequence s; | 1138 InSequence s; |
1127 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1139 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1128 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1140 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1129 } | 1141 } |
1130 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1142 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1131 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1143 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1132 *stub.frames(); | 1144 *stub.frames(); |
1133 ASSERT_EQ(1u, frames_passed.size()); | 1145 ASSERT_EQ(1u, frames_passed.size()); |
1134 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1146 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1135 EXPECT_TRUE(frames_passed[0]->header.final); | 1147 EXPECT_TRUE(frames_passed[0]->header.final); |
1136 EXPECT_TRUE(frames_passed[0]->header.reserved1); | 1148 EXPECT_TRUE(frames_passed[0]->header.reserved1); |
1137 EXPECT_EQ(std::string("\x00", 1), ToString(frames_passed[0])); | 1149 EXPECT_EQ(std::string("\x00", 1), ToString(frames_passed[0])); |
1138 } | 1150 } |
1139 | 1151 |
1140 TEST_F(WebSocketDeflateStreamTest, WriteUncompressedMessage) { | 1152 TEST_F(WebSocketDeflateStreamTest, WriteUncompressedMessage) { |
1141 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1153 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1142 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kNoFlag, "AAAA"); | 1154 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kNoFlag, "AAAA"); |
1143 AppendTo(&frames, WebSocketFrameHeader::kOpCodeContinuation, kFinal, "AAA"); | 1155 AppendTo(&frames, WebSocketFrameHeader::kOpCodeContinuation, kFinal, "AAA"); |
1144 predictor_->AddFramesToBeInput(frames); | 1156 predictor_->AddFramesToBeInput(frames); |
1145 WriteFramesStub stub(predictor_, OK); | 1157 WriteFramesStub stub(predictor_, OK); |
1146 CompletionCallback callback; | 1158 CompletionCallback callback; |
1147 | 1159 |
1148 predictor_->set_result(WebSocketDeflatePredictor::DO_NOT_DEFLATE); | 1160 predictor_->set_result(WebSocketDeflatePredictor::DO_NOT_DEFLATE); |
1149 | 1161 |
1150 { | 1162 { |
1151 InSequence s; | 1163 InSequence s; |
1152 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1164 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1153 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1165 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1154 } | 1166 } |
1155 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1167 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1156 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1168 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1157 *stub.frames(); | 1169 *stub.frames(); |
1158 ASSERT_EQ(2u, frames_passed.size()); | 1170 ASSERT_EQ(2u, frames_passed.size()); |
1159 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1171 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1160 EXPECT_FALSE(frames_passed[0]->header.final); | 1172 EXPECT_FALSE(frames_passed[0]->header.final); |
1161 EXPECT_FALSE(frames_passed[0]->header.reserved1); | 1173 EXPECT_FALSE(frames_passed[0]->header.reserved1); |
1162 EXPECT_EQ("AAAA", ToString(frames_passed[0])); | 1174 EXPECT_EQ("AAAA", ToString(frames_passed[0])); |
1163 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, | 1175 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, |
1164 frames_passed[1]->header.opcode); | 1176 frames_passed[1]->header.opcode); |
1165 EXPECT_TRUE(frames_passed[1]->header.final); | 1177 EXPECT_TRUE(frames_passed[1]->header.final); |
(...skipping 19 matching lines...) Expand all Loading... |
1185 while (true) { | 1197 while (true) { |
1186 bool is_final = (total_compressed_frames.size() >= 2); | 1198 bool is_final = (total_compressed_frames.size() >= 2); |
1187 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1199 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1188 std::string data; | 1200 std::string data; |
1189 for (size_t i = 0; i < size; ++i) | 1201 for (size_t i = 0; i < size; ++i) |
1190 data += static_cast<char>(lcg.Generate()); | 1202 data += static_cast<char>(lcg.Generate()); |
1191 deflater.AddBytes(data.data(), data.size()); | 1203 deflater.AddBytes(data.data(), data.size()); |
1192 FrameFlag flag = is_final ? kFinal : kNoFlag; | 1204 FrameFlag flag = is_final ? kFinal : kNoFlag; |
1193 AppendTo(&frames, WebSocketFrameHeader::kOpCodeBinary, flag, data); | 1205 AppendTo(&frames, WebSocketFrameHeader::kOpCodeBinary, flag, data); |
1194 predictor_->AddFramesToBeInput(frames); | 1206 predictor_->AddFramesToBeInput(frames); |
1195 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1207 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1196 total_compressed_frames.insert( | 1208 total_compressed_frames.insert( |
1197 total_compressed_frames.end(), | 1209 total_compressed_frames.end(), |
1198 std::make_move_iterator(stub.frames()->begin()), | 1210 std::make_move_iterator(stub.frames()->begin()), |
1199 std::make_move_iterator(stub.frames()->end())); | 1211 std::make_move_iterator(stub.frames()->end())); |
1200 stub.frames()->clear(); | 1212 stub.frames()->clear(); |
1201 if (is_final) | 1213 if (is_final) |
1202 break; | 1214 break; |
1203 } | 1215 } |
1204 deflater.Finish(); | 1216 deflater.Finish(); |
1205 std::string total_deflated; | 1217 std::string total_deflated; |
(...skipping 23 matching lines...) Expand all Loading... |
1229 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); | 1241 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); |
1230 predictor_->AddFramesToBeInput(frames); | 1242 predictor_->AddFramesToBeInput(frames); |
1231 WriteFramesStub stub(predictor_, OK); | 1243 WriteFramesStub stub(predictor_, OK); |
1232 CompletionCallback callback; | 1244 CompletionCallback callback; |
1233 | 1245 |
1234 { | 1246 { |
1235 InSequence s; | 1247 InSequence s; |
1236 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1248 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1237 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1249 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1238 } | 1250 } |
1239 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1251 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1240 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1252 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1241 *stub.frames(); | 1253 *stub.frames(); |
1242 ASSERT_EQ(2u, frames_passed.size()); | 1254 ASSERT_EQ(2u, frames_passed.size()); |
1243 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1255 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1244 EXPECT_TRUE(frames_passed[0]->header.final); | 1256 EXPECT_TRUE(frames_passed[0]->header.final); |
1245 EXPECT_TRUE(frames_passed[0]->header.reserved1); | 1257 EXPECT_TRUE(frames_passed[0]->header.reserved1); |
1246 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), | 1258 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), |
1247 ToString(frames_passed[0])); | 1259 ToString(frames_passed[0])); |
1248 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[1]->header.opcode); | 1260 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[1]->header.opcode); |
1249 EXPECT_TRUE(frames_passed[1]->header.final); | 1261 EXPECT_TRUE(frames_passed[1]->header.final); |
1250 EXPECT_TRUE(frames_passed[1]->header.reserved1); | 1262 EXPECT_TRUE(frames_passed[1]->header.reserved1); |
1251 EXPECT_EQ(std::string("\xf2\x00\x11\x00\x00", 5), ToString(frames_passed[1])); | 1263 EXPECT_EQ(std::string("\xf2\x00\x11\x00\x00", 5), ToString(frames_passed[1])); |
1252 } | 1264 } |
1253 | 1265 |
1254 TEST_F(WebSocketDeflateStreamWithDoNotTakeOverContextTest, | 1266 TEST_F(WebSocketDeflateStreamWithDoNotTakeOverContextTest, |
1255 WriteMultipleMessages) { | 1267 WriteMultipleMessages) { |
1256 std::vector<std::unique_ptr<WebSocketFrame>> frames; | 1268 std::vector<std::unique_ptr<WebSocketFrame>> frames; |
1257 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); | 1269 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); |
1258 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); | 1270 AppendTo(&frames, WebSocketFrameHeader::kOpCodeText, kFinal, "Hello"); |
1259 predictor_->AddFramesToBeInput(frames); | 1271 predictor_->AddFramesToBeInput(frames); |
1260 WriteFramesStub stub(predictor_, OK); | 1272 WriteFramesStub stub(predictor_, OK); |
1261 CompletionCallback callback; | 1273 CompletionCallback callback; |
1262 | 1274 |
1263 { | 1275 { |
1264 InSequence s; | 1276 InSequence s; |
1265 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1277 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1266 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1278 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1267 } | 1279 } |
1268 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1280 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1269 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1281 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1270 *stub.frames(); | 1282 *stub.frames(); |
1271 ASSERT_EQ(2u, frames_passed.size()); | 1283 ASSERT_EQ(2u, frames_passed.size()); |
1272 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1284 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1273 EXPECT_TRUE(frames_passed[0]->header.final); | 1285 EXPECT_TRUE(frames_passed[0]->header.final); |
1274 EXPECT_TRUE(frames_passed[0]->header.reserved1); | 1286 EXPECT_TRUE(frames_passed[0]->header.reserved1); |
1275 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), | 1287 EXPECT_EQ(std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7), |
1276 ToString(frames_passed[0])); | 1288 ToString(frames_passed[0])); |
1277 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[1]->header.opcode); | 1289 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[1]->header.opcode); |
1278 EXPECT_TRUE(frames_passed[1]->header.final); | 1290 EXPECT_TRUE(frames_passed[1]->header.final); |
(...skipping 16 matching lines...) Expand all Loading... |
1295 predictor_->AddFramesToBeInput(frames); | 1307 predictor_->AddFramesToBeInput(frames); |
1296 WriteFramesStub stub(predictor_, OK); | 1308 WriteFramesStub stub(predictor_, OK); |
1297 CompletionCallback callback; | 1309 CompletionCallback callback; |
1298 predictor_->set_result(WebSocketDeflatePredictor::TRY_DEFLATE); | 1310 predictor_->set_result(WebSocketDeflatePredictor::TRY_DEFLATE); |
1299 | 1311 |
1300 { | 1312 { |
1301 InSequence s; | 1313 InSequence s; |
1302 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) | 1314 EXPECT_CALL(*mock_stream_, WriteFrames(&frames, _)) |
1303 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1315 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1304 } | 1316 } |
1305 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames, callback)); | 1317 ASSERT_THAT(deflate_stream_->WriteFrames(&frames, callback), IsOk()); |
1306 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1318 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1307 *stub.frames(); | 1319 *stub.frames(); |
1308 ASSERT_EQ(5u, frames_passed.size()); | 1320 ASSERT_EQ(5u, frames_passed.size()); |
1309 | 1321 |
1310 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); | 1322 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames_passed[0]->header.opcode); |
1311 EXPECT_FALSE(frames_passed[0]->header.final); | 1323 EXPECT_FALSE(frames_passed[0]->header.final); |
1312 EXPECT_FALSE(frames_passed[0]->header.reserved1); | 1324 EXPECT_FALSE(frames_passed[0]->header.reserved1); |
1313 EXPECT_EQ("He", ToString(frames_passed[0])); | 1325 EXPECT_EQ("He", ToString(frames_passed[0])); |
1314 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, | 1326 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, |
1315 frames_passed[1]->header.opcode); | 1327 frames_passed[1]->header.opcode); |
(...skipping 22 matching lines...) Expand all Loading... |
1338 TEST_F(WebSocketDeflateStreamWithClientWindowBitsTest, WindowBits8) { | 1350 TEST_F(WebSocketDeflateStreamWithClientWindowBitsTest, WindowBits8) { |
1339 SetUpWithWindowBits(8); | 1351 SetUpWithWindowBits(8); |
1340 CompletionCallback callback; | 1352 CompletionCallback callback; |
1341 AddCompressibleFrameString(); | 1353 AddCompressibleFrameString(); |
1342 WriteFramesStub stub(predictor_, OK); | 1354 WriteFramesStub stub(predictor_, OK); |
1343 { | 1355 { |
1344 InSequence s; | 1356 InSequence s; |
1345 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) | 1357 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) |
1346 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1358 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1347 } | 1359 } |
1348 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames_, callback)); | 1360 ASSERT_THAT(deflate_stream_->WriteFrames(&frames_, callback), IsOk()); |
1349 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1361 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1350 *stub.frames(); | 1362 *stub.frames(); |
1351 ASSERT_EQ(1u, frames_passed.size()); | 1363 ASSERT_EQ(1u, frames_passed.size()); |
1352 EXPECT_EQ(std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x39\xa3" | 1364 EXPECT_EQ(std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x39\xa3" |
1353 "(?7\xb3\x34\x17\x00", 21), | 1365 "(?7\xb3\x34\x17\x00", 21), |
1354 ToString(frames_passed[0])); | 1366 ToString(frames_passed[0])); |
1355 } | 1367 } |
1356 | 1368 |
1357 // The same input with window_bits=10 returns smaller output. | 1369 // The same input with window_bits=10 returns smaller output. |
1358 TEST_F(WebSocketDeflateStreamWithClientWindowBitsTest, WindowBits10) { | 1370 TEST_F(WebSocketDeflateStreamWithClientWindowBitsTest, WindowBits10) { |
1359 SetUpWithWindowBits(10); | 1371 SetUpWithWindowBits(10); |
1360 CompletionCallback callback; | 1372 CompletionCallback callback; |
1361 AddCompressibleFrameString(); | 1373 AddCompressibleFrameString(); |
1362 WriteFramesStub stub(predictor_, OK); | 1374 WriteFramesStub stub(predictor_, OK); |
1363 { | 1375 { |
1364 InSequence s; | 1376 InSequence s; |
1365 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) | 1377 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) |
1366 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1378 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
1367 } | 1379 } |
1368 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames_, callback)); | 1380 ASSERT_THAT(deflate_stream_->WriteFrames(&frames_, callback), IsOk()); |
1369 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = | 1381 const std::vector<std::unique_ptr<WebSocketFrame>>& frames_passed = |
1370 *stub.frames(); | 1382 *stub.frames(); |
1371 ASSERT_EQ(1u, frames_passed.size()); | 1383 ASSERT_EQ(1u, frames_passed.size()); |
1372 EXPECT_EQ( | 1384 EXPECT_EQ( |
1373 std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x19\x1a\x0e\0\0", 17), | 1385 std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x19\x1a\x0e\0\0", 17), |
1374 ToString(frames_passed[0])); | 1386 ToString(frames_passed[0])); |
1375 } | 1387 } |
1376 | 1388 |
1377 } // namespace | 1389 } // namespace |
1378 | 1390 |
1379 } // namespace net | 1391 } // namespace net |
OLD | NEW |