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

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

Issue 141953004: SPDY cleanup: remove credential slot. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Fixups to get flip_in_mem_edsm_server_unittests building & passing. Created 6 years, 11 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 <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 103 matching lines...) Expand 10 before | Expand all | Expand 10 after
114 } else { 114 } else {
115 // Done. 115 // Done.
116 finished_ = true; 116 finished_ = true;
117 } 117 }
118 return true; 118 return true;
119 } 119 }
120 120
121 virtual void OnSynStream(SpdyStreamId stream_id, 121 virtual void OnSynStream(SpdyStreamId stream_id,
122 SpdyStreamId associated_stream_id, 122 SpdyStreamId associated_stream_id,
123 SpdyPriority priority, 123 SpdyPriority priority,
124 uint8 slot,
125 bool fin, 124 bool fin,
126 bool unidirectional) OVERRIDE { 125 bool unidirectional) OVERRIDE {
127 SpdyFramer framer(version_); 126 SpdyFramer framer(version_);
128 framer.set_enable_compression(false); 127 framer.set_enable_compression(false);
129 SpdySynStreamIR syn_stream(stream_id); 128 SpdySynStreamIR syn_stream(stream_id);
130 syn_stream.set_associated_to_stream_id(associated_stream_id); 129 syn_stream.set_associated_to_stream_id(associated_stream_id);
131 syn_stream.set_priority(priority); 130 syn_stream.set_priority(priority);
132 syn_stream.set_slot(slot);
133 syn_stream.set_fin(fin); 131 syn_stream.set_fin(fin);
134 syn_stream.set_unidirectional(unidirectional); 132 syn_stream.set_unidirectional(unidirectional);
135 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); 133 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream));
136 ResetBuffer(); 134 ResetBuffer();
137 memcpy(buffer_.get(), frame->data(), framer.GetSynStreamMinimumSize()); 135 memcpy(buffer_.get(), frame->data(), framer.GetSynStreamMinimumSize());
138 size_ += framer.GetSynStreamMinimumSize(); 136 size_ += framer.GetSynStreamMinimumSize();
139 } 137 }
140 138
141 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE { 139 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE {
142 SpdyFramer framer(version_); 140 SpdyFramer framer(version_);
(...skipping 164 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 return false; 305 return false;
308 } 306 }
309 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len); 307 memcpy(header_buffer_.get() + header_buffer_length_, header_data, len);
310 header_buffer_length_ += len; 308 header_buffer_length_ += len;
311 return true; 309 return true;
312 } 310 }
313 311
314 virtual void OnSynStream(SpdyStreamId stream_id, 312 virtual void OnSynStream(SpdyStreamId stream_id,
315 SpdyStreamId associated_stream_id, 313 SpdyStreamId associated_stream_id,
316 SpdyPriority priority, 314 SpdyPriority priority,
317 uint8 credential_slot,
318 bool fin, 315 bool fin,
319 bool unidirectional) OVERRIDE { 316 bool unidirectional) OVERRIDE {
320 syn_frame_count_++; 317 syn_frame_count_++;
321 InitHeaderStreaming(SYN_STREAM, stream_id); 318 InitHeaderStreaming(SYN_STREAM, stream_id);
322 if (fin) { 319 if (fin) {
323 fin_flag_count_++; 320 fin_flag_count_++;
324 } 321 }
325 } 322 }
326 323
327 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE { 324 virtual void OnSynReply(SpdyStreamId stream_id, bool fin) OVERRIDE {
(...skipping 286 matching lines...) Expand 10 before | Expand all | Expand 10 after
614 EXPECT_TRUE(frame.get() != NULL); 611 EXPECT_TRUE(frame.get() != NULL);
615 612
616 base::StringPiece serialized_headers = 613 base::StringPiece serialized_headers =
617 GetSerializedHeaders(frame.get(), framer); 614 GetSerializedHeaders(frame.get(), framer);
618 SpdyHeaderBlock new_headers; 615 SpdyHeaderBlock new_headers;
619 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(), 616 EXPECT_FALSE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(),
620 serialized_headers.size() - 2, 617 serialized_headers.size() - 2,
621 &new_headers)); 618 &new_headers));
622 } 619 }
623 620
624 TEST_P(SpdyFramerTest, OutOfOrderHeaders) {
625 SpdyFramer framer(spdy_version_);
626 framer.set_enable_compression(false);
627
628 // Frame builder with plentiful buffer size.
629 SpdyFrameBuilder frame(1024);
630 if (spdy_version_ < 4) {
631 frame.WriteControlFrameHeader(framer, SYN_STREAM, CONTROL_FLAG_NONE);
632 frame.WriteUInt32(3); // stream_id
633 } else {
634 frame.WriteFramePrefix(framer, SYN_STREAM, CONTROL_FLAG_NONE, 3);
635 }
636
637 frame.WriteUInt32(0); // Associated stream id
638 frame.WriteUInt16(0); // Priority.
639
640 if (IsSpdy2()) {
641 frame.WriteUInt16(2); // Number of headers.
642 frame.WriteString("gamma");
643 frame.WriteString("gamma");
644 frame.WriteString("alpha");
645 frame.WriteString("alpha");
646 } else {
647 frame.WriteUInt32(2); // Number of headers.
648 frame.WriteStringPiece32("gamma");
649 frame.WriteStringPiece32("gamma");
650 frame.WriteStringPiece32("alpha");
651 frame.WriteStringPiece32("alpha");
652 }
653 // write the length
654 frame.RewriteLength(framer);
655
656 SpdyHeaderBlock new_headers;
657 scoped_ptr<SpdyFrame> control_frame(frame.take());
658 base::StringPiece serialized_headers =
659 GetSerializedHeaders(control_frame.get(), framer);
660 EXPECT_TRUE(framer.ParseHeaderBlockInBuffer(serialized_headers.data(),
661 serialized_headers.size(),
662 &new_headers));
663 }
664
665 // Test that if we receive a SYN_STREAM with stream ID zero, we signal an error
666 // (but don't crash).
667 TEST_P(SpdyFramerTest, SynStreamWithStreamIdZero) {
668 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
669 SpdyFramer framer(spdy_version_);
670 framer.set_visitor(&visitor);
671
672 SpdySynStreamIR syn_stream(0);
673 syn_stream.set_priority(1);
674 syn_stream.SetHeader("alpha", "beta");
675 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream));
676 ASSERT_TRUE(frame.get() != NULL);
677
678 // We shouldn't have to read the whole frame before we signal an error.
679 EXPECT_CALL(visitor, OnError(testing::Eq(&framer)));
680 EXPECT_GT(frame->size(), framer.ProcessInput(frame->data(), frame->size()));
681 EXPECT_TRUE(framer.HasError());
682 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.error_code())
683 << SpdyFramer::ErrorCodeToString(framer.error_code());
684 }
685
686 // Test that if we receive a SYN_REPLY with stream ID zero, we signal an error 621 // Test that if we receive a SYN_REPLY with stream ID zero, we signal an error
687 // (but don't crash). 622 // (but don't crash).
688 TEST_P(SpdyFramerTest, SynReplyWithStreamIdZero) { 623 TEST_P(SpdyFramerTest, SynReplyWithStreamIdZero) {
689 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; 624 testing::StrictMock<test::MockSpdyFramerVisitor> visitor;
690 SpdyFramer framer(spdy_version_); 625 SpdyFramer framer(spdy_version_);
691 framer.set_visitor(&visitor); 626 framer.set_visitor(&visitor);
692 627
693 SpdySynReplyIR syn_reply(0); 628 SpdySynReplyIR syn_reply(0);
694 syn_reply.SetHeader("alpha", "beta"); 629 syn_reply.SetHeader("alpha", "beta");
695 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeSynReply(syn_reply)); 630 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeSynReply(syn_reply));
(...skipping 988 matching lines...) Expand 10 before | Expand all | Expand 10 after
1684 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir)); 1619 scoped_ptr<SpdyFrame> frame(framer.SerializeData(data_ir));
1685 CompareFrame(kDescription, *frame, expected_frame_data.get(), kFrameSize); 1620 CompareFrame(kDescription, *frame, expected_frame_data.get(), kFrameSize);
1686 } 1621 }
1687 } 1622 }
1688 1623
1689 TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) { 1624 TEST_P(SpdyFramerTest, CreateSynStreamUncompressed) {
1690 SpdyFramer framer(spdy_version_); 1625 SpdyFramer framer(spdy_version_);
1691 framer.set_enable_compression(false); 1626 framer.set_enable_compression(false);
1692 1627
1693 { 1628 {
1694 const char kDescription[] = "SYN_STREAM frame, lowest pri, slot 2, no FIN"; 1629 const char kDescription[] = "SYN_STREAM frame, lowest pri, no FIN";
1695 1630
1696 const unsigned char kPri = IsSpdy2() ? 0xC0 : 0xE0; 1631 const unsigned char kPri = IsSpdy2() ? 0xC0 : 0xE0;
1697 const unsigned char kCre = IsSpdy2() ? 0 : 2;
1698 const unsigned char kV2FrameData[] = { 1632 const unsigned char kV2FrameData[] = {
1699 0x80, spdy_version_ch_, 0x00, 0x01, 1633 0x80, spdy_version_ch_, 0x00, 0x01,
1700 0x00, 0x00, 0x00, 0x20, 1634 0x00, 0x00, 0x00, 0x20,
1701 0x00, 0x00, 0x00, 0x01, 1635 0x00, 0x00, 0x00, 0x01,
1702 0x00, 0x00, 0x00, 0x00, 1636 0x00, 0x00, 0x00, 0x00,
1703 kPri, 0x00, 0x00, 0x02, 1637 kPri, 0x00, 0x00, 0x02,
1704 0x00, 0x03, 'b', 'a', 1638 0x00, 0x03, 'b', 'a',
1705 'r', 0x00, 0x03, 'f', 1639 'r', 0x00, 0x03, 'f',
1706 'o', 'o', 0x00, 0x03, 1640 'o', 'o', 0x00, 0x03,
1707 'f', 'o', 'o', 0x00, 1641 'f', 'o', 'o', 0x00,
1708 0x03, 'b', 'a', 'r' 1642 0x03, 'b', 'a', 'r'
1709 }; 1643 };
1710 const unsigned char kV3FrameData[] = { 1644 const unsigned char kV3FrameData[] = {
1711 0x80, spdy_version_ch_, 0x00, 0x01, 1645 0x80, spdy_version_ch_, 0x00, 0x01,
1712 0x00, 0x00, 0x00, 0x2a, 1646 0x00, 0x00, 0x00, 0x2a,
1713 0x00, 0x00, 0x00, 0x01, 1647 0x00, 0x00, 0x00, 0x01,
1714 0x00, 0x00, 0x00, 0x00, 1648 0x00, 0x00, 0x00, 0x00,
1715 kPri, kCre, 0x00, 0x00, 1649 kPri, 0x00, 0x00, 0x00,
1716 0x00, 0x02, 0x00, 0x00, 1650 0x00, 0x02, 0x00, 0x00,
1717 0x00, 0x03, 'b', 'a', 1651 0x00, 0x03, 'b', 'a',
1718 'r', 0x00, 0x00, 0x00, 1652 'r', 0x00, 0x00, 0x00,
1719 0x03, 'f', 'o', 'o', 1653 0x03, 'f', 'o', 'o',
1720 0x00, 0x00, 0x00, 0x03, 1654 0x00, 0x00, 0x00, 0x03,
1721 'f', 'o', 'o', 0x00, 1655 'f', 'o', 'o', 0x00,
1722 0x00, 0x00, 0x03, 'b', 1656 0x00, 0x00, 0x03, 'b',
1723 'a', 'r' 1657 'a', 'r'
1724 }; 1658 };
1725 const unsigned char kV4FrameData[] = { 1659 const unsigned char kV4FrameData[] = {
1726 0x00, 0x2c, 0x08, 0x08, 1660 0x00, 0x2c, 0x08, 0x08,
1727 0x00, 0x00, 0x00, 0x01, 1661 0x00, 0x00, 0x00, 0x01,
1728 0x00, 0x00, 0x00, 0x07, 1662 0x00, 0x00, 0x00, 0x07,
1729 0x00, 0x00, 0x00, 0x02, 1663 0x00, 0x00, 0x00, 0x02,
1730 0x00, 0x00, 0x00, 0x03, 1664 0x00, 0x00, 0x00, 0x03,
1731 'b', 'a', 'r', 0x00, 1665 'b', 'a', 'r', 0x00,
1732 0x00, 0x00, 0x03, 'f', 1666 0x00, 0x00, 0x03, 'f',
1733 'o', 'o', 0x00, 0x00, 1667 'o', 'o', 0x00, 0x00,
1734 0x00, 0x03, 'f', 'o', 1668 0x00, 0x03, 'f', 'o',
1735 'o', 0x00, 0x00, 0x00, 1669 'o', 0x00, 0x00, 0x00,
1736 0x03, 'b', 'a', 'r' 1670 0x03, 'b', 'a', 'r'
1737 }; 1671 };
1738 SpdySynStreamIR syn_stream(1); 1672 SpdySynStreamIR syn_stream(1);
1739 syn_stream.set_priority(framer.GetLowestPriority()); 1673 syn_stream.set_priority(framer.GetLowestPriority());
1740 syn_stream.set_slot(kCre);
1741 syn_stream.SetHeader("bar", "foo"); 1674 syn_stream.SetHeader("bar", "foo");
1742 syn_stream.SetHeader("foo", "bar"); 1675 syn_stream.SetHeader("foo", "bar");
1743 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); 1676 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream));
1744 if (IsSpdy2()) { 1677 if (IsSpdy2()) {
1745 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); 1678 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData));
1746 } else if (IsSpdy3()) { 1679 } else if (IsSpdy3()) {
1747 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); 1680 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData));
1748 } else { 1681 } else {
1749 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData)); 1682 CompareFrame(kDescription, *frame, kV4FrameData, arraysize(kV4FrameData));
1750 } 1683 }
(...skipping 1978 matching lines...) Expand 10 before | Expand all | Expand 10 after
3729 3662
3730 if (!IsSpdy4() && 3663 if (!IsSpdy4() &&
3731 flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) { 3664 flags & ~(CONTROL_FLAG_FIN | CONTROL_FLAG_UNIDIRECTIONAL)) {
3732 EXPECT_CALL(visitor, OnError(_)); 3665 EXPECT_CALL(visitor, OnError(_));
3733 } else if (IsSpdy4() && 3666 } else if (IsSpdy4() &&
3734 flags & ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY)) { 3667 flags & ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY)) {
3735 EXPECT_CALL(visitor, OnError(_)); 3668 EXPECT_CALL(visitor, OnError(_));
3736 } else { 3669 } else {
3737 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _)); 3670 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(8, SYN_STREAM, _));
3738 if (IsSpdy4()) { 3671 if (IsSpdy4()) {
3739 EXPECT_CALL(visitor, OnSynStream(8, 0, 1, 0, flags & CONTROL_FLAG_FIN, 3672 EXPECT_CALL(visitor, OnSynStream(8, 0, 1, flags & CONTROL_FLAG_FIN,
3740 false)); 3673 false));
3741 } else { 3674 } else {
3742 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, 0, flags & CONTROL_FLAG_FIN, 3675 EXPECT_CALL(visitor, OnSynStream(8, 3, 1, flags & CONTROL_FLAG_FIN,
3743 flags & CONTROL_FLAG_UNIDIRECTIONAL)); 3676 flags & CONTROL_FLAG_UNIDIRECTIONAL));
3744 } 3677 }
3745 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _)) 3678 EXPECT_CALL(visitor, OnControlFrameHeaderData(8, _, _))
3746 .WillRepeatedly(testing::Return(true)); 3679 .WillRepeatedly(testing::Return(true));
3747 if (flags & DATA_FLAG_FIN) { 3680 if (flags & DATA_FLAG_FIN) {
3748 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true)); 3681 EXPECT_CALL(visitor, OnStreamFrameData(_, _, 0, true));
3749 } 3682 }
3750 } 3683 }
3751 3684
3752 framer.ProcessInput(frame->data(), frame->size()); 3685 framer.ProcessInput(frame->data(), frame->size());
(...skipping 331 matching lines...) Expand 10 before | Expand all | Expand 10 after
4084 framer.GetSynStreamMinimumSize(), 4017 framer.GetSynStreamMinimumSize(),
4085 spdy_version_); 4018 spdy_version_);
4086 } else { 4019 } else {
4087 SetFrameLength( 4020 SetFrameLength(
4088 frame.get(), 4021 frame.get(),
4089 framer.GetSynStreamMinimumSize() - framer.GetControlFrameHeaderSize(), 4022 framer.GetSynStreamMinimumSize() - framer.GetControlFrameHeaderSize(),
4090 spdy_version_); 4023 spdy_version_);
4091 } 4024 }
4092 4025
4093 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(1, SYN_STREAM, _)); 4026 EXPECT_CALL(debug_visitor, OnReceiveCompressedFrame(1, SYN_STREAM, _));
4094 EXPECT_CALL(visitor, OnSynStream(1, 0, 1, 0, false, false)); 4027 EXPECT_CALL(visitor, OnSynStream(1, 0, 1, false, false));
4095 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0)); 4028 EXPECT_CALL(visitor, OnControlFrameHeaderData(1, NULL, 0));
4096 4029
4097 framer.ProcessInput(frame->data(), framer.GetSynStreamMinimumSize()); 4030 framer.ProcessInput(frame->data(), framer.GetSynStreamMinimumSize());
4098 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4031 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4099 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4032 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4100 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4033 << SpdyFramer::ErrorCodeToString(framer.error_code());
4101 } 4034 }
4102 4035
4103 TEST_P(SpdyFramerTest, SettingsFlagsAndId) { 4036 TEST_P(SpdyFramerTest, SettingsFlagsAndId) {
4104 const uint32 kId = 0x020304; 4037 const uint32 kId = 0x020304;
(...skipping 122 matching lines...) Expand 10 before | Expand all | Expand 10 after
4227 SpdyBlockedIR blocked_ir(0); 4160 SpdyBlockedIR blocked_ir(0);
4228 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir)); 4161 scoped_ptr<SpdySerializedFrame> frame(framer.SerializeFrame(blocked_ir));
4229 framer.ProcessInput(frame->data(), framer.GetBlockedSize()); 4162 framer.ProcessInput(frame->data(), framer.GetBlockedSize());
4230 4163
4231 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state()); 4164 EXPECT_EQ(SpdyFramer::SPDY_RESET, framer.state());
4232 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code()) 4165 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.error_code())
4233 << SpdyFramer::ErrorCodeToString(framer.error_code()); 4166 << SpdyFramer::ErrorCodeToString(framer.error_code());
4234 } 4167 }
4235 4168
4236 } // namespace net 4169 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698