Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(21)

Side by Side Diff: net/websockets/websocket_stream_test.cc

Issue 158663003: [WebSocket] Fix permessage-deflate handshake failure messages. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 6 years, 10 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
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_stream.h" 5 #include "net/websockets/websocket_stream.h"
6 6
7 #include <algorithm> 7 #include <algorithm>
8 #include <string> 8 #include <string>
9 #include <utility> 9 #include <utility>
10 #include <vector> 10 #include <vector>
(...skipping 473 matching lines...) Expand 10 before | Expand all | Expand 10 after
484 failure_message()); 484 failure_message());
485 } 485 }
486 486
487 // The permessage-deflate extension may only be specified once. 487 // The permessage-deflate extension may only be specified once.
488 TEST_F(WebSocketStreamCreateExtensionTest, OnlyOnePerMessageDeflateAllowed) { 488 TEST_F(WebSocketStreamCreateExtensionTest, OnlyOnePerMessageDeflateAllowed) {
489 CreateAndConnectWithExtensions( 489 CreateAndConnectWithExtensions(
490 "permessage-deflate, permessage-deflate; client_max_window_bits=10"); 490 "permessage-deflate, permessage-deflate; client_max_window_bits=10");
491 EXPECT_FALSE(stream_); 491 EXPECT_FALSE(stream_);
492 EXPECT_TRUE(has_failed()); 492 EXPECT_TRUE(has_failed());
493 EXPECT_EQ( 493 EXPECT_EQ(
494 "Error during WebSocket handshake: Received duplicate permessage-deflate " 494 "Error during WebSocket handshake: "
495 "response", 495 "Received duplicate permessage-deflate response",
496 failure_message()); 496 failure_message());
497 } 497 }
498 498
499 // permessage-deflate parameters may not be duplicated. 499 // permessage-deflate parameters may not be duplicated.
500 TEST_F(WebSocketStreamCreateExtensionTest, NoDuplicateParameters) { 500 TEST_F(WebSocketStreamCreateExtensionTest, NoDuplicateParameters) {
501 CreateAndConnectWithExtensions( 501 CreateAndConnectWithExtensions(
502 "permessage-deflate; client_no_context_takeover; " 502 "permessage-deflate; client_no_context_takeover; "
503 "client_no_context_takeover"); 503 "client_no_context_takeover");
504 EXPECT_FALSE(stream_); 504 EXPECT_FALSE(stream_);
505 EXPECT_TRUE(has_failed()); 505 EXPECT_TRUE(has_failed());
506 EXPECT_EQ( 506 EXPECT_EQ(
507 "Error during WebSocket handshake: Received duplicate permessage-deflate " 507 "Error during WebSocket handshake: Error in permessage-deflate: "
508 "extension parameter client_no_context_takeover", 508 "Received duplicate permessage-deflate extension parameter "
509 "client_no_context_takeover",
509 failure_message()); 510 failure_message());
510 } 511 }
511 512
512 // permessage-deflate parameters must start with "client_" or "server_" 513 // permessage-deflate parameters must start with "client_" or "server_"
513 TEST_F(WebSocketStreamCreateExtensionTest, BadParameterPrefix) { 514 TEST_F(WebSocketStreamCreateExtensionTest, BadParameterPrefix) {
514 CreateAndConnectWithExtensions( 515 CreateAndConnectWithExtensions(
515 "permessage-deflate; absurd_no_context_takeover"); 516 "permessage-deflate; absurd_no_context_takeover");
516 EXPECT_FALSE(stream_); 517 EXPECT_FALSE(stream_);
517 EXPECT_TRUE(has_failed()); 518 EXPECT_TRUE(has_failed());
518 EXPECT_EQ( 519 EXPECT_EQ(
519 "Error during WebSocket handshake: Received an unexpected " 520 "Error during WebSocket handshake: Error in permessage-deflate: "
520 "permessage-deflate extension parameter", 521 "Received an unexpected permessage-deflate extension parameter",
521 failure_message()); 522 failure_message());
522 } 523 }
523 524
524 // permessage-deflate parameters must be either *_no_context_takeover or 525 // permessage-deflate parameters must be either *_no_context_takeover or
525 // *_max_window_bits 526 // *_max_window_bits
526 TEST_F(WebSocketStreamCreateExtensionTest, BadParameterSuffix) { 527 TEST_F(WebSocketStreamCreateExtensionTest, BadParameterSuffix) {
527 CreateAndConnectWithExtensions( 528 CreateAndConnectWithExtensions(
528 "permessage-deflate; client_max_content_bits=5"); 529 "permessage-deflate; client_max_content_bits=5");
529 EXPECT_FALSE(stream_); 530 EXPECT_FALSE(stream_);
530 EXPECT_TRUE(has_failed()); 531 EXPECT_TRUE(has_failed());
531 EXPECT_EQ( 532 EXPECT_EQ(
532 "Error during WebSocket handshake: Received an unexpected " 533 "Error during WebSocket handshake: Error in permessage-deflate: "
533 "permessage-deflate extension parameter", 534 "Received an unexpected permessage-deflate extension parameter",
534 failure_message()); 535 failure_message());
535 } 536 }
536 537
537 // *_no_context_takeover parameters must not have an argument 538 // *_no_context_takeover parameters must not have an argument
538 TEST_F(WebSocketStreamCreateExtensionTest, BadParameterValue) { 539 TEST_F(WebSocketStreamCreateExtensionTest, BadParameterValue) {
539 CreateAndConnectWithExtensions( 540 CreateAndConnectWithExtensions(
540 "permessage-deflate; client_no_context_takeover=true"); 541 "permessage-deflate; client_no_context_takeover=true");
541 EXPECT_FALSE(stream_); 542 EXPECT_FALSE(stream_);
542 EXPECT_TRUE(has_failed()); 543 EXPECT_TRUE(has_failed());
543 EXPECT_EQ( 544 EXPECT_EQ(
544 "Error during WebSocket handshake: Received invalid " 545 "Error during WebSocket handshake: Error in permessage-deflate: "
545 "client_no_context_takeover parameter", 546 "Received invalid client_no_context_takeover parameter",
546 failure_message()); 547 failure_message());
547 } 548 }
548 549
549 // *_max_window_bits must have an argument 550 // *_max_window_bits must have an argument
550 TEST_F(WebSocketStreamCreateExtensionTest, NoMaxWindowBitsArgument) { 551 TEST_F(WebSocketStreamCreateExtensionTest, NoMaxWindowBitsArgument) {
551 CreateAndConnectWithExtensions("permessage-deflate; client_max_window_bits"); 552 CreateAndConnectWithExtensions("permessage-deflate; client_max_window_bits");
552 EXPECT_FALSE(stream_); 553 EXPECT_FALSE(stream_);
553 EXPECT_TRUE(has_failed()); 554 EXPECT_TRUE(has_failed());
554 EXPECT_EQ( 555 EXPECT_EQ(
555 "Error during WebSocket handshake: client_max_window_bits must have " 556 "Error during WebSocket handshake: Error in permessage-deflate: "
556 "value", 557 "client_max_window_bits must have value",
557 failure_message()); 558 failure_message());
558 } 559 }
559 560
560 // *_max_window_bits must be an integer 561 // *_max_window_bits must be an integer
561 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueInteger) { 562 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueInteger) {
562 CreateAndConnectWithExtensions( 563 CreateAndConnectWithExtensions(
563 "permessage-deflate; server_max_window_bits=banana"); 564 "permessage-deflate; server_max_window_bits=banana");
564 EXPECT_FALSE(stream_); 565 EXPECT_FALSE(stream_);
565 EXPECT_TRUE(has_failed()); 566 EXPECT_TRUE(has_failed());
566 EXPECT_EQ( 567 EXPECT_EQ(
567 "Error during WebSocket handshake: Received invalid " 568 "Error during WebSocket handshake: Error in permessage-deflate: "
568 "server_max_window_bits parameter", 569 "Received invalid server_max_window_bits parameter",
569 failure_message()); 570 failure_message());
570 } 571 }
571 572
572 // *_max_window_bits must be >= 8 573 // *_max_window_bits must be >= 8
573 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueTooSmall) { 574 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueTooSmall) {
574 CreateAndConnectWithExtensions( 575 CreateAndConnectWithExtensions(
575 "permessage-deflate; server_max_window_bits=7"); 576 "permessage-deflate; server_max_window_bits=7");
576 EXPECT_FALSE(stream_); 577 EXPECT_FALSE(stream_);
577 EXPECT_TRUE(has_failed()); 578 EXPECT_TRUE(has_failed());
578 EXPECT_EQ( 579 EXPECT_EQ(
579 "Error during WebSocket handshake: Received invalid " 580 "Error during WebSocket handshake: Error in permessage-deflate: "
580 "server_max_window_bits parameter", 581 "Received invalid server_max_window_bits parameter",
581 failure_message()); 582 failure_message());
582 } 583 }
583 584
584 // *_max_window_bits must be <= 15 585 // *_max_window_bits must be <= 15
585 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueTooBig) { 586 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueTooBig) {
586 CreateAndConnectWithExtensions( 587 CreateAndConnectWithExtensions(
587 "permessage-deflate; client_max_window_bits=16"); 588 "permessage-deflate; client_max_window_bits=16");
588 EXPECT_FALSE(stream_); 589 EXPECT_FALSE(stream_);
589 EXPECT_TRUE(has_failed()); 590 EXPECT_TRUE(has_failed());
590 EXPECT_EQ( 591 EXPECT_EQ(
591 "Error during WebSocket handshake: Received invalid " 592 "Error during WebSocket handshake: Error in permessage-deflate: "
592 "client_max_window_bits parameter", 593 "Received invalid client_max_window_bits parameter",
593 failure_message()); 594 failure_message());
594 } 595 }
595 596
596 // *_max_window_bits must not start with 0 597 // *_max_window_bits must not start with 0
597 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueStartsWithZero) { 598 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueStartsWithZero) {
598 CreateAndConnectWithExtensions( 599 CreateAndConnectWithExtensions(
599 "permessage-deflate; client_max_window_bits=08"); 600 "permessage-deflate; client_max_window_bits=08");
600 EXPECT_FALSE(stream_); 601 EXPECT_FALSE(stream_);
601 EXPECT_TRUE(has_failed()); 602 EXPECT_TRUE(has_failed());
602 EXPECT_EQ( 603 EXPECT_EQ(
603 "Error during WebSocket handshake: Received invalid " 604 "Error during WebSocket handshake: Error in permessage-deflate: "
604 "client_max_window_bits parameter", 605 "Received invalid client_max_window_bits parameter",
605 failure_message()); 606 failure_message());
606 } 607 }
607 608
608 // *_max_window_bits must not start with + 609 // *_max_window_bits must not start with +
609 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueStartsWithPlus) { 610 TEST_F(WebSocketStreamCreateExtensionTest, MaxWindowBitsValueStartsWithPlus) {
610 CreateAndConnectWithExtensions( 611 CreateAndConnectWithExtensions(
611 "permessage-deflate; server_max_window_bits=+9"); 612 "permessage-deflate; server_max_window_bits=+9");
612 EXPECT_FALSE(stream_); 613 EXPECT_FALSE(stream_);
613 EXPECT_TRUE(has_failed()); 614 EXPECT_TRUE(has_failed());
614 EXPECT_EQ( 615 EXPECT_EQ(
615 "Error during WebSocket handshake: Received invalid " 616 "Error during WebSocket handshake: Error in permessage-deflate: "
616 "server_max_window_bits parameter", 617 "Received invalid server_max_window_bits parameter",
617 failure_message()); 618 failure_message());
618 } 619 }
619 620
620 // TODO(ricea): Check that WebSocketDeflateStream is initialised with the 621 // TODO(ricea): Check that WebSocketDeflateStream is initialised with the
621 // arguments from the server. This is difficult because the data written to the 622 // arguments from the server. This is difficult because the data written to the
622 // socket is randomly masked. 623 // socket is randomly masked.
623 624
624 // Additional Sec-WebSocket-Accept headers should be rejected. 625 // Additional Sec-WebSocket-Accept headers should be rejected.
625 TEST_F(WebSocketStreamCreateTest, DoubleAccept) { 626 TEST_F(WebSocketStreamCreateTest, DoubleAccept) {
626 CreateAndConnectStandard( 627 CreateAndConnectStandard(
(...skipping 373 matching lines...) Expand 10 before | Expand all | Expand 10 after
1000 socket_data->RunFor(2); 1001 socket_data->RunFor(2);
1001 EXPECT_TRUE(has_failed()); 1002 EXPECT_TRUE(has_failed());
1002 EXPECT_FALSE(stream_); 1003 EXPECT_FALSE(stream_);
1003 EXPECT_FALSE(response_info_); 1004 EXPECT_FALSE(response_info_);
1004 EXPECT_EQ("Connection closed before receiving a handshake response", 1005 EXPECT_EQ("Connection closed before receiving a handshake response",
1005 failure_message()); 1006 failure_message());
1006 } 1007 }
1007 1008
1008 } // namespace 1009 } // namespace
1009 } // namespace net 1010 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698