| 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 |