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 2021 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2032 if (!IsSpdy2() && !IsSpdy3()) { | 2032 if (!IsSpdy2() && !IsSpdy3()) { |
2033 // SYN_STREAM not supported for SPDY>3 | 2033 // SYN_STREAM not supported for SPDY>3 |
2034 return; | 2034 return; |
2035 } | 2035 } |
2036 SpdyFramer framer(spdy_version_); | 2036 SpdyFramer framer(spdy_version_); |
2037 framer.set_enable_compression(true); | 2037 framer.set_enable_compression(true); |
2038 | 2038 |
2039 { | 2039 { |
2040 const char kDescription[] = | 2040 const char kDescription[] = |
2041 "SYN_STREAM frame, low pri, no FIN"; | 2041 "SYN_STREAM frame, low pri, no FIN"; |
| 2042 const SpdyPriority priority = IsSpdy2() ? 2 : 4; |
2042 | 2043 |
2043 const SpdyPriority priority = IsSpdy2() ? 2 : 4; | |
2044 const unsigned char kV2FrameData[] = { | 2044 const unsigned char kV2FrameData[] = { |
2045 0x80, spdy_version_ch_, 0x00, 0x01, | 2045 0x80, spdy_version_ch_, 0x00, 0x01, |
2046 0x00, 0x00, 0x00, 0x36, | 2046 0x00, 0x00, 0x00, 0x36, |
2047 0x00, 0x00, 0x00, 0x01, | 2047 0x00, 0x00, 0x00, 0x01, |
2048 0x00, 0x00, 0x00, 0x00, | 2048 0x00, 0x00, 0x00, 0x00, |
2049 0x80, 0x00, 0x38, 0xea, | 2049 0x80, 0x00, 0x38, 0xea, |
2050 0xdf, 0xa2, 0x51, 0xb2, | 2050 0xdf, 0xa2, 0x51, 0xb2, |
2051 0x62, 0x60, 0x62, 0x60, | 2051 0x62, 0x60, 0x62, 0x60, |
2052 0x4e, 0x4a, 0x2c, 0x62, | 2052 0x4e, 0x4a, 0x2c, 0x62, |
2053 0x60, 0x06, 0x08, 0xa0, | 2053 0x60, 0x06, 0x08, 0xa0, |
(...skipping 16 matching lines...) Expand all Loading... |
2070 0xC2, 0x4B, 0x4A, 0x04, | 2070 0xC2, 0x4B, 0x4A, 0x04, |
2071 0xE5, 0x0B, 0x66, 0x80, | 2071 0xE5, 0x0B, 0x66, 0x80, |
2072 0x00, 0x4A, 0xCB, 0xCF, | 2072 0x00, 0x4A, 0xCB, 0xCF, |
2073 0x07, 0x08, 0x20, 0x10, | 2073 0x07, 0x08, 0x20, 0x10, |
2074 0x95, 0x96, 0x9F, 0x0F, | 2074 0x95, 0x96, 0x9F, 0x0F, |
2075 0xA2, 0x00, 0x02, 0x28, | 2075 0xA2, 0x00, 0x02, 0x28, |
2076 0x29, 0xB1, 0x08, 0x20, | 2076 0x29, 0xB1, 0x08, 0x20, |
2077 0x80, 0x00, 0x00, 0x00, | 2077 0x80, 0x00, 0x00, 0x00, |
2078 0x00, 0xFF, 0xFF, | 2078 0x00, 0xFF, 0xFF, |
2079 }; | 2079 }; |
| 2080 const unsigned char kV2SIMDFrameData[] = { |
| 2081 0x80, spdy_version_ch_, 0x00, 0x01, |
| 2082 0x00, 0x00, 0x00, 0x33, |
| 2083 0x00, 0x00, 0x00, 0x01, |
| 2084 0x00, 0x00, 0x00, 0x00, |
| 2085 0x80, 0x00, 0x38, 0xea, |
| 2086 0xdf, 0xa2, 0x51, 0xb2, |
| 2087 0x62, 0x60, 0x62, 0x60, |
| 2088 0x4e, 0x4a, 0x2c, 0x62, |
| 2089 0x60, 0x06, 0x08, 0xa0, |
| 2090 0xb4, 0xfc, 0x7c, 0x80, |
| 2091 0x00, 0x62, 0x60, 0x06, |
| 2092 0x13, 0x00, 0x01, 0x94, |
| 2093 0x94, 0x58, 0x04, 0x10, |
| 2094 0x40, 0x00, 0x00, 0x00, |
| 2095 0x00, 0xff, 0xff, |
| 2096 }; |
| 2097 const unsigned char kV3SIMDFrameData[] = { |
| 2098 0x80, spdy_version_ch_, 0x00, 0x01, |
| 2099 0x00, 0x00, 0x00, 0x32, |
| 2100 0x00, 0x00, 0x00, 0x01, |
| 2101 0x00, 0x00, 0x00, 0x00, |
| 2102 0x80, 0x00, 0x38, 0xea, |
| 2103 0xe3, 0xc6, 0xa7, 0xc2, |
| 2104 0x02, 0xe5, 0x0e, 0x50, |
| 2105 0xc2, 0x4b, 0x4a, 0x04, |
| 2106 0xe5, 0x0b, 0x66, 0x80, |
| 2107 0x00, 0x4a, 0xcb, 0xcf, |
| 2108 0x07, 0x08, 0x20, 0x24, |
| 2109 0x0a, 0x20, 0x80, 0x92, |
| 2110 0x12, 0x8b, 0x00, 0x02, |
| 2111 0x08, 0x00, 0x00, 0x00, |
| 2112 0xff, 0xff, |
| 2113 }; |
| 2114 |
2080 SpdySynStreamIR syn_stream(1); | 2115 SpdySynStreamIR syn_stream(1); |
2081 syn_stream.set_priority(priority); | 2116 syn_stream.set_priority(priority); |
2082 syn_stream.SetHeader("bar", "foo"); | 2117 syn_stream.SetHeader("bar", "foo"); |
2083 syn_stream.SetHeader("foo", "bar"); | 2118 syn_stream.SetHeader("foo", "bar"); |
2084 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); | 2119 scoped_ptr<SpdyFrame> frame(framer.SerializeSynStream(syn_stream)); |
| 2120 const unsigned char* frame_data = |
| 2121 reinterpret_cast<const unsigned char*>(frame->data()); |
2085 if (IsSpdy2()) { | 2122 if (IsSpdy2()) { |
2086 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2123 // Try comparing with SIMD version, if that fails, do a failing check |
| 2124 // with pretty printing against non-SIMD version |
| 2125 if (memcmp(frame_data, |
| 2126 kV2SIMDFrameData, |
| 2127 std::min(arraysize(kV2SIMDFrameData), frame->size())) != 0) { |
| 2128 CompareCharArraysWithHexError(kDescription, |
| 2129 frame_data, |
| 2130 frame->size(), |
| 2131 kV2FrameData, |
| 2132 arraysize(kV2FrameData)); |
| 2133 } |
2087 } else if (IsSpdy3()) { | 2134 } else if (IsSpdy3()) { |
2088 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2135 if (memcmp(frame_data, |
| 2136 kV3SIMDFrameData, |
| 2137 std::min(arraysize(kV3SIMDFrameData), frame->size())) != 0) { |
| 2138 CompareCharArraysWithHexError(kDescription, |
| 2139 frame_data, |
| 2140 frame->size(), |
| 2141 kV3FrameData, |
| 2142 arraysize(kV3FrameData)); |
| 2143 } |
2089 } else { | 2144 } else { |
2090 LOG(FATAL) << "Unsupported version in test."; | 2145 LOG(FATAL) << "Unsupported version in test."; |
2091 } | 2146 } |
2092 } | 2147 } |
2093 } | 2148 } |
2094 #endif // !defined(USE_SYSTEM_ZLIB) | 2149 #endif // !defined(USE_SYSTEM_ZLIB) |
2095 | 2150 |
2096 TEST_P(SpdyFramerTest, CreateSynReplyUncompressed) { | 2151 TEST_P(SpdyFramerTest, CreateSynReplyUncompressed) { |
2097 if (spdy_version_ > SPDY3) { | 2152 if (spdy_version_ > SPDY3) { |
2098 // SYN_REPLY unsupported in SPDY>3 | 2153 // SYN_REPLY unsupported in SPDY>3 |
(...skipping 168 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2267 0x4a, 0x04, 0xe5, 0x0b, | 2322 0x4a, 0x04, 0xe5, 0x0b, |
2268 0x66, 0x80, 0x00, 0x4a, | 2323 0x66, 0x80, 0x00, 0x4a, |
2269 0xcb, 0xcf, 0x07, 0x08, | 2324 0xcb, 0xcf, 0x07, 0x08, |
2270 0x20, 0x10, 0x95, 0x96, | 2325 0x20, 0x10, 0x95, 0x96, |
2271 0x9f, 0x0f, 0xa2, 0x00, | 2326 0x9f, 0x0f, 0xa2, 0x00, |
2272 0x02, 0x28, 0x29, 0xb1, | 2327 0x02, 0x28, 0x29, 0xb1, |
2273 0x08, 0x20, 0x80, 0x00, | 2328 0x08, 0x20, 0x80, 0x00, |
2274 0x00, 0x00, 0x00, 0xff, | 2329 0x00, 0x00, 0x00, 0xff, |
2275 0xff, | 2330 0xff, |
2276 }; | 2331 }; |
| 2332 const unsigned char kV2SIMDFrameData[] = { |
| 2333 0x80, spdy_version_ch_, 0x00, 0x02, |
| 2334 0x00, 0x00, 0x00, 0x2f, |
| 2335 0x00, 0x00, 0x00, 0x01, |
| 2336 0x00, 0x00, 0x38, 0xea, |
| 2337 0xdf, 0xa2, 0x51, 0xb2, |
| 2338 0x62, 0x60, 0x62, 0x60, |
| 2339 0x4e, 0x4a, 0x2c, 0x62, |
| 2340 0x60, 0x06, 0x08, 0xa0, |
| 2341 0xb4, 0xfc, 0x7c, 0x80, |
| 2342 0x00, 0x62, 0x60, 0x06, |
| 2343 0x13, 0x00, 0x01, 0x94, |
| 2344 0x94, 0x58, 0x04, 0x10, |
| 2345 0x40, 0x00, 0x00, 0x00, |
| 2346 0x00, 0xff, 0xff, |
| 2347 }; |
| 2348 const unsigned char kV3SIMDFrameData[] = { |
| 2349 0x80, spdy_version_ch_, 0x00, 0x02, |
| 2350 0x00, 0x00, 0x00, 0x2c, |
| 2351 0x00, 0x00, 0x00, 0x01, |
| 2352 0x38, 0xea, 0xe3, 0xc6, |
| 2353 0xa7, 0xc2, 0x02, 0xe5, |
| 2354 0x0e, 0x50, 0xc2, 0x4b, |
| 2355 0x4a, 0x04, 0xe5, 0x0b, |
| 2356 0x66, 0x80, 0x00, 0x4a, |
| 2357 0xcb, 0xcf, 0x07, 0x08, |
| 2358 0x20, 0x24, 0x0a, 0x20, |
| 2359 0x80, 0x92, 0x12, 0x8b, |
| 2360 0x00, 0x02, 0x08, 0x00, |
| 2361 0x00, 0x00, 0xff, 0xff, |
| 2362 }; |
| 2363 |
2277 SpdySynReplyIR syn_reply(1); | 2364 SpdySynReplyIR syn_reply(1); |
2278 syn_reply.SetHeader("bar", "foo"); | 2365 syn_reply.SetHeader("bar", "foo"); |
2279 syn_reply.SetHeader("foo", "bar"); | 2366 syn_reply.SetHeader("foo", "bar"); |
2280 scoped_ptr<SpdyFrame> frame(framer.SerializeSynReply(syn_reply)); | 2367 scoped_ptr<SpdyFrame> frame(framer.SerializeSynReply(syn_reply)); |
| 2368 const unsigned char* frame_data = |
| 2369 reinterpret_cast<const unsigned char*>(frame->data()); |
2281 if (IsSpdy2()) { | 2370 if (IsSpdy2()) { |
2282 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 2371 // Try comparing with SIMD version, if that fails, do a failing check |
| 2372 // with pretty printing against non-SIMD version |
| 2373 if (memcmp(frame_data, |
| 2374 kV2SIMDFrameData, |
| 2375 std::min(arraysize(kV2SIMDFrameData), frame->size())) != 0) { |
| 2376 CompareCharArraysWithHexError(kDescription, |
| 2377 frame_data, |
| 2378 frame->size(), |
| 2379 kV2FrameData, |
| 2380 arraysize(kV2FrameData)); |
| 2381 } |
2283 } else if (IsSpdy3()) { | 2382 } else if (IsSpdy3()) { |
2284 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 2383 if (memcmp(frame_data, |
| 2384 kV3SIMDFrameData, |
| 2385 std::min(arraysize(kV3SIMDFrameData), frame->size())) != 0) { |
| 2386 CompareCharArraysWithHexError(kDescription, |
| 2387 frame_data, |
| 2388 frame->size(), |
| 2389 kV3FrameData, |
| 2390 arraysize(kV3FrameData)); |
| 2391 } |
2285 } else { | 2392 } else { |
2286 LOG(FATAL) << "Unsupported version in test."; | 2393 LOG(FATAL) << "Unsupported version in test."; |
2287 } | 2394 } |
2288 } | 2395 } |
2289 } | 2396 } |
2290 #endif // !defined(USE_SYSTEM_ZLIB) | 2397 #endif // !defined(USE_SYSTEM_ZLIB) |
2291 | 2398 |
2292 TEST_P(SpdyFramerTest, CreateRstStream) { | 2399 TEST_P(SpdyFramerTest, CreateRstStream) { |
2293 SpdyFramer framer(spdy_version_); | 2400 SpdyFramer framer(spdy_version_); |
2294 | 2401 |
(...skipping 549 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2844 0x4a, 0x04, 0xe5, 0x0b, | 2951 0x4a, 0x04, 0xe5, 0x0b, |
2845 0x66, 0x80, 0x00, 0x4a, | 2952 0x66, 0x80, 0x00, 0x4a, |
2846 0xcb, 0xcf, 0x07, 0x08, | 2953 0xcb, 0xcf, 0x07, 0x08, |
2847 0x20, 0x10, 0x95, 0x96, | 2954 0x20, 0x10, 0x95, 0x96, |
2848 0x9f, 0x0f, 0xa2, 0x00, | 2955 0x9f, 0x0f, 0xa2, 0x00, |
2849 0x02, 0x28, 0x29, 0xb1, | 2956 0x02, 0x28, 0x29, 0xb1, |
2850 0x08, 0x20, 0x80, 0x00, | 2957 0x08, 0x20, 0x80, 0x00, |
2851 0x00, 0x00, 0x00, 0xff, | 2958 0x00, 0x00, 0x00, 0xff, |
2852 0xff, | 2959 0xff, |
2853 }; | 2960 }; |
| 2961 const unsigned char kV2SIMDFrameData[] = { |
| 2962 0x80, spdy_version_ch_, 0x00, 0x08, |
| 2963 0x00, 0x00, 0x00, 0x2f, |
| 2964 0x00, 0x00, 0x00, 0x01, |
| 2965 0x00, 0x00, 0x38, 0xea, |
| 2966 0xdf, 0xa2, 0x51, 0xb2, |
| 2967 0x62, 0x60, 0x62, 0x60, |
| 2968 0x4e, 0x4a, 0x2c, 0x62, |
| 2969 0x60, 0x06, 0x08, 0xa0, |
| 2970 0xb4, 0xfc, 0x7c, 0x80, |
| 2971 0x00, 0x62, 0x60, 0x06, |
| 2972 0x13, 0x00, 0x01, 0x94, |
| 2973 0x94, 0x58, 0x04, 0x10, |
| 2974 0x40, 0x00, 0x00, 0x00, |
| 2975 0x00, 0xff, 0xff, |
| 2976 }; |
| 2977 const unsigned char kV3SIMDFrameData[] = { |
| 2978 0x80, spdy_version_ch_, 0x00, 0x08, |
| 2979 0x00, 0x00, 0x00, 0x2c, |
| 2980 0x00, 0x00, 0x00, 0x01, |
| 2981 0x38, 0xea, 0xe3, 0xc6, |
| 2982 0xa7, 0xc2, 0x02, 0xe5, |
| 2983 0x0e, 0x50, 0xc2, 0x4b, |
| 2984 0x4a, 0x04, 0xe5, 0x0b, |
| 2985 0x66, 0x80, 0x00, 0x4a, |
| 2986 0xcb, 0xcf, 0x07, 0x08, |
| 2987 0x20, 0x24, 0x0a, 0x20, |
| 2988 0x80, 0x92, 0x12, 0x8b, |
| 2989 0x00, 0x02, 0x08, 0x00, |
| 2990 0x00, 0x00, 0xff, 0xff, |
| 2991 }; |
| 2992 |
2854 SpdyHeadersIR headers_ir(1); | 2993 SpdyHeadersIR headers_ir(1); |
2855 headers_ir.SetHeader("bar", "foo"); | 2994 headers_ir.SetHeader("bar", "foo"); |
2856 headers_ir.SetHeader("foo", "bar"); | 2995 headers_ir.SetHeader("foo", "bar"); |
2857 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers_ir)); | 2996 scoped_ptr<SpdyFrame> frame(framer.SerializeHeaders(headers_ir)); |
| 2997 const unsigned char* frame_data = |
| 2998 reinterpret_cast<const unsigned char*>(frame->data()); |
2858 if (IsSpdy2()) { | 2999 if (IsSpdy2()) { |
2859 CompareFrame(kDescription, *frame, kV2FrameData, arraysize(kV2FrameData)); | 3000 // Try comparing with SIMD version, if that fails, do a failing check |
| 3001 // with pretty printing against non-SIMD version |
| 3002 if (memcmp(frame_data, |
| 3003 kV2SIMDFrameData, |
| 3004 std::min(arraysize(kV2SIMDFrameData), frame->size())) != 0) { |
| 3005 CompareCharArraysWithHexError(kDescription, |
| 3006 frame_data, |
| 3007 frame->size(), |
| 3008 kV2FrameData, |
| 3009 arraysize(kV2FrameData)); |
| 3010 } |
2860 } else if (IsSpdy3()) { | 3011 } else if (IsSpdy3()) { |
2861 CompareFrame(kDescription, *frame, kV3FrameData, arraysize(kV3FrameData)); | 3012 if (memcmp(frame_data, |
| 3013 kV3SIMDFrameData, |
| 3014 std::min(arraysize(kV3SIMDFrameData), frame->size())) != 0) { |
| 3015 CompareCharArraysWithHexError(kDescription, |
| 3016 frame_data, |
| 3017 frame->size(), |
| 3018 kV3FrameData, |
| 3019 arraysize(kV3FrameData)); |
| 3020 } |
2862 } else { | 3021 } else { |
2863 // Deflate compression doesn't apply to HPACK. | 3022 // Deflate compression doesn't apply to HPACK. |
2864 } | 3023 } |
2865 } | 3024 } |
2866 } | 3025 } |
2867 #endif // !defined(USE_SYSTEM_ZLIB) | 3026 #endif // !defined(USE_SYSTEM_ZLIB) |
2868 | 3027 |
2869 TEST_P(SpdyFramerTest, CreateWindowUpdate) { | 3028 TEST_P(SpdyFramerTest, CreateWindowUpdate) { |
2870 SpdyFramer framer(spdy_version_); | 3029 SpdyFramer framer(spdy_version_); |
2871 | 3030 |
(...skipping 2667 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
5539 TestSpdyVisitor visitor(spdy_version_); | 5698 TestSpdyVisitor visitor(spdy_version_); |
5540 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); | 5699 visitor.SimulateInFramer(kFrameData, sizeof(kFrameData)); |
5541 | 5700 |
5542 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); | 5701 EXPECT_EQ(SpdyFramer::SPDY_ERROR, visitor.framer_.state()); |
5543 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, | 5702 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, |
5544 visitor.framer_.error_code()) | 5703 visitor.framer_.error_code()) |
5545 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); | 5704 << SpdyFramer::ErrorCodeToString(visitor.framer_.error_code()); |
5546 } | 5705 } |
5547 | 5706 |
5548 } // namespace net | 5707 } // namespace net |
OLD | NEW |