| 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 <stdint.h> | 7 #include <stdint.h> |
| 8 #include <deque> | 8 #include <deque> |
| 9 #include <string> | 9 #include <string> |
| 10 | 10 |
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 87 WebSocketFrameHeader::OpCode opcode, | 87 WebSocketFrameHeader::OpCode opcode, |
| 88 FrameFlag flag) { | 88 FrameFlag flag) { |
| 89 scoped_ptr<WebSocketFrame> frame(new WebSocketFrame(opcode)); | 89 scoped_ptr<WebSocketFrame> frame(new WebSocketFrame(opcode)); |
| 90 frame->header.final = (flag & kFinal); | 90 frame->header.final = (flag & kFinal); |
| 91 frame->header.reserved1 = (flag & kReserved1); | 91 frame->header.reserved1 = (flag & kReserved1); |
| 92 frames->push_back(frame.release()); | 92 frames->push_back(frame.release()); |
| 93 } | 93 } |
| 94 | 94 |
| 95 class MockWebSocketStream : public WebSocketStream { | 95 class MockWebSocketStream : public WebSocketStream { |
| 96 public: | 96 public: |
| 97 MOCK_METHOD2(ReadFrames, int(ScopedVector<WebSocketFrame>*, | 97 MOCK_METHOD2(ReadFrames, |
| 98 const CompletionCallback&)); | 98 int(ScopedVector<WebSocketFrame>*, const CompletionCallback&)); |
| 99 MOCK_METHOD2(WriteFrames, int(ScopedVector<WebSocketFrame>*, | 99 MOCK_METHOD2(WriteFrames, |
| 100 const CompletionCallback&)); | 100 int(ScopedVector<WebSocketFrame>*, const CompletionCallback&)); |
| 101 MOCK_METHOD0(Close, void()); | 101 MOCK_METHOD0(Close, void()); |
| 102 MOCK_CONST_METHOD0(GetSubProtocol, std::string()); | 102 MOCK_CONST_METHOD0(GetSubProtocol, std::string()); |
| 103 MOCK_CONST_METHOD0(GetExtensions, std::string()); | 103 MOCK_CONST_METHOD0(GetExtensions, std::string()); |
| 104 }; | 104 }; |
| 105 | 105 |
| 106 // This mock class relies on some assumptions. | 106 // This mock class relies on some assumptions. |
| 107 // - RecordInputDataFrame is called after the corresponding WriteFrames | 107 // - RecordInputDataFrame is called after the corresponding WriteFrames |
| 108 // call. | 108 // call. |
| 109 // - RecordWrittenDataFrame is called before writing the frame. | 109 // - RecordWrittenDataFrame is called before writing the frame. |
| 110 class WebSocketDeflatePredictorMock : public WebSocketDeflatePredictor { | 110 class WebSocketDeflatePredictorMock : public WebSocketDeflatePredictor { |
| (...skipping 90 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 201 // Data frames recorded by |RecordWrittenFrames|. | 201 // Data frames recorded by |RecordWrittenFrames|. |
| 202 // Pushed by |RecordWrittenFrames| and popped and verified by | 202 // Pushed by |RecordWrittenFrames| and popped and verified by |
| 203 // |VerifySentFrame|. | 203 // |VerifySentFrame|. |
| 204 std::deque<const WebSocketFrame*> frames_written_; | 204 std::deque<const WebSocketFrame*> frames_written_; |
| 205 | 205 |
| 206 DISALLOW_COPY_AND_ASSIGN(WebSocketDeflatePredictorMock); | 206 DISALLOW_COPY_AND_ASSIGN(WebSocketDeflatePredictorMock); |
| 207 }; | 207 }; |
| 208 | 208 |
| 209 class WebSocketDeflateStreamTest : public ::testing::Test { | 209 class WebSocketDeflateStreamTest : public ::testing::Test { |
| 210 public: | 210 public: |
| 211 WebSocketDeflateStreamTest() | 211 WebSocketDeflateStreamTest() : mock_stream_(NULL), predictor_(NULL) {} |
| 212 : mock_stream_(NULL), | |
| 213 predictor_(NULL) {} | |
| 214 virtual ~WebSocketDeflateStreamTest() {} | 212 virtual ~WebSocketDeflateStreamTest() {} |
| 215 | 213 |
| 216 virtual void SetUp() { | 214 virtual void SetUp() { |
| 217 Initialize(WebSocketDeflater::TAKE_OVER_CONTEXT, kWindowBits); | 215 Initialize(WebSocketDeflater::TAKE_OVER_CONTEXT, kWindowBits); |
| 218 } | 216 } |
| 219 | 217 |
| 220 protected: | 218 protected: |
| 221 // Initialize deflate_stream_ with the given parameters. | 219 // Initialize deflate_stream_ with the given parameters. |
| 222 void Initialize(WebSocketDeflater::ContextTakeOverMode mode, | 220 void Initialize(WebSocketDeflater::ContextTakeOverMode mode, |
| 223 int window_bits) { | 221 int window_bits) { |
| (...skipping 70 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 294 const CompletionCallback& callback) { | 292 const CompletionCallback& callback) { |
| 295 DCHECK(frames->empty()); | 293 DCHECK(frames->empty()); |
| 296 frames_passed_ = frames; | 294 frames_passed_ = frames; |
| 297 callback_ = callback; | 295 callback_ = callback; |
| 298 frames->swap(frames_to_output_); | 296 frames->swap(frames_to_output_); |
| 299 return result_; | 297 return result_; |
| 300 } | 298 } |
| 301 | 299 |
| 302 int result() const { return result_; } | 300 int result() const { return result_; } |
| 303 const CompletionCallback callback() const { return callback_; } | 301 const CompletionCallback callback() const { return callback_; } |
| 304 ScopedVector<WebSocketFrame>* frames_passed() { | 302 ScopedVector<WebSocketFrame>* frames_passed() { return frames_passed_; } |
| 305 return frames_passed_; | |
| 306 } | |
| 307 | 303 |
| 308 private: | 304 private: |
| 309 int result_; | 305 int result_; |
| 310 CompletionCallback callback_; | 306 CompletionCallback callback_; |
| 311 ScopedVector<WebSocketFrame> frames_to_output_; | 307 ScopedVector<WebSocketFrame> frames_to_output_; |
| 312 ScopedVector<WebSocketFrame>* frames_passed_; | 308 ScopedVector<WebSocketFrame>* frames_passed_; |
| 313 }; | 309 }; |
| 314 | 310 |
| 315 // WriteFramesStub is a stub for WebSocketStream::WriteFrames. | 311 // WriteFramesStub is a stub for WebSocketStream::WriteFrames. |
| 316 // It returns |result_| and |frames_| to the caller and | 312 // It returns |result_| and |frames_| to the caller and |
| 317 // saves |callback| parameter to |callback_|. | 313 // saves |callback| parameter to |callback_|. |
| 318 class WriteFramesStub { | 314 class WriteFramesStub { |
| 319 public: | 315 public: |
| 320 explicit WriteFramesStub(WebSocketDeflatePredictorMock* predictor, | 316 explicit WriteFramesStub(WebSocketDeflatePredictorMock* predictor, int result) |
| 321 int result) | |
| 322 : result_(result), predictor_(predictor) {} | 317 : result_(result), predictor_(predictor) {} |
| 323 | 318 |
| 324 int Call(ScopedVector<WebSocketFrame>* frames, | 319 int Call(ScopedVector<WebSocketFrame>* frames, |
| 325 const CompletionCallback& callback) { | 320 const CompletionCallback& callback) { |
| 326 frames_.insert(frames_.end(), frames->begin(), frames->end()); | 321 frames_.insert(frames_.end(), frames->begin(), frames->end()); |
| 327 frames->weak_clear(); | 322 frames->weak_clear(); |
| 328 callback_ = callback; | 323 callback_ = callback; |
| 329 predictor_->VerifySentFrames(frames_); | 324 predictor_->VerifySentFrames(frames_); |
| 330 return result_; | 325 return result_; |
| 331 } | 326 } |
| (...skipping 15 matching lines...) Expand all Loading... |
| 347 { | 342 { |
| 348 InSequence s; | 343 InSequence s; |
| 349 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 344 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 350 .WillOnce(Return(ERR_FAILED)); | 345 .WillOnce(Return(ERR_FAILED)); |
| 351 } | 346 } |
| 352 EXPECT_EQ(ERR_FAILED, deflate_stream_->ReadFrames(&frames, callback)); | 347 EXPECT_EQ(ERR_FAILED, deflate_stream_->ReadFrames(&frames, callback)); |
| 353 } | 348 } |
| 354 | 349 |
| 355 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedFrameImmediately) { | 350 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedFrameImmediately) { |
| 356 ScopedVector<WebSocketFrame> frames_to_output; | 351 ScopedVector<WebSocketFrame> frames_to_output; |
| 357 AppendTo(&frames_to_output, | 352 AppendTo( |
| 358 WebSocketFrameHeader::kOpCodeText, | 353 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kFinal, "hello"); |
| 359 kFinal, | |
| 360 "hello"); | |
| 361 ReadFramesStub stub(OK, &frames_to_output); | 354 ReadFramesStub stub(OK, &frames_to_output); |
| 362 ScopedVector<WebSocketFrame> frames; | 355 ScopedVector<WebSocketFrame> frames; |
| 363 | 356 |
| 364 { | 357 { |
| 365 InSequence s; | 358 InSequence s; |
| 366 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 359 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 367 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 360 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 368 } | 361 } |
| 369 CompletionCallback callback; | 362 CompletionCallback callback; |
| 370 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 363 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 387 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 380 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 388 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 381 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 389 EXPECT_CALL(checkpoint, Call(0)); | 382 EXPECT_CALL(checkpoint, Call(0)); |
| 390 EXPECT_CALL(mock_callback, Call(OK)); | 383 EXPECT_CALL(mock_callback, Call(OK)); |
| 391 } | 384 } |
| 392 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 385 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); |
| 393 ASSERT_EQ(0u, frames.size()); | 386 ASSERT_EQ(0u, frames.size()); |
| 394 | 387 |
| 395 checkpoint.Call(0); | 388 checkpoint.Call(0); |
| 396 | 389 |
| 397 AppendTo(stub.frames_passed(), | 390 AppendTo( |
| 398 WebSocketFrameHeader::kOpCodeText, | 391 stub.frames_passed(), WebSocketFrameHeader::kOpCodeText, kFinal, "hello"); |
| 399 kFinal, | |
| 400 "hello"); | |
| 401 stub.callback().Run(OK); | 392 stub.callback().Run(OK); |
| 402 ASSERT_EQ(1u, frames.size()); | 393 ASSERT_EQ(1u, frames.size()); |
| 403 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 394 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
| 404 EXPECT_TRUE(frames[0]->header.final); | 395 EXPECT_TRUE(frames[0]->header.final); |
| 405 EXPECT_FALSE(frames[0]->header.reserved1); | 396 EXPECT_FALSE(frames[0]->header.reserved1); |
| 406 EXPECT_EQ("hello", ToString(frames[0])); | 397 EXPECT_EQ("hello", ToString(frames[0])); |
| 407 } | 398 } |
| 408 | 399 |
| 409 TEST_F(WebSocketDeflateStreamTest, ReadFailedAsync) { | 400 TEST_F(WebSocketDeflateStreamTest, ReadFailedAsync) { |
| 410 ReadFramesStub stub(ERR_IO_PENDING); | 401 ReadFramesStub stub(ERR_IO_PENDING); |
| 411 ScopedVector<WebSocketFrame> frames; | 402 ScopedVector<WebSocketFrame> frames; |
| 412 MockCallback mock_callback, checkpoint; | 403 MockCallback mock_callback, checkpoint; |
| 413 CompletionCallback callback = | 404 CompletionCallback callback = |
| 414 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); | 405 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); |
| 415 | 406 |
| 416 { | 407 { |
| 417 InSequence s; | 408 InSequence s; |
| 418 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 409 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 419 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 410 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 420 EXPECT_CALL(checkpoint, Call(0)); | 411 EXPECT_CALL(checkpoint, Call(0)); |
| 421 EXPECT_CALL(mock_callback, Call(ERR_FAILED)); | 412 EXPECT_CALL(mock_callback, Call(ERR_FAILED)); |
| 422 } | 413 } |
| 423 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 414 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); |
| 424 ASSERT_EQ(0u, frames.size()); | 415 ASSERT_EQ(0u, frames.size()); |
| 425 | 416 |
| 426 checkpoint.Call(0); | 417 checkpoint.Call(0); |
| 427 | 418 |
| 428 AppendTo(stub.frames_passed(), | 419 AppendTo( |
| 429 WebSocketFrameHeader::kOpCodeText, | 420 stub.frames_passed(), WebSocketFrameHeader::kOpCodeText, kFinal, "hello"); |
| 430 kFinal, | |
| 431 "hello"); | |
| 432 stub.callback().Run(ERR_FAILED); | 421 stub.callback().Run(ERR_FAILED); |
| 433 ASSERT_EQ(0u, frames.size()); | 422 ASSERT_EQ(0u, frames.size()); |
| 434 } | 423 } |
| 435 | 424 |
| 436 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameImmediately) { | 425 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameImmediately) { |
| 437 ScopedVector<WebSocketFrame> frames_to_output; | 426 ScopedVector<WebSocketFrame> frames_to_output; |
| 438 AppendTo(&frames_to_output, | 427 AppendTo(&frames_to_output, |
| 439 WebSocketFrameHeader::kOpCodeText, | 428 WebSocketFrameHeader::kOpCodeText, |
| 440 kFinal | kReserved1, | 429 kFinal | kReserved1, |
| 441 std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); | 430 std::string("\xf2\x48\xcd\xc9\xc9\x07\x00", 7)); |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 483 EXPECT_TRUE(frames[0]->header.final); | 472 EXPECT_TRUE(frames[0]->header.final); |
| 484 EXPECT_FALSE(frames[0]->header.reserved1); | 473 EXPECT_FALSE(frames[0]->header.reserved1); |
| 485 EXPECT_EQ("Hello", ToString(frames[0])); | 474 EXPECT_EQ("Hello", ToString(frames[0])); |
| 486 } | 475 } |
| 487 | 476 |
| 488 TEST_F(WebSocketDeflateStreamTest, | 477 TEST_F(WebSocketDeflateStreamTest, |
| 489 ReadCompressedFrameFragmentImmediatelyButInflaterReturnsPending) { | 478 ReadCompressedFrameFragmentImmediatelyButInflaterReturnsPending) { |
| 490 ScopedVector<WebSocketFrame> frames_to_output; | 479 ScopedVector<WebSocketFrame> frames_to_output; |
| 491 const std::string data1("\xf2", 1); | 480 const std::string data1("\xf2", 1); |
| 492 const std::string data2("\x48\xcd\xc9\xc9\x07\x00", 6); | 481 const std::string data2("\x48\xcd\xc9\xc9\x07\x00", 6); |
| 493 AppendTo(&frames_to_output, | 482 AppendTo( |
| 494 WebSocketFrameHeader::kOpCodeText, | 483 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kReserved1, data1); |
| 495 kReserved1, | |
| 496 data1); | |
| 497 ReadFramesStub stub1(OK, &frames_to_output), stub2(ERR_IO_PENDING); | 484 ReadFramesStub stub1(OK, &frames_to_output), stub2(ERR_IO_PENDING); |
| 498 MockCallback mock_callback, checkpoint; | 485 MockCallback mock_callback, checkpoint; |
| 499 CompletionCallback callback = | 486 CompletionCallback callback = |
| 500 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); | 487 base::Bind(&MockCallback::Call, base::Unretained(&mock_callback)); |
| 501 ScopedVector<WebSocketFrame> frames; | 488 ScopedVector<WebSocketFrame> frames; |
| 502 | 489 |
| 503 { | 490 { |
| 504 InSequence s; | 491 InSequence s; |
| 505 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 492 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 506 .WillOnce(Invoke(&stub1, &ReadFramesStub::Call)) | 493 .WillOnce(Invoke(&stub1, &ReadFramesStub::Call)) |
| 507 .WillOnce(Invoke(&stub2, &ReadFramesStub::Call)); | 494 .WillOnce(Invoke(&stub2, &ReadFramesStub::Call)); |
| 508 EXPECT_CALL(checkpoint, Call(0)); | 495 EXPECT_CALL(checkpoint, Call(0)); |
| 509 EXPECT_CALL(mock_callback, Call(OK)); | 496 EXPECT_CALL(mock_callback, Call(OK)); |
| 510 } | 497 } |
| 511 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); | 498 ASSERT_EQ(ERR_IO_PENDING, deflate_stream_->ReadFrames(&frames, callback)); |
| 512 ASSERT_EQ(0u, frames.size()); | 499 ASSERT_EQ(0u, frames.size()); |
| 513 | 500 |
| 514 AppendTo(stub2.frames_passed(), | 501 AppendTo( |
| 515 WebSocketFrameHeader::kOpCodeText, | 502 stub2.frames_passed(), WebSocketFrameHeader::kOpCodeText, kFinal, data2); |
| 516 kFinal, | |
| 517 data2); | |
| 518 | 503 |
| 519 checkpoint.Call(0); | 504 checkpoint.Call(0); |
| 520 stub2.callback().Run(OK); | 505 stub2.callback().Run(OK); |
| 521 | 506 |
| 522 ASSERT_EQ(1u, frames.size()); | 507 ASSERT_EQ(1u, frames.size()); |
| 523 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 508 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
| 524 EXPECT_TRUE(frames[0]->header.final); | 509 EXPECT_TRUE(frames[0]->header.final); |
| 525 EXPECT_FALSE(frames[0]->header.reserved1); | 510 EXPECT_FALSE(frames[0]->header.reserved1); |
| 526 EXPECT_EQ("Hello", ToString(frames[0])); | 511 EXPECT_EQ("Hello", ToString(frames[0])); |
| 527 } | 512 } |
| (...skipping 16 matching lines...) Expand all Loading... |
| 544 } | 529 } |
| 545 ASSERT_EQ(ERR_WS_PROTOCOL_ERROR, | 530 ASSERT_EQ(ERR_WS_PROTOCOL_ERROR, |
| 546 deflate_stream_->ReadFrames(&frames, callback)); | 531 deflate_stream_->ReadFrames(&frames, callback)); |
| 547 ASSERT_EQ(0u, frames.size()); | 532 ASSERT_EQ(0u, frames.size()); |
| 548 } | 533 } |
| 549 | 534 |
| 550 TEST_F(WebSocketDeflateStreamTest, MergeMultipleFramesInReadFrames) { | 535 TEST_F(WebSocketDeflateStreamTest, MergeMultipleFramesInReadFrames) { |
| 551 const std::string data1("\xf2\x48\xcd", 3); | 536 const std::string data1("\xf2\x48\xcd", 3); |
| 552 const std::string data2("\xc9\xc9\x07\x00", 4); | 537 const std::string data2("\xc9\xc9\x07\x00", 4); |
| 553 ScopedVector<WebSocketFrame> frames_to_output; | 538 ScopedVector<WebSocketFrame> frames_to_output; |
| 554 AppendTo(&frames_to_output, | 539 AppendTo( |
| 555 WebSocketFrameHeader::kOpCodeText, | 540 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kReserved1, data1); |
| 556 kReserved1, | |
| 557 data1); | |
| 558 AppendTo(&frames_to_output, | 541 AppendTo(&frames_to_output, |
| 559 WebSocketFrameHeader::kOpCodeContinuation, | 542 WebSocketFrameHeader::kOpCodeContinuation, |
| 560 kFinal, | 543 kFinal, |
| 561 data2); | 544 data2); |
| 562 ReadFramesStub stub(OK, &frames_to_output); | 545 ReadFramesStub stub(OK, &frames_to_output); |
| 563 CompletionCallback callback; | 546 CompletionCallback callback; |
| 564 ScopedVector<WebSocketFrame> frames; | 547 ScopedVector<WebSocketFrame> frames; |
| 565 | 548 |
| 566 { | 549 { |
| 567 InSequence s; | 550 InSequence s; |
| 568 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 551 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 569 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 552 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 570 } | 553 } |
| 571 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 554 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); |
| 572 ASSERT_EQ(1u, frames.size()); | 555 ASSERT_EQ(1u, frames.size()); |
| 573 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 556 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
| 574 EXPECT_TRUE(frames[0]->header.final); | 557 EXPECT_TRUE(frames[0]->header.final); |
| 575 EXPECT_FALSE(frames[0]->header.reserved1); | 558 EXPECT_FALSE(frames[0]->header.reserved1); |
| 576 EXPECT_EQ("Hello", ToString(frames[0])); | 559 EXPECT_EQ("Hello", ToString(frames[0])); |
| 577 } | 560 } |
| 578 | 561 |
| 579 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedEmptyFrames) { | 562 TEST_F(WebSocketDeflateStreamTest, ReadUncompressedEmptyFrames) { |
| 580 ScopedVector<WebSocketFrame> frames_to_output; | 563 ScopedVector<WebSocketFrame> frames_to_output; |
| 581 AppendTo(&frames_to_output, | 564 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodeText, kNoFlag); |
| 582 WebSocketFrameHeader::kOpCodeText, | 565 AppendTo( |
| 583 kNoFlag); | 566 &frames_to_output, WebSocketFrameHeader::kOpCodeContinuation, kFinal); |
| 584 AppendTo(&frames_to_output, | |
| 585 WebSocketFrameHeader::kOpCodeContinuation, | |
| 586 kFinal); | |
| 587 ReadFramesStub stub(OK, &frames_to_output); | 567 ReadFramesStub stub(OK, &frames_to_output); |
| 588 CompletionCallback callback; | 568 CompletionCallback callback; |
| 589 ScopedVector<WebSocketFrame> frames; | 569 ScopedVector<WebSocketFrame> frames; |
| 590 | 570 |
| 591 { | 571 { |
| 592 InSequence s; | 572 InSequence s; |
| 593 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 573 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 594 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 574 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 595 } | 575 } |
| 596 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 576 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); |
| 597 ASSERT_EQ(2u, frames.size()); | 577 ASSERT_EQ(2u, frames.size()); |
| 598 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 578 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
| 599 EXPECT_FALSE(frames[0]->header.final); | 579 EXPECT_FALSE(frames[0]->header.final); |
| 600 EXPECT_FALSE(frames[0]->header.reserved1); | 580 EXPECT_FALSE(frames[0]->header.reserved1); |
| 601 EXPECT_EQ("", ToString(frames[0])); | 581 EXPECT_EQ("", ToString(frames[0])); |
| 602 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, | 582 EXPECT_EQ(WebSocketFrameHeader::kOpCodeContinuation, |
| 603 frames[1]->header.opcode); | 583 frames[1]->header.opcode); |
| 604 EXPECT_TRUE(frames[1]->header.final); | 584 EXPECT_TRUE(frames[1]->header.final); |
| 605 EXPECT_FALSE(frames[1]->header.reserved1); | 585 EXPECT_FALSE(frames[1]->header.reserved1); |
| 606 EXPECT_EQ("", ToString(frames[1])); | 586 EXPECT_EQ("", ToString(frames[1])); |
| 607 } | 587 } |
| 608 | 588 |
| 609 TEST_F(WebSocketDeflateStreamTest, ReadCompressedEmptyFrames) { | 589 TEST_F(WebSocketDeflateStreamTest, ReadCompressedEmptyFrames) { |
| 610 ScopedVector<WebSocketFrame> frames_to_output; | 590 ScopedVector<WebSocketFrame> frames_to_output; |
| 611 AppendTo(&frames_to_output, | 591 AppendTo(&frames_to_output, |
| 612 WebSocketFrameHeader::kOpCodeText, | 592 WebSocketFrameHeader::kOpCodeText, |
| 613 kReserved1, | 593 kReserved1, |
| 614 std::string("\x02\x00", 1)); | 594 std::string("\x02\x00", 1)); |
| 615 AppendTo(&frames_to_output, | 595 AppendTo( |
| 616 WebSocketFrameHeader::kOpCodeContinuation, | 596 &frames_to_output, WebSocketFrameHeader::kOpCodeContinuation, kFinal); |
| 617 kFinal); | |
| 618 ReadFramesStub stub(OK, &frames_to_output); | 597 ReadFramesStub stub(OK, &frames_to_output); |
| 619 CompletionCallback callback; | 598 CompletionCallback callback; |
| 620 ScopedVector<WebSocketFrame> frames; | 599 ScopedVector<WebSocketFrame> frames; |
| 621 | 600 |
| 622 { | 601 { |
| 623 InSequence s; | 602 InSequence s; |
| 624 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 603 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 625 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 604 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 626 } | 605 } |
| 627 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 606 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); |
| 628 ASSERT_EQ(1u, frames.size()); | 607 ASSERT_EQ(1u, frames.size()); |
| 629 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 608 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
| 630 EXPECT_TRUE(frames[0]->header.final); | 609 EXPECT_TRUE(frames[0]->header.final); |
| 631 EXPECT_FALSE(frames[0]->header.reserved1); | 610 EXPECT_FALSE(frames[0]->header.reserved1); |
| 632 EXPECT_EQ("", ToString(frames[0])); | 611 EXPECT_EQ("", ToString(frames[0])); |
| 633 } | 612 } |
| 634 | 613 |
| 635 TEST_F(WebSocketDeflateStreamTest, | 614 TEST_F(WebSocketDeflateStreamTest, ReadCompressedFrameFollowedByEmptyFrame) { |
| 636 ReadCompressedFrameFollowedByEmptyFrame) { | |
| 637 const std::string data("\xf2\x48\xcd\xc9\xc9\x07\x00", 7); | 615 const std::string data("\xf2\x48\xcd\xc9\xc9\x07\x00", 7); |
| 638 ScopedVector<WebSocketFrame> frames_to_output; | 616 ScopedVector<WebSocketFrame> frames_to_output; |
| 639 AppendTo(&frames_to_output, | 617 AppendTo( |
| 640 WebSocketFrameHeader::kOpCodeText, | 618 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kReserved1, data); |
| 641 kReserved1, | 619 AppendTo( |
| 642 data); | 620 &frames_to_output, WebSocketFrameHeader::kOpCodeContinuation, kFinal); |
| 643 AppendTo(&frames_to_output, | |
| 644 WebSocketFrameHeader::kOpCodeContinuation, | |
| 645 kFinal); | |
| 646 ReadFramesStub stub(OK, &frames_to_output); | 621 ReadFramesStub stub(OK, &frames_to_output); |
| 647 CompletionCallback callback; | 622 CompletionCallback callback; |
| 648 ScopedVector<WebSocketFrame> frames; | 623 ScopedVector<WebSocketFrame> frames; |
| 649 | 624 |
| 650 { | 625 { |
| 651 InSequence s; | 626 InSequence s; |
| 652 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 627 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 653 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 628 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 654 } | 629 } |
| 655 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 630 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); |
| 656 ASSERT_EQ(1u, frames.size()); | 631 ASSERT_EQ(1u, frames.size()); |
| 657 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); | 632 EXPECT_EQ(WebSocketFrameHeader::kOpCodeText, frames[0]->header.opcode); |
| 658 EXPECT_TRUE(frames[0]->header.final); | 633 EXPECT_TRUE(frames[0]->header.final); |
| 659 EXPECT_FALSE(frames[0]->header.reserved1); | 634 EXPECT_FALSE(frames[0]->header.reserved1); |
| 660 EXPECT_EQ("Hello", ToString(frames[0])); | 635 EXPECT_EQ("Hello", ToString(frames[0])); |
| 661 } | 636 } |
| 662 | 637 |
| 663 TEST_F(WebSocketDeflateStreamTest, ReadControlFrameBetweenDataFrames) { | 638 TEST_F(WebSocketDeflateStreamTest, ReadControlFrameBetweenDataFrames) { |
| 664 const std::string data1("\xf2\x48\xcd", 3); | 639 const std::string data1("\xf2\x48\xcd", 3); |
| 665 const std::string data2("\xc9\xc9\x07\x00", 4); | 640 const std::string data2("\xc9\xc9\x07\x00", 4); |
| 666 ScopedVector<WebSocketFrame> frames_to_output; | 641 ScopedVector<WebSocketFrame> frames_to_output; |
| 667 AppendTo(&frames_to_output, | 642 AppendTo( |
| 668 WebSocketFrameHeader::kOpCodeText, | 643 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kReserved1, data1); |
| 669 kReserved1, | |
| 670 data1); | |
| 671 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodePing, kFinal); | 644 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodePing, kFinal); |
| 672 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodeText, kFinal, data2); | 645 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodeText, kFinal, data2); |
| 673 ReadFramesStub stub(OK, &frames_to_output); | 646 ReadFramesStub stub(OK, &frames_to_output); |
| 674 CompletionCallback callback; | 647 CompletionCallback callback; |
| 675 ScopedVector<WebSocketFrame> frames; | 648 ScopedVector<WebSocketFrame> frames; |
| 676 | 649 |
| 677 { | 650 { |
| 678 InSequence s; | 651 InSequence s; |
| 679 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 652 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 680 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 653 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| (...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 738 deflater.Initialize(kWindowBits); | 711 deflater.Initialize(kWindowBits); |
| 739 const std::string original_data(kChunkSize, 'a'); | 712 const std::string original_data(kChunkSize, 'a'); |
| 740 deflater.AddBytes(original_data.data(), original_data.size()); | 713 deflater.AddBytes(original_data.data(), original_data.size()); |
| 741 deflater.Finish(); | 714 deflater.Finish(); |
| 742 | 715 |
| 743 ScopedVector<WebSocketFrame> frames_to_output; | 716 ScopedVector<WebSocketFrame> frames_to_output; |
| 744 AppendTo(&frames_to_output, | 717 AppendTo(&frames_to_output, |
| 745 WebSocketFrameHeader::kOpCodeBinary, | 718 WebSocketFrameHeader::kOpCodeBinary, |
| 746 kReserved1, | 719 kReserved1, |
| 747 ToString(deflater.GetOutput(deflater.CurrentOutputSize()))); | 720 ToString(deflater.GetOutput(deflater.CurrentOutputSize()))); |
| 748 AppendTo(&frames_to_output, | 721 AppendTo(&frames_to_output, WebSocketFrameHeader::kOpCodeBinary, kFinal, ""); |
| 749 WebSocketFrameHeader::kOpCodeBinary, | |
| 750 kFinal, | |
| 751 ""); | |
| 752 | 722 |
| 753 ReadFramesStub stub(OK, &frames_to_output); | 723 ReadFramesStub stub(OK, &frames_to_output); |
| 754 CompletionCallback callback; | 724 CompletionCallback callback; |
| 755 ScopedVector<WebSocketFrame> frames; | 725 ScopedVector<WebSocketFrame> frames; |
| 756 { | 726 { |
| 757 InSequence s; | 727 InSequence s; |
| 758 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 728 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 759 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 729 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 760 } | 730 } |
| 761 | 731 |
| (...skipping 10 matching lines...) Expand all Loading... |
| 772 EXPECT_FALSE(frames[1]->header.reserved1); | 742 EXPECT_FALSE(frames[1]->header.reserved1); |
| 773 EXPECT_EQ(0u, static_cast<size_t>(frames[1]->header.payload_length)); | 743 EXPECT_EQ(0u, static_cast<size_t>(frames[1]->header.payload_length)); |
| 774 EXPECT_EQ(original_data, ToString(frames[0]) + ToString(frames[1])); | 744 EXPECT_EQ(original_data, ToString(frames[0]) + ToString(frames[1])); |
| 775 } | 745 } |
| 776 | 746 |
| 777 TEST_F(WebSocketDeflateStreamTest, | 747 TEST_F(WebSocketDeflateStreamTest, |
| 778 Reserved1TurnsOnDuringReadingCompressedContinuationFrame) { | 748 Reserved1TurnsOnDuringReadingCompressedContinuationFrame) { |
| 779 const std::string data1("\xf2\x48\xcd", 3); | 749 const std::string data1("\xf2\x48\xcd", 3); |
| 780 const std::string data2("\xc9\xc9\x07\x00", 4); | 750 const std::string data2("\xc9\xc9\x07\x00", 4); |
| 781 ScopedVector<WebSocketFrame> frames_to_output; | 751 ScopedVector<WebSocketFrame> frames_to_output; |
| 782 AppendTo(&frames_to_output, | 752 AppendTo( |
| 783 WebSocketFrameHeader::kOpCodeText, | 753 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kReserved1, data1); |
| 784 kReserved1, | |
| 785 data1); | |
| 786 AppendTo(&frames_to_output, | 754 AppendTo(&frames_to_output, |
| 787 WebSocketFrameHeader::kOpCodeContinuation, | 755 WebSocketFrameHeader::kOpCodeContinuation, |
| 788 kFinal | kReserved1, | 756 kFinal | kReserved1, |
| 789 data2); | 757 data2); |
| 790 ReadFramesStub stub(OK, &frames_to_output); | 758 ReadFramesStub stub(OK, &frames_to_output); |
| 791 CompletionCallback callback; | 759 CompletionCallback callback; |
| 792 ScopedVector<WebSocketFrame> frames; | 760 ScopedVector<WebSocketFrame> frames; |
| 793 | 761 |
| 794 { | 762 { |
| 795 InSequence s; | 763 InSequence s; |
| 796 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 764 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 797 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 765 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 798 } | 766 } |
| 799 ASSERT_EQ(ERR_WS_PROTOCOL_ERROR, | 767 ASSERT_EQ(ERR_WS_PROTOCOL_ERROR, |
| 800 deflate_stream_->ReadFrames(&frames, callback)); | 768 deflate_stream_->ReadFrames(&frames, callback)); |
| 801 } | 769 } |
| 802 | 770 |
| 803 TEST_F(WebSocketDeflateStreamTest, | 771 TEST_F(WebSocketDeflateStreamTest, |
| 804 Reserved1TurnsOnDuringReadingUncompressedContinuationFrame) { | 772 Reserved1TurnsOnDuringReadingUncompressedContinuationFrame) { |
| 805 ScopedVector<WebSocketFrame> frames_to_output; | 773 ScopedVector<WebSocketFrame> frames_to_output; |
| 806 AppendTo(&frames_to_output, | 774 AppendTo( |
| 807 WebSocketFrameHeader::kOpCodeText, | 775 &frames_to_output, WebSocketFrameHeader::kOpCodeText, kNoFlag, "hello"); |
| 808 kNoFlag, | |
| 809 "hello"); | |
| 810 AppendTo(&frames_to_output, | 776 AppendTo(&frames_to_output, |
| 811 WebSocketFrameHeader::kOpCodeContinuation, | 777 WebSocketFrameHeader::kOpCodeContinuation, |
| 812 kFinal | kReserved1, | 778 kFinal | kReserved1, |
| 813 "world"); | 779 "world"); |
| 814 ReadFramesStub stub(OK, &frames_to_output); | 780 ReadFramesStub stub(OK, &frames_to_output); |
| 815 CompletionCallback callback; | 781 CompletionCallback callback; |
| 816 ScopedVector<WebSocketFrame> frames; | 782 ScopedVector<WebSocketFrame> frames; |
| 817 | 783 |
| 818 { | 784 { |
| 819 InSequence s; | 785 InSequence s; |
| 820 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 786 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 821 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 787 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 822 } | 788 } |
| 823 ASSERT_EQ(ERR_WS_PROTOCOL_ERROR, | 789 ASSERT_EQ(ERR_WS_PROTOCOL_ERROR, |
| 824 deflate_stream_->ReadFrames(&frames, callback)); | 790 deflate_stream_->ReadFrames(&frames, callback)); |
| 825 } | 791 } |
| 826 | 792 |
| 827 TEST_F(WebSocketDeflateStreamTest, ReadCompressedMessages) { | 793 TEST_F(WebSocketDeflateStreamTest, ReadCompressedMessages) { |
| 828 ScopedVector<WebSocketFrame> frames_to_output; | 794 ScopedVector<WebSocketFrame> frames_to_output; |
| 795 AppendTo( |
| 796 &frames_to_output, |
| 797 WebSocketFrameHeader::kOpCodeText, |
| 798 kFinal | kReserved1, |
| 799 std::string("\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x31\x04\x00", 13)); |
| 829 AppendTo(&frames_to_output, | 800 AppendTo(&frames_to_output, |
| 830 WebSocketFrameHeader::kOpCodeText, | 801 WebSocketFrameHeader::kOpCodeText, |
| 831 kFinal | kReserved1, | 802 kFinal | kReserved1, |
| 832 std::string( | |
| 833 "\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x31\x04\x00", 13)); | |
| 834 AppendTo(&frames_to_output, | |
| 835 WebSocketFrameHeader::kOpCodeText, | |
| 836 kFinal | kReserved1, | |
| 837 std::string("\x4a\x86\x33\x8d\x00\x00", 6)); | 803 std::string("\x4a\x86\x33\x8d\x00\x00", 6)); |
| 838 ReadFramesStub stub(OK, &frames_to_output); | 804 ReadFramesStub stub(OK, &frames_to_output); |
| 839 CompletionCallback callback; | 805 CompletionCallback callback; |
| 840 ScopedVector<WebSocketFrame> frames; | 806 ScopedVector<WebSocketFrame> frames; |
| 841 | 807 |
| 842 { | 808 { |
| 843 InSequence s; | 809 InSequence s; |
| 844 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 810 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 845 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 811 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 846 } | 812 } |
| (...skipping 39 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 886 EXPECT_FALSE(frames[1]->header.reserved1); | 852 EXPECT_FALSE(frames[1]->header.reserved1); |
| 887 EXPECT_EQ("uncompressed2", ToString(frames[1])); | 853 EXPECT_EQ("uncompressed2", ToString(frames[1])); |
| 888 } | 854 } |
| 889 | 855 |
| 890 TEST_F(WebSocketDeflateStreamTest, | 856 TEST_F(WebSocketDeflateStreamTest, |
| 891 ReadCompressedMessageThenUncompressedMessage) { | 857 ReadCompressedMessageThenUncompressedMessage) { |
| 892 ScopedVector<WebSocketFrame> frames_to_output; | 858 ScopedVector<WebSocketFrame> frames_to_output; |
| 893 AppendTo(&frames_to_output, | 859 AppendTo(&frames_to_output, |
| 894 WebSocketFrameHeader::kOpCodeText, | 860 WebSocketFrameHeader::kOpCodeText, |
| 895 kFinal | kReserved1, | 861 kFinal | kReserved1, |
| 896 std::string( | 862 std::string("\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x01\x00", 12)); |
| 897 "\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x01\x00", 12)); | |
| 898 AppendTo(&frames_to_output, | 863 AppendTo(&frames_to_output, |
| 899 WebSocketFrameHeader::kOpCodeText, | 864 WebSocketFrameHeader::kOpCodeText, |
| 900 kFinal, | 865 kFinal, |
| 901 "uncompressed"); | 866 "uncompressed"); |
| 902 ReadFramesStub stub(OK, &frames_to_output); | 867 ReadFramesStub stub(OK, &frames_to_output); |
| 903 CompletionCallback callback; | 868 CompletionCallback callback; |
| 904 ScopedVector<WebSocketFrame> frames; | 869 ScopedVector<WebSocketFrame> frames; |
| 905 | 870 |
| 906 { | 871 { |
| 907 InSequence s; | 872 InSequence s; |
| (...skipping 15 matching lines...) Expand all Loading... |
| 923 TEST_F(WebSocketDeflateStreamTest, | 888 TEST_F(WebSocketDeflateStreamTest, |
| 924 ReadUncompressedMessageThenCompressedMessage) { | 889 ReadUncompressedMessageThenCompressedMessage) { |
| 925 ScopedVector<WebSocketFrame> frames_to_output; | 890 ScopedVector<WebSocketFrame> frames_to_output; |
| 926 AppendTo(&frames_to_output, | 891 AppendTo(&frames_to_output, |
| 927 WebSocketFrameHeader::kOpCodeText, | 892 WebSocketFrameHeader::kOpCodeText, |
| 928 kFinal, | 893 kFinal, |
| 929 "uncompressed"); | 894 "uncompressed"); |
| 930 AppendTo(&frames_to_output, | 895 AppendTo(&frames_to_output, |
| 931 WebSocketFrameHeader::kOpCodeText, | 896 WebSocketFrameHeader::kOpCodeText, |
| 932 kFinal | kReserved1, | 897 kFinal | kReserved1, |
| 933 std::string( | 898 std::string("\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x01\x00", 12)); |
| 934 "\x4a\xce\xcf\x2d\x28\x4a\x2d\x2e\x4e\x4d\x01\x00", 12)); | |
| 935 ReadFramesStub stub(OK, &frames_to_output); | 899 ReadFramesStub stub(OK, &frames_to_output); |
| 936 CompletionCallback callback; | 900 CompletionCallback callback; |
| 937 ScopedVector<WebSocketFrame> frames; | 901 ScopedVector<WebSocketFrame> frames; |
| 938 | 902 |
| 939 { | 903 { |
| 940 InSequence s; | 904 InSequence s; |
| 941 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) | 905 EXPECT_CALL(*mock_stream_, ReadFrames(&frames, _)) |
| 942 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); | 906 .WillOnce(Invoke(&stub, &ReadFramesStub::Call)); |
| 943 } | 907 } |
| 944 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); | 908 ASSERT_EQ(OK, deflate_stream_->ReadFrames(&frames, callback)); |
| (...skipping 367 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 1312 AddCompressibleFrameString(); | 1276 AddCompressibleFrameString(); |
| 1313 WriteFramesStub stub(predictor_, OK); | 1277 WriteFramesStub stub(predictor_, OK); |
| 1314 { | 1278 { |
| 1315 InSequence s; | 1279 InSequence s; |
| 1316 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) | 1280 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) |
| 1317 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1281 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
| 1318 } | 1282 } |
| 1319 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames_, callback)); | 1283 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames_, callback)); |
| 1320 const ScopedVector<WebSocketFrame>& frames_passed = *stub.frames(); | 1284 const ScopedVector<WebSocketFrame>& frames_passed = *stub.frames(); |
| 1321 ASSERT_EQ(1u, frames_passed.size()); | 1285 ASSERT_EQ(1u, frames_passed.size()); |
| 1322 EXPECT_EQ(std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x39\xa3" | 1286 EXPECT_EQ(std::string( |
| 1323 "(?7\xb3\x34\x17\x00", 21), | 1287 "r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x39\xa3" |
| 1288 "(?7\xb3\x34\x17\x00", |
| 1289 21), |
| 1324 ToString(frames_passed[0])); | 1290 ToString(frames_passed[0])); |
| 1325 } | 1291 } |
| 1326 | 1292 |
| 1327 // The same input with window_bits=10 returns smaller output. | 1293 // The same input with window_bits=10 returns smaller output. |
| 1328 TEST_F(WebSocketDeflateStreamWithClientWindowBitsTest, WindowBits10) { | 1294 TEST_F(WebSocketDeflateStreamWithClientWindowBitsTest, WindowBits10) { |
| 1329 SetUpWithWindowBits(10); | 1295 SetUpWithWindowBits(10); |
| 1330 CompletionCallback callback; | 1296 CompletionCallback callback; |
| 1331 AddCompressibleFrameString(); | 1297 AddCompressibleFrameString(); |
| 1332 WriteFramesStub stub(predictor_, OK); | 1298 WriteFramesStub stub(predictor_, OK); |
| 1333 { | 1299 { |
| 1334 InSequence s; | 1300 InSequence s; |
| 1335 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) | 1301 EXPECT_CALL(*mock_stream_, WriteFrames(_, _)) |
| 1336 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); | 1302 .WillOnce(Invoke(&stub, &WriteFramesStub::Call)); |
| 1337 } | 1303 } |
| 1338 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames_, callback)); | 1304 ASSERT_EQ(OK, deflate_stream_->WriteFrames(&frames_, callback)); |
| 1339 const ScopedVector<WebSocketFrame>& frames_passed = *stub.frames(); | 1305 const ScopedVector<WebSocketFrame>& frames_passed = *stub.frames(); |
| 1340 ASSERT_EQ(1u, frames_passed.size()); | 1306 ASSERT_EQ(1u, frames_passed.size()); |
| 1341 EXPECT_EQ( | 1307 EXPECT_EQ( |
| 1342 std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x19\x1a\x0e\0\0", 17), | 1308 std::string("r\xce(\xca\xcf\xcd,\xcdM\x1c\xe1\xc0\x19\x1a\x0e\0\0", 17), |
| 1343 ToString(frames_passed[0])); | 1309 ToString(frames_passed[0])); |
| 1344 } | 1310 } |
| 1345 | 1311 |
| 1346 } // namespace | 1312 } // namespace |
| 1347 | 1313 |
| 1348 } // namespace net | 1314 } // namespace net |
| OLD | NEW |