OLD | NEW |
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 1630 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1641 0, // associated stream id | 1641 0, // associated stream id |
1642 framer.GetLowestPriority(), | 1642 framer.GetLowestPriority(), |
1643 kCre, // credential slot | 1643 kCre, // credential slot |
1644 CONTROL_FLAG_NONE, | 1644 CONTROL_FLAG_NONE, |
1645 false, // compress | 1645 false, // compress |
1646 &headers)); | 1646 &headers)); |
1647 CompareFrame(kDescription, | 1647 CompareFrame(kDescription, |
1648 *frame, | 1648 *frame, |
1649 IsSpdy2() ? kV2FrameData : kV3FrameData, | 1649 IsSpdy2() ? kV2FrameData : kV3FrameData, |
1650 IsSpdy2() ? arraysize(kV2FrameData) : arraysize(kV3FrameData)); | 1650 IsSpdy2() ? arraysize(kV2FrameData) : arraysize(kV3FrameData)); |
1651 EXPECT_EQ(1u, SpdyFramer::GetControlFrameStreamId(frame.get())); | |
1652 } | 1651 } |
1653 | 1652 |
1654 { | 1653 { |
1655 const char kDescription[] = | 1654 const char kDescription[] = |
1656 "SYN_STREAM frame with a 0-length header name, highest pri, FIN, " | 1655 "SYN_STREAM frame with a 0-length header name, highest pri, FIN, " |
1657 "max stream ID"; | 1656 "max stream ID"; |
1658 | 1657 |
1659 SpdyHeaderBlock headers; | 1658 SpdyHeaderBlock headers; |
1660 headers[""] = "foo"; | 1659 headers[""] = "foo"; |
1661 headers["foo"] = "bar"; | 1660 headers["foo"] = "bar"; |
(...skipping 346 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2008 const char kDescription[] = "RST_STREAM frame"; | 2007 const char kDescription[] = "RST_STREAM frame"; |
2009 const unsigned char kFrameData[] = { | 2008 const unsigned char kFrameData[] = { |
2010 0x80, spdy_version_, 0x00, 0x03, | 2009 0x80, spdy_version_, 0x00, 0x03, |
2011 0x00, 0x00, 0x00, 0x08, | 2010 0x00, 0x00, 0x00, 0x08, |
2012 0x00, 0x00, 0x00, 0x01, | 2011 0x00, 0x00, 0x00, 0x01, |
2013 0x00, 0x00, 0x00, 0x01, | 2012 0x00, 0x00, 0x00, 0x01, |
2014 }; | 2013 }; |
2015 scoped_ptr<SpdyRstStreamControlFrame> frame( | 2014 scoped_ptr<SpdyRstStreamControlFrame> frame( |
2016 framer.CreateRstStream(1, RST_STREAM_PROTOCOL_ERROR)); | 2015 framer.CreateRstStream(1, RST_STREAM_PROTOCOL_ERROR)); |
2017 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); | 2016 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); |
2018 EXPECT_EQ(1u, SpdyFramer::GetControlFrameStreamId(frame.get())); | |
2019 } | 2017 } |
2020 | 2018 |
2021 { | 2019 { |
2022 const char kDescription[] = "RST_STREAM frame with max stream ID"; | 2020 const char kDescription[] = "RST_STREAM frame with max stream ID"; |
2023 const unsigned char kFrameData[] = { | 2021 const unsigned char kFrameData[] = { |
2024 0x80, spdy_version_, 0x00, 0x03, | 2022 0x80, spdy_version_, 0x00, 0x03, |
2025 0x00, 0x00, 0x00, 0x08, | 2023 0x00, 0x00, 0x00, 0x08, |
2026 0x7f, 0xff, 0xff, 0xff, | 2024 0x7f, 0xff, 0xff, 0xff, |
2027 0x00, 0x00, 0x00, 0x01, | 2025 0x00, 0x00, 0x00, 0x01, |
2028 }; | 2026 }; |
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2075 0x00, 0x00, 0x00, 0x01, | 2073 0x00, 0x00, 0x00, 0x01, |
2076 0x01, 0x02, 0x03, 0x04, | 2074 0x01, 0x02, 0x03, 0x04, |
2077 0x0a, 0x0b, 0x0c, 0x0d, | 2075 0x0a, 0x0b, 0x0c, 0x0d, |
2078 }; | 2076 }; |
2079 | 2077 |
2080 scoped_ptr<SpdySettingsControlFrame> frame(framer.CreateSettings(settings)); | 2078 scoped_ptr<SpdySettingsControlFrame> frame(framer.CreateSettings(settings)); |
2081 CompareFrame(kDescription, | 2079 CompareFrame(kDescription, |
2082 *frame, | 2080 *frame, |
2083 IsSpdy2() ? kFrameDatav2 : kFrameDatav3, | 2081 IsSpdy2() ? kFrameDatav2 : kFrameDatav3, |
2084 arraysize(kFrameDatav3)); // Size is unchanged among versions. | 2082 arraysize(kFrameDatav3)); // Size is unchanged among versions. |
2085 EXPECT_EQ(SpdyFramer::kInvalidStream, | |
2086 SpdyFramer::GetControlFrameStreamId(frame.get())); | |
2087 | 2083 |
2088 // Make sure that ParseSettings also works as advertised. | 2084 // Make sure that ParseSettings also works as advertised. |
2089 SettingsMap parsed_settings; | 2085 SettingsMap parsed_settings; |
2090 EXPECT_TRUE(framer.ParseSettings(frame.get(), &parsed_settings)); | 2086 EXPECT_TRUE(framer.ParseSettings(frame.get(), &parsed_settings)); |
2091 EXPECT_EQ(settings.size(), parsed_settings.size()); | 2087 EXPECT_EQ(settings.size(), parsed_settings.size()); |
2092 EXPECT_EQ(kFlags, parsed_settings[kId].first); | 2088 EXPECT_EQ(kFlags, parsed_settings[kId].first); |
2093 EXPECT_EQ(kValue, parsed_settings[kId].second); | 2089 EXPECT_EQ(kValue, parsed_settings[kId].second); |
2094 } | 2090 } |
2095 | 2091 |
2096 { | 2092 { |
(...skipping 20 matching lines...) Expand all Loading... |
2117 0x02, 0x00, 0x00, 0x02, // 3rd Setting | 2113 0x02, 0x00, 0x00, 0x02, // 3rd Setting |
2118 0x00, 0x00, 0x00, 0x03, | 2114 0x00, 0x00, 0x00, 0x03, |
2119 0x03, 0x00, 0x00, 0x03, // 4th Setting | 2115 0x03, 0x00, 0x00, 0x03, // 4th Setting |
2120 0xff, 0x00, 0x00, 0x04, | 2116 0xff, 0x00, 0x00, 0x04, |
2121 }; | 2117 }; |
2122 scoped_ptr<SpdySettingsControlFrame> frame(framer.CreateSettings(settings)); | 2118 scoped_ptr<SpdySettingsControlFrame> frame(framer.CreateSettings(settings)); |
2123 CompareFrame(kDescription, | 2119 CompareFrame(kDescription, |
2124 *frame, | 2120 *frame, |
2125 kFrameData, | 2121 kFrameData, |
2126 arraysize(kFrameData)); | 2122 arraysize(kFrameData)); |
2127 EXPECT_EQ(SpdyFramer::kInvalidStream, | |
2128 SpdyFramer::GetControlFrameStreamId(frame.get())); | |
2129 } | 2123 } |
2130 | 2124 |
2131 { | 2125 { |
2132 const char kDescription[] = "Empty SETTINGS frame"; | 2126 const char kDescription[] = "Empty SETTINGS frame"; |
2133 | 2127 |
2134 SettingsMap settings; | 2128 SettingsMap settings; |
2135 | 2129 |
2136 const unsigned char kFrameData[] = { | 2130 const unsigned char kFrameData[] = { |
2137 0x80, spdy_version_, 0x00, 0x04, | 2131 0x80, spdy_version_, 0x00, 0x04, |
2138 0x00, 0x00, 0x00, 0x04, | 2132 0x00, 0x00, 0x00, 0x04, |
2139 0x00, 0x00, 0x00, 0x00, | 2133 0x00, 0x00, 0x00, 0x00, |
2140 }; | 2134 }; |
2141 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); | 2135 scoped_ptr<SpdyFrame> frame(framer.CreateSettings(settings)); |
2142 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); | 2136 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); |
2143 } | 2137 } |
2144 } | 2138 } |
2145 | 2139 |
2146 TEST_P(SpdyFramerTest, CreatePingFrame) { | 2140 TEST_P(SpdyFramerTest, CreatePingFrame) { |
2147 SpdyFramer framer(spdy_version_); | 2141 SpdyFramer framer(spdy_version_); |
2148 | 2142 |
2149 { | 2143 { |
2150 const char kDescription[] = "PING frame"; | 2144 const char kDescription[] = "PING frame"; |
2151 const unsigned char kFrameData[] = { | 2145 const unsigned char kFrameData[] = { |
2152 0x80, spdy_version_, 0x00, 0x06, | 2146 0x80, spdy_version_, 0x00, 0x06, |
2153 0x00, 0x00, 0x00, 0x04, | 2147 0x00, 0x00, 0x00, 0x04, |
2154 0x12, 0x34, 0x56, 0x78, | 2148 0x12, 0x34, 0x56, 0x78, |
2155 }; | 2149 }; |
2156 scoped_ptr<SpdyPingControlFrame> frame(framer.CreatePingFrame(0x12345678u)); | 2150 scoped_ptr<SpdyPingControlFrame> frame(framer.CreatePingFrame(0x12345678u)); |
2157 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); | 2151 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); |
2158 EXPECT_EQ(SpdyFramer::kInvalidStream, | |
2159 SpdyFramer::GetControlFrameStreamId(frame.get())); | |
2160 } | 2152 } |
2161 } | 2153 } |
2162 | 2154 |
2163 TEST_P(SpdyFramerTest, CreateGoAway) { | 2155 TEST_P(SpdyFramerTest, CreateGoAway) { |
2164 SpdyFramer framer(spdy_version_); | 2156 SpdyFramer framer(spdy_version_); |
2165 | 2157 |
2166 { | 2158 { |
2167 const char kDescription[] = "GOAWAY frame"; | 2159 const char kDescription[] = "GOAWAY frame"; |
2168 const unsigned char kV2FrameData[] = { | 2160 const unsigned char kV2FrameData[] = { |
2169 0x80, spdy_version_, 0x00, 0x07, | 2161 0x80, spdy_version_, 0x00, 0x07, |
2170 0x00, 0x00, 0x00, 0x04, | 2162 0x00, 0x00, 0x00, 0x04, |
2171 0x00, 0x00, 0x00, 0x00, | 2163 0x00, 0x00, 0x00, 0x00, |
2172 }; | 2164 }; |
2173 const unsigned char kV3FrameData[] = { | 2165 const unsigned char kV3FrameData[] = { |
2174 0x80, spdy_version_, 0x00, 0x07, | 2166 0x80, spdy_version_, 0x00, 0x07, |
2175 0x00, 0x00, 0x00, 0x08, | 2167 0x00, 0x00, 0x00, 0x08, |
2176 0x00, 0x00, 0x00, 0x00, | 2168 0x00, 0x00, 0x00, 0x00, |
2177 0x00, 0x00, 0x00, 0x00, | 2169 0x00, 0x00, 0x00, 0x00, |
2178 }; | 2170 }; |
2179 scoped_ptr<SpdyGoAwayControlFrame> frame(framer.CreateGoAway(0, GOAWAY_OK)); | 2171 scoped_ptr<SpdyGoAwayControlFrame> frame(framer.CreateGoAway(0, GOAWAY_OK)); |
2180 CompareFrame(kDescription, | 2172 CompareFrame(kDescription, |
2181 *frame, | 2173 *frame, |
2182 IsSpdy2() ? kV2FrameData : kV3FrameData, | 2174 IsSpdy2() ? kV2FrameData : kV3FrameData, |
2183 IsSpdy2() ? arraysize(kV2FrameData) : arraysize(kV3FrameData)); | 2175 IsSpdy2() ? arraysize(kV2FrameData) : arraysize(kV3FrameData)); |
2184 EXPECT_EQ(SpdyFramer::kInvalidStream, | |
2185 SpdyFramer::GetControlFrameStreamId(frame.get())); | |
2186 } | 2176 } |
2187 | 2177 |
2188 { | 2178 { |
2189 const char kDescription[] = "GOAWAY frame with max stream ID, status"; | 2179 const char kDescription[] = "GOAWAY frame with max stream ID, status"; |
2190 const unsigned char kV2FrameData[] = { | 2180 const unsigned char kV2FrameData[] = { |
2191 0x80, spdy_version_, 0x00, 0x07, | 2181 0x80, spdy_version_, 0x00, 0x07, |
2192 0x00, 0x00, 0x00, 0x04, | 2182 0x00, 0x00, 0x00, 0x04, |
2193 0x7f, 0xff, 0xff, 0xff, | 2183 0x7f, 0xff, 0xff, 0xff, |
2194 }; | 2184 }; |
2195 const unsigned char kV3FrameData[] = { | 2185 const unsigned char kV3FrameData[] = { |
(...skipping 200 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2396 const char kDescription[] = "WINDOW_UPDATE frame"; | 2386 const char kDescription[] = "WINDOW_UPDATE frame"; |
2397 const unsigned char kFrameData[] = { | 2387 const unsigned char kFrameData[] = { |
2398 0x80, spdy_version_, 0x00, 0x09, | 2388 0x80, spdy_version_, 0x00, 0x09, |
2399 0x00, 0x00, 0x00, 0x08, | 2389 0x00, 0x00, 0x00, 0x08, |
2400 0x00, 0x00, 0x00, 0x01, | 2390 0x00, 0x00, 0x00, 0x01, |
2401 0x00, 0x00, 0x00, 0x01, | 2391 0x00, 0x00, 0x00, 0x01, |
2402 }; | 2392 }; |
2403 scoped_ptr<SpdyWindowUpdateControlFrame> frame( | 2393 scoped_ptr<SpdyWindowUpdateControlFrame> frame( |
2404 framer.CreateWindowUpdate(1, 1)); | 2394 framer.CreateWindowUpdate(1, 1)); |
2405 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); | 2395 CompareFrame(kDescription, *frame, kFrameData, arraysize(kFrameData)); |
2406 EXPECT_EQ(1u, SpdyFramer::GetControlFrameStreamId(frame.get())); | |
2407 } | 2396 } |
2408 | 2397 |
2409 { | 2398 { |
2410 const char kDescription[] = "WINDOW_UPDATE frame with max stream ID"; | 2399 const char kDescription[] = "WINDOW_UPDATE frame with max stream ID"; |
2411 const unsigned char kFrameData[] = { | 2400 const unsigned char kFrameData[] = { |
2412 0x80, spdy_version_, 0x00, 0x09, | 2401 0x80, spdy_version_, 0x00, 0x09, |
2413 0x00, 0x00, 0x00, 0x08, | 2402 0x00, 0x00, 0x00, 0x08, |
2414 0x7f, 0xff, 0xff, 0xff, | 2403 0x7f, 0xff, 0xff, 0xff, |
2415 0x00, 0x00, 0x00, 0x01, | 2404 0x00, 0x00, 0x00, 0x01, |
2416 }; | 2405 }; |
(...skipping 1129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
3546 const uint32 kWireFormat = htonl(IsSpdy2() ? 0x04030201 : 0x01020304); | 3535 const uint32 kWireFormat = htonl(IsSpdy2() ? 0x04030201 : 0x01020304); |
3547 | 3536 |
3548 SettingsFlagsAndId id_and_flags = | 3537 SettingsFlagsAndId id_and_flags = |
3549 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); | 3538 SettingsFlagsAndId::FromWireFormat(spdy_version_, kWireFormat); |
3550 EXPECT_EQ(kId, id_and_flags.id()); | 3539 EXPECT_EQ(kId, id_and_flags.id()); |
3551 EXPECT_EQ(kFlags, id_and_flags.flags()); | 3540 EXPECT_EQ(kFlags, id_and_flags.flags()); |
3552 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); | 3541 EXPECT_EQ(kWireFormat, id_and_flags.GetWireFormat(spdy_version_)); |
3553 } | 3542 } |
3554 | 3543 |
3555 } // namespace net | 3544 } // namespace net |
OLD | NEW |