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_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 Loading... |
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 Loading... |
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 |
OLD | NEW |