| 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 |