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 |