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

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

Issue 10843050: WebSocket over SPDY: handshake support for both of SPDY/2 and SPDY/3 (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: rebase for landing Created 8 years, 4 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 | Annotate | Revision Log
OLDNEW
1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2012 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_handshake_handler.h" 5 #include "net/websockets/websocket_handshake_handler.h"
6 6
7 #include <string> 7 #include <string>
8 #include <vector> 8 #include <vector>
9 9
10 #include "base/basictypes.h" 10 #include "base/basictypes.h"
(...skipping 448 matching lines...) Expand 10 before | Expand all | Expand 10 after
459 "HTTP/1.1 101 Switching Protocols\r\n" 459 "HTTP/1.1 101 Switching Protocols\r\n"
460 "Upgrade: websocket\r\n" 460 "Upgrade: websocket\r\n"
461 "Connection: Upgrade\r\n" 461 "Connection: Upgrade\r\n"
462 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n" 462 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
463 "Sec-WebSocket-Protocol: sample\r\n" 463 "Sec-WebSocket-Protocol: sample\r\n"
464 "\r\n"; 464 "\r\n";
465 465
466 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse()); 466 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
467 } 467 }
468 468
469 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponse) {
470 WebSocketHandshakeRequestHandler request_handler;
471
472 static const char kHandshakeRequestMessage[] =
473 "GET /demo HTTP/1.1\r\n"
474 "Host: example.com\r\n"
475 "Upgrade: websocket\r\n"
476 "Connection: Upgrade\r\n"
477 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
478 "Origin: http://example.com\r\n"
479 "Sec-WebSocket-Protocol: sample\r\n"
480 "Sec-WebSocket-Extensions: foo\r\n"
481 "Sec-WebSocket-Version: 13\r\n"
482 "\r\n";
483
484 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
485 strlen(kHandshakeRequestMessage)));
486 EXPECT_EQ(13, request_handler.protocol_version());
487
488 GURL url("ws://example.com/demo");
489 std::string challenge;
490 SpdyHeaderBlock headers;
491 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
492
493 EXPECT_EQ(url.path(), headers["path"]);
494 EXPECT_TRUE(headers.find("upgrade") == headers.end());
495 EXPECT_TRUE(headers.find("Upgrade") == headers.end());
496 EXPECT_TRUE(headers.find("connection") == headers.end());
497 EXPECT_TRUE(headers.find("Connection") == headers.end());
498 EXPECT_TRUE(headers.find("Sec-WebSocket-Key") == headers.end());
499 EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end());
500 EXPECT_TRUE(headers.find("Sec-WebSocket-Version") == headers.end());
501 EXPECT_TRUE(headers.find("sec-webSocket-version") == headers.end());
502 EXPECT_EQ("example.com", headers["host"]);
503 EXPECT_EQ("http://example.com", headers["origin"]);
504 EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
505 EXPECT_EQ("foo", headers["sec-websocket-extensions"]);
506 EXPECT_EQ("ws", headers["scheme"]);
507 EXPECT_EQ("WebSocket/13", headers["version"]);
508
509 const char expected_challenge[] = "dGhlIHNhbXBsZSBub25jZQ==";
510
511 EXPECT_EQ(expected_challenge, challenge);
512
513 headers.clear();
514
515 headers["status"] = "101 Switching Protocols";
516 headers["sec-websocket-protocol"] = "sample";
517 headers["sec-websocket-extensions"] = "foo";
518
519 WebSocketHandshakeResponseHandler response_handler;
520 response_handler.set_protocol_version(13);
521 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
522 EXPECT_TRUE(response_handler.HasResponse());
523
524 // Note that order of sec-websocket-* is sensitive with hash_map order.
525 static const char kHandshakeResponseExpectedMessage[] =
526 "HTTP/1.1 101 Switching Protocols\r\n"
527 "Upgrade: websocket\r\n"
528 "Connection: Upgrade\r\n"
529 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
530 "sec-websocket-extensions: foo\r\n"
531 "sec-websocket-protocol: sample\r\n"
532 "\r\n";
533
534 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
535 }
536
537 TEST(WebSocketHandshakeHandlerTest, SpdyRequestResponseWithCookies) {
538 WebSocketHandshakeRequestHandler request_handler;
539
540 // Note that websocket won't use multiple headers in request now.
541 static const char kHandshakeRequestMessage[] =
542 "GET /demo HTTP/1.1\r\n"
543 "Host: example.com\r\n"
544 "Upgrade: websocket\r\n"
545 "Connection: Upgrade\r\n"
546 "Sec-WebSocket-Key: dGhlIHNhbXBsZSBub25jZQ==\r\n"
547 "Origin: http://example.com\r\n"
548 "Sec-WebSocket-Protocol: sample\r\n"
549 "Sec-WebSocket-Extensions: foo\r\n"
550 "Sec-WebSocket-Version: 13\r\n"
551 "Cookie: WK-websocket-test=1; WK-websocket-test-httponly=1\r\n"
552 "\r\n";
553
554 EXPECT_TRUE(request_handler.ParseRequest(kHandshakeRequestMessage,
555 strlen(kHandshakeRequestMessage)));
556 EXPECT_EQ(13, request_handler.protocol_version());
557
558 GURL url("ws://example.com/demo");
559 std::string challenge;
560 SpdyHeaderBlock headers;
561 ASSERT_TRUE(request_handler.GetRequestHeaderBlock(url, &headers, &challenge));
562
563 EXPECT_EQ(url.path(), headers["path"]);
564 EXPECT_TRUE(headers.find("upgrade") == headers.end());
565 EXPECT_TRUE(headers.find("Upgrade") == headers.end());
566 EXPECT_TRUE(headers.find("connection") == headers.end());
567 EXPECT_TRUE(headers.find("Connection") == headers.end());
568 EXPECT_TRUE(headers.find("Sec-WebSocket-Key") == headers.end());
569 EXPECT_TRUE(headers.find("sec-websocket-key") == headers.end());
570 EXPECT_TRUE(headers.find("Sec-WebSocket-Version") == headers.end());
571 EXPECT_TRUE(headers.find("sec-webSocket-version") == headers.end());
572 EXPECT_EQ("example.com", headers["host"]);
573 EXPECT_EQ("http://example.com", headers["origin"]);
574 EXPECT_EQ("sample", headers["sec-websocket-protocol"]);
575 EXPECT_EQ("foo", headers["sec-websocket-extensions"]);
576 EXPECT_EQ("ws", headers["scheme"]);
577 EXPECT_EQ("WebSocket/13", headers["version"]);
578 EXPECT_EQ("WK-websocket-test=1; WK-websocket-test-httponly=1",
579 headers["cookie"]);
580
581 const char expected_challenge[] = "dGhlIHNhbXBsZSBub25jZQ==";
582
583 EXPECT_EQ(expected_challenge, challenge);
584
585 headers.clear();
586
587 headers["status"] = "101 Switching Protocols";
588 headers["sec-websocket-protocol"] = "sample";
589 headers["sec-websocket-extensions"] = "foo";
590 std::string cookie = "WK-websocket-test=1";
591 cookie.append(1, '\0');
592 cookie += "WK-websocket-test-httponly=1; HttpOnly";
593 headers["set-cookie"] = cookie;
594
595
596 WebSocketHandshakeResponseHandler response_handler;
597 response_handler.set_protocol_version(13);
598 EXPECT_TRUE(response_handler.ParseResponseHeaderBlock(headers, challenge));
599 EXPECT_TRUE(response_handler.HasResponse());
600
601 // Note that order of sec-websocket-* is sensitive with hash_map order.
602 static const char kHandshakeResponseExpectedMessage[] =
603 "HTTP/1.1 101 Switching Protocols\r\n"
604 "Upgrade: websocket\r\n"
605 "Connection: Upgrade\r\n"
606 "Sec-WebSocket-Accept: s3pPLMBiTxaQ9kYGzzhZRbK+xOo=\r\n"
607 "sec-websocket-extensions: foo\r\n"
608 "sec-websocket-protocol: sample\r\n"
609 "set-cookie: WK-websocket-test=1\r\n"
610 "set-cookie: WK-websocket-test-httponly=1; HttpOnly\r\n"
611 "\r\n";
612
613 EXPECT_EQ(kHandshakeResponseExpectedMessage, response_handler.GetResponse());
614 }
615
616 } // namespace net 469 } // namespace net
OLDNEW
« no previous file with comments | « net/websockets/websocket_handshake_handler_spdy3_unittest.cc ('k') | net/websockets/websocket_job.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698