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

Side by Side Diff: net/spdy/spdy_framer_test.cc

Issue 1130053007: Update HTTP/2 ALTSVC wireformat from draft-04 to draft-06. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Hack around win_chromium_compile_dbg_ng linker errors. Created 5 years, 7 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
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 <algorithm> 5 #include <algorithm>
6 #include <iostream> 6 #include <iostream>
7 #include <limits> 7 #include <limits>
8 8
9 #include "base/compiler_specific.h" 9 #include "base/compiler_specific.h"
10 #include "base/memory/scoped_ptr.h" 10 #include "base/memory/scoped_ptr.h"
(...skipping 3406 matching lines...) Expand 10 before | Expand all | Expand 10 after
3417 } 3417 }
3418 3418
3419 TEST_P(SpdyFramerTest, CreateAltSvc) { 3419 TEST_P(SpdyFramerTest, CreateAltSvc) {
3420 if (spdy_version_ <= SPDY3) { 3420 if (spdy_version_ <= SPDY3) {
3421 return; 3421 return;
3422 } 3422 }
3423 3423
3424 SpdyFramer framer(spdy_version_); 3424 SpdyFramer framer(spdy_version_);
3425 3425
3426 const char kDescription[] = "ALTSVC frame"; 3426 const char kDescription[] = "ALTSVC frame";
3427 const unsigned char kType = static_cast<unsigned char>( 3427 const char kType = static_cast<unsigned char>(
3428 SpdyConstants::SerializeFrameType(spdy_version_, ALTSVC)); 3428 SpdyConstants::SerializeFrameType(spdy_version_, ALTSVC));
3429 const unsigned char kFrameData[] = { 3429 const unsigned char kFrameData[] = {
3430 0x00, 0x00, 0x17, kType, 0x00, 3430 0x00, 0x00, 0x1d, kType, 0x00, 0x00, 0x00, 0x00, 0x03, 0x00,
3431 0x00, 0x00, 0x00, 0x03, 3431 0x06, 'o', 'r', 'i', 'g', 'i', 'n', 'p', 'i', 'd',
3432 0x00, 0x00, 0x00, 0x05, 3432 '1', '=', '"', 'h', 'o', 's', 't', ':', '4', '4',
3433 0x01, 0xbb, 0x00, 0x04, // Port = 443 3433 '3', '"', ';', ' ', 'm', 'a', '=', '5',
3434 'p', 'i', 'd', '1', // Protocol-ID
3435 0x04, 'h', 'o', 's',
3436 't', 'o', 'r', 'i',
3437 'g', 'i', 'n',
3438 }; 3434 };
3439 SpdyAltSvcIR altsvc_ir(3); 3435 SpdyAltSvcIR altsvc_ir(3);
3440 altsvc_ir.set_max_age(5); 3436 altsvc_ir.set_max_age(5);
3441 altsvc_ir.set_port(443); 3437 altsvc_ir.set_port(443);
3442 altsvc_ir.set_protocol_id("pid1"); 3438 altsvc_ir.set_protocol_id("pid1");
3443 altsvc_ir.set_host("host"); 3439 altsvc_ir.set_host("host");
3444 altsvc_ir.set_origin("origin"); 3440 altsvc_ir.set_origin("origin");
3445 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir)); 3441 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir));
3446 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); 3442 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData));
3447 } 3443 }
(...skipping 1253 matching lines...) Expand 10 before | Expand all | Expand 10 after
4701 EXPECT_EQ(14u, framer.GetSynStreamMinimumSize()); 4697 EXPECT_EQ(14u, framer.GetSynStreamMinimumSize());
4702 EXPECT_EQ(9u, framer.GetSynReplyMinimumSize()); 4698 EXPECT_EQ(9u, framer.GetSynReplyMinimumSize());
4703 EXPECT_EQ(13u, framer.GetRstStreamMinimumSize()); 4699 EXPECT_EQ(13u, framer.GetRstStreamMinimumSize());
4704 EXPECT_EQ(9u, framer.GetSettingsMinimumSize()); 4700 EXPECT_EQ(9u, framer.GetSettingsMinimumSize());
4705 EXPECT_EQ(17u, framer.GetPingSize()); 4701 EXPECT_EQ(17u, framer.GetPingSize());
4706 EXPECT_EQ(17u, framer.GetGoAwayMinimumSize()); 4702 EXPECT_EQ(17u, framer.GetGoAwayMinimumSize());
4707 EXPECT_EQ(9u, framer.GetHeadersMinimumSize()); 4703 EXPECT_EQ(9u, framer.GetHeadersMinimumSize());
4708 EXPECT_EQ(13u, framer.GetWindowUpdateSize()); 4704 EXPECT_EQ(13u, framer.GetWindowUpdateSize());
4709 EXPECT_EQ(9u, framer.GetBlockedSize()); 4705 EXPECT_EQ(9u, framer.GetBlockedSize());
4710 EXPECT_EQ(13u, framer.GetPushPromiseMinimumSize()); 4706 EXPECT_EQ(13u, framer.GetPushPromiseMinimumSize());
4711 EXPECT_EQ(18u, framer.GetAltSvcMinimumSize()); 4707 EXPECT_EQ(11u, framer.GetAltSvcMinimumSize());
4712 EXPECT_EQ(9u, framer.GetFrameMinimumSize()); 4708 EXPECT_EQ(9u, framer.GetFrameMinimumSize());
4713 EXPECT_EQ(16393u, framer.GetFrameMaximumSize()); 4709 EXPECT_EQ(16393u, framer.GetFrameMaximumSize());
4714 EXPECT_EQ(16384u, framer.GetDataFrameMaximumPayload()); 4710 EXPECT_EQ(16384u, framer.GetDataFrameMaximumPayload());
4715 } else { 4711 } else {
4716 EXPECT_EQ(8u, framer.GetDataFrameMinimumSize()); 4712 EXPECT_EQ(8u, framer.GetDataFrameMinimumSize());
4717 EXPECT_EQ(8u, framer.GetControlFrameHeaderSize()); 4713 EXPECT_EQ(8u, framer.GetControlFrameHeaderSize());
4718 EXPECT_EQ(18u, framer.GetSynStreamMinimumSize()); 4714 EXPECT_EQ(18u, framer.GetSynStreamMinimumSize());
4719 EXPECT_EQ(IsSpdy2() ? 14u : 12u, framer.GetSynReplyMinimumSize()); 4715 EXPECT_EQ(IsSpdy2() ? 14u : 12u, framer.GetSynReplyMinimumSize());
4720 EXPECT_EQ(16u, framer.GetRstStreamMinimumSize()); 4716 EXPECT_EQ(16u, framer.GetRstStreamMinimumSize());
4721 EXPECT_EQ(12u, framer.GetSettingsMinimumSize()); 4717 EXPECT_EQ(12u, framer.GetSettingsMinimumSize());
(...skipping 983 matching lines...) Expand 10 before | Expand all | Expand 10 after
5705 StringPiece("h1"), 5701 StringPiece("h1"),
5706 StringPiece("o1"))); 5702 StringPiece("o1")));
5707 5703
5708 SpdyAltSvcIR altsvc_ir(1); 5704 SpdyAltSvcIR altsvc_ir(1);
5709 altsvc_ir.set_max_age(10); 5705 altsvc_ir.set_max_age(10);
5710 altsvc_ir.set_port(443); 5706 altsvc_ir.set_port(443);
5711 altsvc_ir.set_protocol_id("pid"); 5707 altsvc_ir.set_protocol_id("pid");
5712 altsvc_ir.set_host("h1"); 5708 altsvc_ir.set_host("h1");
5713 altsvc_ir.set_origin("o1"); 5709 altsvc_ir.set_origin("o1");
5714 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir)); 5710 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir));
5715 framer.ProcessInput(frame->data(), framer.GetAltSvcMinimumSize() + 5711 framer.ProcessInput(frame->data(), frame->size());
5716 altsvc_ir.protocol_id().length() +
5717 altsvc_ir.host().length() +
5718 altsvc_ir.origin().length());
5719 5712
5720 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5713 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5721 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5714 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5722 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5715 << SpdyFramer::ErrorCodeToString(framer.error_code());
5723 } 5716 }
5724 5717
5725 TEST_P(SpdyFramerTest, OnAltSvcNoOrigin) { 5718 TEST_P(SpdyFramerTest, OnAltSvcNoOrigin) {
5726 if (spdy_version_ <= SPDY3) { 5719 if (spdy_version_ <= SPDY3) {
5727 return; 5720 return;
5728 } 5721 }
5729 5722
5730 const SpdyStreamId kStreamId = 1; 5723 const SpdyStreamId kStreamId = 1;
5731 5724
5732 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5725 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5733 SpdyFramer framer(spdy_version_); 5726 SpdyFramer framer(spdy_version_);
5734 framer.set_visitor(&visitor); 5727 framer.set_visitor(&visitor);
5735 5728
5736 EXPECT_CALL(visitor, OnAltSvc(kStreamId, 5729 EXPECT_CALL(visitor,
5737 10, 5730 OnAltSvc(kStreamId, 10, 443, StringPiece("p\"=i:d"),
5738 443, 5731 StringPiece("h_\\o\"st"), StringPiece("o_r|g!n")));
5739 StringPiece("pid"),
5740 StringPiece("h1"),
5741 StringPiece("")));
5742 5732
5743 SpdyAltSvcIR altsvc_ir(1); 5733 SpdyAltSvcIR altsvc_ir(1);
5744 altsvc_ir.set_max_age(10); 5734 altsvc_ir.set_max_age(10);
5745 altsvc_ir.set_port(443); 5735 altsvc_ir.set_port(443);
5746 altsvc_ir.set_protocol_id("pid"); 5736 altsvc_ir.set_protocol_id("p\"=i:d");
5747 altsvc_ir.set_host("h1"); 5737 altsvc_ir.set_host("h_\\o\"st");
5738 altsvc_ir.set_origin("o_r|g!n");
5748 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir)); 5739 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir));
5749 framer.ProcessInput(frame->data(), framer.GetAltSvcMinimumSize() + 5740 framer.ProcessInput(frame->data(), frame->size());
5750 altsvc_ir.protocol_id().length() +
5751 altsvc_ir.host().length());
5752 5741
5753 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 5742 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5754 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 5743 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5755 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5744 << SpdyFramer::ErrorCodeToString(framer.error_code());
5756 } 5745 }
5757 5746
5758 TEST_P(SpdyFramerTest, OnAltSvcEmptyProtocolId) { 5747 TEST_P(SpdyFramerTest, OnAltSvcEmptyProtocolId) {
5759 if (spdy_version_ <= SPDY3) { 5748 if (spdy_version_ <= SPDY3) {
5760 return; 5749 return;
5761 } 5750 }
5762 5751
5763 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 5752 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5764 SpdyFramer framer(spdy_version_); 5753 SpdyFramer framer(spdy_version_);
5765 framer.set_visitor(&visitor); 5754 framer.set_visitor(&visitor);
5766 5755
5767 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); 5756 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
5768 5757
5769 SpdyAltSvcIR altsvc_ir(1); 5758 SpdyAltSvcIR altsvc_ir(1);
5770 altsvc_ir.set_max_age(10); 5759 altsvc_ir.set_max_age(10);
5771 altsvc_ir.set_port(443); 5760 altsvc_ir.set_port(443);
5772 altsvc_ir.set_host("h1"); 5761 altsvc_ir.set_host("h1");
5773 altsvc_ir.set_origin("o1"); 5762 altsvc_ir.set_origin("o1");
5774 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir)); 5763 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir));
5775 framer.ProcessInput(frame->data(), framer.GetAltSvcMinimumSize() + 5764 framer.ProcessInput(frame->data(), frame->size());
5776 altsvc_ir.protocol_id().length() +
5777 altsvc_ir.host().length());
5778 5765
5779 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); 5766 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state());
5780 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code()) 5767 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
5781 << SpdyFramer::ErrorCodeToString(framer.error_code()); 5768 << SpdyFramer::ErrorCodeToString(framer.error_code());
5782 } 5769 }
5783 5770
5784 TEST_P(SpdyFramerTest, OnAltSvcBadLengths) { 5771 TEST_P(SpdyFramerTest, OnAltSvcBadLengths) {
5785 if (spdy_version_ <= SPDY3) { 5772 if (spdy_version_ <= SPDY3) {
5786 return; 5773 return;
5787 } 5774 }
5788 5775
5789 const unsigned char kType = static_cast<unsigned char>( 5776 const SpdyStreamId kStreamId = 1;
5790 SpdyConstants::SerializeFrameType(spdy_version_, ALTSVC));
5791 {
5792 TestSpdyVisitor visitor(spdy_version_);
5793 SpdyFramer framer(spdy_version_);
5794 framer.set_visitor(&visitor);
5795 5777
5796 const unsigned char kFrameDataLargePIDLen[] = { 5778 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
5797 0x00, 0x00, 0x17, kType, 0x00, 5779 SpdyFramer framer(spdy_version_);
5798 0x00, 0x00, 0x00, 0x03, 5780 framer.set_visitor(&visitor);
5799 0x00, 0x00, 0x00, 0x05,
5800 0x01, 0xbb, 0x00, 0x05, // Port = 443
5801 'p', 'i', 'd', '1', // Protocol-ID
5802 0x04, 'h', 'o', 's',
5803 't', 'o', 'r', 'i',
5804 'g', 'i', 'n',
5805 };
5806 5781
5807 visitor.SimulateInFramer(kFrameDataLargePIDLen, 5782 EXPECT_CALL(visitor, OnAltSvc(kStreamId, 10, 443, StringPiece("pid"),
5808 sizeof(kFrameDataLargePIDLen)); 5783 StringPiece("h1"), StringPiece("")));
5809 EXPECT_EQ(1, visitor.error_count_);
5810 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5811 visitor.framer_.error_code());
5812 }
5813 5784
5814 { 5785 SpdyAltSvcIR altsvc_ir(1);
5815 TestSpdyVisitor visitor(spdy_version_); 5786 altsvc_ir.set_max_age(10);
5816 SpdyFramer framer(spdy_version_); 5787 altsvc_ir.set_port(443);
5817 framer.set_visitor(&visitor); 5788 altsvc_ir.set_protocol_id("pid");
5818 const unsigned char kFrameDataPIDLenLargerThanFrame[] = { 5789 altsvc_ir.set_host("h1");
5819 0x00, 0x00, 0x17, kType, 0x00, 5790 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(altsvc_ir));
5820 0x00, 0x00, 0x00, 0x03, 5791 framer.ProcessInput(frame->data(), frame->size());
5821 0x00, 0x00, 0x00, 0x05,
5822 0x01, 0xbb, 0x00, 0x99, // Port = 443
5823 'p', 'i', 'd', '1', // Protocol-ID
5824 0x04, 'h', 'o', 's',
5825 't', 'o', 'r', 'i',
5826 'g', 'i', 'n',
5827 };
5828 5792
5829 visitor.SimulateInFramer(kFrameDataPIDLenLargerThanFrame, 5793 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
5830 sizeof(kFrameDataPIDLenLargerThanFrame)); 5794 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
5831 EXPECT_EQ(1, visitor.error_count_); 5795 << SpdyFramer::ErrorCodeToString(framer.error_code());
5832 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5833 visitor.framer_.error_code());
5834 }
5835
5836 {
5837 TestSpdyVisitor visitor(spdy_version_);
5838 SpdyFramer framer(spdy_version_);
5839 framer.set_visitor(&visitor);
5840
5841 const unsigned char kFrameDataLargeHostLen[] = {
5842 0x00, 0x00, 0x17, kType, 0x00,
5843 0x00, 0x00, 0x00, 0x03,
5844 0x00, 0x00, 0x00, 0x05,
5845 0x01, 0xbb, 0x00, 0x04, // Port = 443
5846 'p', 'i', 'd', '1', // Protocol-ID
5847 0x0f, 'h', 'o', 's',
5848 't', 'o', 'r', 'i',
5849 'g', 'i', 'n',
5850 };
5851
5852 visitor.SimulateInFramer(kFrameDataLargeHostLen,
5853 sizeof(kFrameDataLargeHostLen));
5854 EXPECT_EQ(1, visitor.error_count_);
5855 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5856 visitor.framer_.error_code());
5857 }
5858
5859 {
5860 TestSpdyVisitor visitor(spdy_version_);
5861 SpdyFramer framer(spdy_version_);
5862 framer.set_visitor(&visitor);
5863 const unsigned char kFrameDataSmallPIDLen[] = {
5864 0x00, 0x00, 0x17, kType, 0x00,
5865 0x00, 0x00, 0x00, 0x03,
5866 0x00, 0x00, 0x00, 0x05,
5867 0x01, 0xbb, 0x00, 0x01, // Port = 443
5868 'p', 'i', 'd', '1', // Protocol-ID
5869 0x04, 'h', 'o', 's',
5870 't', 'o', 'r', 'i',
5871 'g', 'i', 'n',
5872 };
5873
5874 visitor.SimulateInFramer(kFrameDataSmallPIDLen,
5875 sizeof(kFrameDataSmallPIDLen));
5876 EXPECT_EQ(1, visitor.error_count_);
5877 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5878 visitor.framer_.error_code());
5879 }
5880 } 5796 }
5881 5797
5882 // Tests handling of ALTSVC frames delivered in small chunks. 5798 // Tests handling of ALTSVC frames delivered in small chunks.
5883 TEST_P(SpdyFramerTest, ReadChunkedAltSvcFrame) { 5799 TEST_P(SpdyFramerTest, ReadChunkedAltSvcFrame) {
5884 if (spdy_version_ <= SPDY3) { 5800 if (spdy_version_ <= SPDY3) {
5885 return; 5801 return;
5886 } 5802 }
5803
5887 SpdyFramer framer(spdy_version_); 5804 SpdyFramer framer(spdy_version_);
5888 SpdyAltSvcIR altsvc_ir(1); 5805 SpdyAltSvcIR altsvc_ir(1);
5889 altsvc_ir.set_max_age(20); 5806 altsvc_ir.set_max_age(20);
5890 altsvc_ir.set_port(443); 5807 altsvc_ir.set_port(443);
5891 altsvc_ir.set_protocol_id("protocolid"); 5808 altsvc_ir.set_protocol_id("protocolid");
5892 altsvc_ir.set_host("hostname"); 5809 altsvc_ir.set_host("hostname");
5893 5810
5894 scoped_ptr<SpdyFrame> control_frame(framer.SerializeAltSvc(altsvc_ir)); 5811 scoped_ptr<SpdyFrame> control_frame(framer.SerializeAltSvc(altsvc_ir));
5895 TestSpdyVisitor visitor(spdy_version_); 5812 TestSpdyVisitor visitor(spdy_version_);
5896 visitor.use_compression_ = false; 5813 visitor.use_compression_ = false;
(...skipping 86 matching lines...) Expand 10 before | Expand all | Expand 10 after
5983 TestSpdyVisitor visitor(spdy_version_); 5900 TestSpdyVisitor visitor(spdy_version_);
5984 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); 5901 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData));
5985 5902
5986 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); 5903 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state());
5987 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, 5904 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME,
5988 visitor.framer_.error_code()) 5905 visitor.framer_.error_code())
5989 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); 5906 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code());
5990 } 5907 }
5991 5908
5992 } // namespace net 5909 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer.cc ('k') | net/spdy/spdy_protocol.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698