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 "net/spdy/core/spdy_framer.h" | 5 #include "net/spdy/core/spdy_framer.h" |
6 | 6 |
7 #include <stdlib.h> | 7 #include <stdlib.h> |
8 #include <string.h> | 8 #include <string.h> |
9 | 9 |
10 #include <algorithm> | 10 #include <algorithm> |
(...skipping 244 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
255 framer->SerializeHeaders(headers)); | 255 framer->SerializeHeaders(headers)); |
256 framer->hpack_encoder_.reset(nullptr); | 256 framer->hpack_encoder_.reset(nullptr); |
257 auto* saved_debug_visitor = framer->debug_visitor_; | 257 auto* saved_debug_visitor = framer->debug_visitor_; |
258 framer->debug_visitor_ = nullptr; | 258 framer->debug_visitor_ = nullptr; |
259 | 259 |
260 std::vector<SpdySerializedFrame> frame_list; | 260 std::vector<SpdySerializedFrame> frame_list; |
261 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); | 261 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); |
262 SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers)); | 262 SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers)); |
263 while (it.HasNextFrame()) { | 263 while (it.HasNextFrame()) { |
264 size_t size_before = frame_list_buffer.Size(); | 264 size_t size_before = frame_list_buffer.Size(); |
265 it.NextFrame(&frame_list_buffer); | 265 EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u); |
266 frame_list.emplace_back( | 266 frame_list.emplace_back( |
267 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, | 267 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, |
268 frame_list_buffer.Size() - size_before, false)); | 268 frame_list_buffer.Size() - size_before, false)); |
269 } | 269 } |
270 framer->debug_visitor_ = saved_debug_visitor; | 270 framer->debug_visitor_ = saved_debug_visitor; |
271 | 271 |
272 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); | 272 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); |
273 return serialized_headers_old_version; | 273 return serialized_headers_old_version; |
274 } | 274 } |
275 | 275 |
276 static SpdySerializedFrame SerializeHeaders(SpdyFramer* framer, | 276 static SpdySerializedFrame SerializeHeaders(SpdyFramer* framer, |
277 const SpdyHeadersIR& headers, | 277 const SpdyHeadersIR& headers, |
278 ArrayOutputBuffer* output) { | 278 ArrayOutputBuffer* output) { |
279 if (output == nullptr) { | 279 if (output == nullptr) { |
280 return SerializeHeaders(framer, headers); | 280 return SerializeHeaders(framer, headers); |
281 } | 281 } |
282 output->Reset(); | 282 output->Reset(); |
283 EXPECT_TRUE(framer->SerializeHeaders(headers, output)); | 283 EXPECT_TRUE(framer->SerializeHeaders(headers, output)); |
284 SpdySerializedFrame serialized_headers_old_version(output->Begin(), | 284 SpdySerializedFrame serialized_headers_old_version(output->Begin(), |
285 output->Size(), false); | 285 output->Size(), false); |
286 framer->hpack_encoder_.reset(nullptr); | 286 framer->hpack_encoder_.reset(nullptr); |
287 auto* saved_debug_visitor = framer->debug_visitor_; | 287 auto* saved_debug_visitor = framer->debug_visitor_; |
288 framer->debug_visitor_ = nullptr; | 288 framer->debug_visitor_ = nullptr; |
289 | 289 |
290 std::vector<SpdySerializedFrame> frame_list; | 290 std::vector<SpdySerializedFrame> frame_list; |
291 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); | 291 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); |
292 SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers)); | 292 SpdyFramer::SpdyHeaderFrameIterator it(framer, CloneSpdyHeadersIR(headers)); |
293 while (it.HasNextFrame()) { | 293 while (it.HasNextFrame()) { |
294 size_t size_before = frame_list_buffer.Size(); | 294 size_t size_before = frame_list_buffer.Size(); |
295 it.NextFrame(&frame_list_buffer); | 295 EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u); |
296 frame_list.emplace_back( | 296 frame_list.emplace_back( |
297 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, | 297 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, |
298 frame_list_buffer.Size() - size_before, false)); | 298 frame_list_buffer.Size() - size_before, false)); |
299 } | 299 } |
300 framer->debug_visitor_ = saved_debug_visitor; | 300 framer->debug_visitor_ = saved_debug_visitor; |
301 | 301 |
302 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); | 302 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); |
303 return serialized_headers_old_version; | 303 return serialized_headers_old_version; |
304 } | 304 } |
305 | 305 |
(...skipping 19 matching lines...) Expand all Loading... |
325 auto* saved_debug_visitor = framer->debug_visitor_; | 325 auto* saved_debug_visitor = framer->debug_visitor_; |
326 framer->debug_visitor_ = nullptr; | 326 framer->debug_visitor_ = nullptr; |
327 | 327 |
328 std::vector<SpdySerializedFrame> frame_list; | 328 std::vector<SpdySerializedFrame> frame_list; |
329 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); | 329 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); |
330 frame_list_buffer.Reset(); | 330 frame_list_buffer.Reset(); |
331 SpdyFramer::SpdyPushPromiseFrameIterator it( | 331 SpdyFramer::SpdyPushPromiseFrameIterator it( |
332 framer, CloneSpdyPushPromiseIR(push_promise)); | 332 framer, CloneSpdyPushPromiseIR(push_promise)); |
333 while (it.HasNextFrame()) { | 333 while (it.HasNextFrame()) { |
334 size_t size_before = frame_list_buffer.Size(); | 334 size_t size_before = frame_list_buffer.Size(); |
335 it.NextFrame(&frame_list_buffer); | 335 EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u); |
336 frame_list.emplace_back( | 336 frame_list.emplace_back( |
337 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, | 337 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, |
338 frame_list_buffer.Size() - size_before, false)); | 338 frame_list_buffer.Size() - size_before, false)); |
339 } | 339 } |
340 framer->debug_visitor_ = saved_debug_visitor; | 340 framer->debug_visitor_ = saved_debug_visitor; |
341 | 341 |
342 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); | 342 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); |
343 return serialized_headers_old_version; | 343 return serialized_headers_old_version; |
344 } | 344 } |
345 | 345 |
(...skipping 12 matching lines...) Expand all Loading... |
358 auto* saved_debug_visitor = framer->debug_visitor_; | 358 auto* saved_debug_visitor = framer->debug_visitor_; |
359 framer->debug_visitor_ = nullptr; | 359 framer->debug_visitor_ = nullptr; |
360 | 360 |
361 std::vector<SpdySerializedFrame> frame_list; | 361 std::vector<SpdySerializedFrame> frame_list; |
362 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); | 362 ArrayOutputBuffer frame_list_buffer(frame_list_char, buffer_size); |
363 frame_list_buffer.Reset(); | 363 frame_list_buffer.Reset(); |
364 SpdyFramer::SpdyPushPromiseFrameIterator it( | 364 SpdyFramer::SpdyPushPromiseFrameIterator it( |
365 framer, CloneSpdyPushPromiseIR(push_promise)); | 365 framer, CloneSpdyPushPromiseIR(push_promise)); |
366 while (it.HasNextFrame()) { | 366 while (it.HasNextFrame()) { |
367 size_t size_before = frame_list_buffer.Size(); | 367 size_t size_before = frame_list_buffer.Size(); |
368 it.NextFrame(&frame_list_buffer); | 368 EXPECT_GT(it.NextFrame(&frame_list_buffer), 0u); |
369 frame_list.emplace_back( | 369 frame_list.emplace_back( |
370 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, | 370 SpdySerializedFrame(frame_list_buffer.Begin() + size_before, |
371 frame_list_buffer.Size() - size_before, false)); | 371 frame_list_buffer.Size() - size_before, false)); |
372 } | 372 } |
373 framer->debug_visitor_ = saved_debug_visitor; | 373 framer->debug_visitor_ = saved_debug_visitor; |
374 | 374 |
375 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); | 375 EXPECT_THAT(serialized_headers_old_version, IsFrameUnionOf(&frame_list)); |
376 return serialized_headers_old_version; | 376 return serialized_headers_old_version; |
377 } | 377 } |
378 }; | 378 }; |
(...skipping 769 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1148 // Test that if we receive a PRIORITY with stream ID zero, we signal an error | 1148 // Test that if we receive a PRIORITY with stream ID zero, we signal an error |
1149 // (but don't crash). | 1149 // (but don't crash). |
1150 TEST_P(SpdyFramerTest, PriorityWithStreamIdZero) { | 1150 TEST_P(SpdyFramerTest, PriorityWithStreamIdZero) { |
1151 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; | 1151 testing::StrictMock<test::MockSpdyFramerVisitor> visitor; |
1152 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 1152 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
1153 framer.set_visitor(&visitor); | 1153 framer.set_visitor(&visitor); |
1154 | 1154 |
1155 SpdyPriorityIR priority_ir(0, 1, 16, true); | 1155 SpdyPriorityIR priority_ir(0, 1, 16, true); |
1156 SpdySerializedFrame frame(framer.SerializeFrame(priority_ir)); | 1156 SpdySerializedFrame frame(framer.SerializeFrame(priority_ir)); |
1157 if (use_output_) { | 1157 if (use_output_) { |
1158 ASSERT_TRUE(framer.SerializeFrame(priority_ir, &output_)); | 1158 EXPECT_EQ(framer.SerializeFrame(priority_ir, &output_), frame.size()); |
1159 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); | 1159 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); |
1160 } | 1160 } |
1161 | 1161 |
1162 // We shouldn't have to read the whole frame before we signal an error. | 1162 // We shouldn't have to read the whole frame before we signal an error. |
1163 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); | 1163 EXPECT_CALL(visitor, OnError(testing::Eq(&framer))); |
1164 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); | 1164 EXPECT_GT(frame.size(), framer.ProcessInput(frame.data(), frame.size())); |
1165 EXPECT_TRUE(framer.HasError()); | 1165 EXPECT_TRUE(framer.HasError()); |
1166 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) | 1166 EXPECT_EQ(SpdyFramer::SPDY_INVALID_STREAM_ID, framer.spdy_framer_error()) |
1167 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); | 1167 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); |
1168 } | 1168 } |
(...skipping 1528 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2697 '4', '2', ';', ' ', 'v', '=', '"', '2', '4', '"'}; | 2697 '4', '2', ';', ' ', 'v', '=', '"', '2', '4', '"'}; |
2698 SpdyAltSvcIR altsvc_ir(3); | 2698 SpdyAltSvcIR altsvc_ir(3); |
2699 altsvc_ir.set_origin("origin"); | 2699 altsvc_ir.set_origin("origin"); |
2700 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( | 2700 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( |
2701 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector())); | 2701 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector())); |
2702 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( | 2702 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( |
2703 "p\"=i:d", "h_\\o\"st", 123, 42, | 2703 "p\"=i:d", "h_\\o\"st", 123, 42, |
2704 SpdyAltSvcWireFormat::VersionVector{24})); | 2704 SpdyAltSvcWireFormat::VersionVector{24})); |
2705 SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir)); | 2705 SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir)); |
2706 if (use_output_) { | 2706 if (use_output_) { |
2707 ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_)); | 2707 EXPECT_EQ(framer.SerializeFrame(altsvc_ir, &output_), frame.size()); |
2708 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); | 2708 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); |
2709 } | 2709 } |
2710 CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData)); | 2710 CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData)); |
2711 } | 2711 } |
2712 | 2712 |
2713 TEST_P(SpdyFramerTest, CreatePriority) { | 2713 TEST_P(SpdyFramerTest, CreatePriority) { |
2714 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 2714 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
2715 | 2715 |
2716 const char kDescription[] = "PRIORITY frame"; | 2716 const char kDescription[] = "PRIORITY frame"; |
2717 const unsigned char kFrameData[] = { | 2717 const unsigned char kFrameData[] = { |
2718 0x00, 0x00, 0x05, // Length: 5 | 2718 0x00, 0x00, 0x05, // Length: 5 |
2719 0x02, // Type: PRIORITY | 2719 0x02, // Type: PRIORITY |
2720 0x00, // Flags: none | 2720 0x00, // Flags: none |
2721 0x00, 0x00, 0x00, 0x02, // Stream: 2 | 2721 0x00, 0x00, 0x00, 0x02, // Stream: 2 |
2722 0x80, 0x00, 0x00, 0x01, // Parent: 1 (Exclusive) | 2722 0x80, 0x00, 0x00, 0x01, // Parent: 1 (Exclusive) |
2723 0x10, // Weight: 17 | 2723 0x10, // Weight: 17 |
2724 }; | 2724 }; |
2725 SpdyPriorityIR priority_ir(2, 1, 17, true); | 2725 SpdyPriorityIR priority_ir(2, 1, 17, true); |
2726 SpdySerializedFrame frame(framer.SerializeFrame(priority_ir)); | 2726 SpdySerializedFrame frame(framer.SerializeFrame(priority_ir)); |
2727 if (use_output_) { | 2727 if (use_output_) { |
2728 ASSERT_TRUE(framer.SerializeFrame(priority_ir, &output_)); | 2728 EXPECT_EQ(framer.SerializeFrame(priority_ir, &output_), frame.size()); |
2729 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); | 2729 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); |
2730 } | 2730 } |
2731 CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData)); | 2731 CompareFrame(kDescription, frame, kFrameData, arraysize(kFrameData)); |
2732 } | 2732 } |
2733 | 2733 |
2734 TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlock) { | 2734 TEST_P(SpdyFramerTest, ReadCompressedHeadersHeaderBlock) { |
2735 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); | 2735 SpdyFramer framer(SpdyFramer::ENABLE_COMPRESSION); |
2736 SpdyHeadersIR headers_ir(1); | 2736 SpdyHeadersIR headers_ir(1); |
2737 headers_ir.SetHeader("alpha", "beta"); | 2737 headers_ir.SetHeader("alpha", "beta"); |
2738 headers_ir.SetHeader("gamma", "delta"); | 2738 headers_ir.SetHeader("gamma", "delta"); |
(...skipping 64 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
2803 // enough to cause an overflow. | 2803 // enough to cause an overflow. |
2804 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); | 2804 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); |
2805 SpdyString big_valuex(kBigValueSize, 'x'); | 2805 SpdyString big_valuex(kBigValueSize, 'x'); |
2806 headers->SetHeader("aa", big_valuex); | 2806 headers->SetHeader("aa", big_valuex); |
2807 SpdyString big_valuez(kBigValueSize, 'z'); | 2807 SpdyString big_valuez(kBigValueSize, 'z'); |
2808 headers->SetHeader("bb", big_valuez); | 2808 headers->SetHeader("bb", big_valuez); |
2809 | 2809 |
2810 SpdyFramer::SpdyHeaderFrameIterator frame_it(&framer, std::move(headers)); | 2810 SpdyFramer::SpdyHeaderFrameIterator frame_it(&framer, std::move(headers)); |
2811 | 2811 |
2812 EXPECT_TRUE(frame_it.HasNextFrame()); | 2812 EXPECT_TRUE(frame_it.HasNextFrame()); |
2813 EXPECT_TRUE(frame_it.NextFrame(&output_)); | 2813 EXPECT_GT(frame_it.NextFrame(&output_), 0u); |
2814 SpdySerializedFrame headers_frame(output_.Begin(), output_.Size(), false); | 2814 SpdySerializedFrame headers_frame(output_.Begin(), output_.Size(), false); |
2815 EXPECT_EQ(headers_frame.size(), | 2815 EXPECT_EQ(headers_frame.size(), |
2816 TestSpdyVisitor::sent_control_frame_max_size()); | 2816 TestSpdyVisitor::sent_control_frame_max_size()); |
2817 | 2817 |
2818 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); | 2818 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); |
2819 visitor.SimulateInFramer( | 2819 visitor.SimulateInFramer( |
2820 reinterpret_cast<unsigned char*>(headers_frame.data()), | 2820 reinterpret_cast<unsigned char*>(headers_frame.data()), |
2821 headers_frame.size()); | 2821 headers_frame.size()); |
2822 EXPECT_TRUE(visitor.header_buffer_valid_); | 2822 EXPECT_TRUE(visitor.header_buffer_valid_); |
2823 EXPECT_EQ(0, visitor.error_count_); | 2823 EXPECT_EQ(0, visitor.error_count_); |
2824 EXPECT_EQ(1, visitor.headers_frame_count_); | 2824 EXPECT_EQ(1, visitor.headers_frame_count_); |
2825 EXPECT_EQ(0, visitor.continuation_count_); | 2825 EXPECT_EQ(0, visitor.continuation_count_); |
2826 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2826 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2827 | 2827 |
2828 output_.Reset(); | 2828 output_.Reset(); |
2829 EXPECT_TRUE(frame_it.HasNextFrame()); | 2829 EXPECT_TRUE(frame_it.HasNextFrame()); |
2830 EXPECT_TRUE(frame_it.NextFrame(&output_)); | 2830 EXPECT_GT(frame_it.NextFrame(&output_), 0u); |
2831 SpdySerializedFrame first_cont_frame(output_.Begin(), output_.Size(), false); | 2831 SpdySerializedFrame first_cont_frame(output_.Begin(), output_.Size(), false); |
2832 EXPECT_EQ(first_cont_frame.size(), | 2832 EXPECT_EQ(first_cont_frame.size(), |
2833 TestSpdyVisitor::sent_control_frame_max_size()); | 2833 TestSpdyVisitor::sent_control_frame_max_size()); |
2834 | 2834 |
2835 visitor.SimulateInFramer( | 2835 visitor.SimulateInFramer( |
2836 reinterpret_cast<unsigned char*>(first_cont_frame.data()), | 2836 reinterpret_cast<unsigned char*>(first_cont_frame.data()), |
2837 first_cont_frame.size()); | 2837 first_cont_frame.size()); |
2838 EXPECT_TRUE(visitor.header_buffer_valid_); | 2838 EXPECT_TRUE(visitor.header_buffer_valid_); |
2839 EXPECT_EQ(0, visitor.error_count_); | 2839 EXPECT_EQ(0, visitor.error_count_); |
2840 EXPECT_EQ(1, visitor.headers_frame_count_); | 2840 EXPECT_EQ(1, visitor.headers_frame_count_); |
2841 EXPECT_EQ(1, visitor.continuation_count_); | 2841 EXPECT_EQ(1, visitor.continuation_count_); |
2842 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2842 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2843 | 2843 |
2844 output_.Reset(); | 2844 output_.Reset(); |
2845 EXPECT_TRUE(frame_it.HasNextFrame()); | 2845 EXPECT_TRUE(frame_it.HasNextFrame()); |
2846 EXPECT_TRUE(frame_it.NextFrame(&output_)); | 2846 EXPECT_GT(frame_it.NextFrame(&output_), 0u); |
2847 SpdySerializedFrame second_cont_frame(output_.Begin(), output_.Size(), false); | 2847 SpdySerializedFrame second_cont_frame(output_.Begin(), output_.Size(), false); |
2848 EXPECT_LT(second_cont_frame.size(), | 2848 EXPECT_LT(second_cont_frame.size(), |
2849 TestSpdyVisitor::sent_control_frame_max_size()); | 2849 TestSpdyVisitor::sent_control_frame_max_size()); |
2850 | 2850 |
2851 visitor.SimulateInFramer( | 2851 visitor.SimulateInFramer( |
2852 reinterpret_cast<unsigned char*>(second_cont_frame.data()), | 2852 reinterpret_cast<unsigned char*>(second_cont_frame.data()), |
2853 second_cont_frame.size()); | 2853 second_cont_frame.size()); |
2854 EXPECT_TRUE(visitor.header_buffer_valid_); | 2854 EXPECT_TRUE(visitor.header_buffer_valid_); |
2855 EXPECT_EQ(0, visitor.error_count_); | 2855 EXPECT_EQ(0, visitor.error_count_); |
2856 EXPECT_EQ(1, visitor.headers_frame_count_); | 2856 EXPECT_EQ(1, visitor.headers_frame_count_); |
(...skipping 15 matching lines...) Expand all Loading... |
2872 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); | 2872 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); |
2873 SpdyString big_valuex(kBigValueSize, 'x'); | 2873 SpdyString big_valuex(kBigValueSize, 'x'); |
2874 push_promise->SetHeader("aa", big_valuex); | 2874 push_promise->SetHeader("aa", big_valuex); |
2875 SpdyString big_valuez(kBigValueSize, 'z'); | 2875 SpdyString big_valuez(kBigValueSize, 'z'); |
2876 push_promise->SetHeader("bb", big_valuez); | 2876 push_promise->SetHeader("bb", big_valuez); |
2877 | 2877 |
2878 SpdyFramer::SpdyPushPromiseFrameIterator frame_it(&framer, | 2878 SpdyFramer::SpdyPushPromiseFrameIterator frame_it(&framer, |
2879 std::move(push_promise)); | 2879 std::move(push_promise)); |
2880 | 2880 |
2881 EXPECT_TRUE(frame_it.HasNextFrame()); | 2881 EXPECT_TRUE(frame_it.HasNextFrame()); |
2882 EXPECT_TRUE(frame_it.NextFrame(&output_)); | 2882 EXPECT_GT(frame_it.NextFrame(&output_), 0u); |
2883 SpdySerializedFrame push_promise_frame(output_.Begin(), output_.Size(), | 2883 SpdySerializedFrame push_promise_frame(output_.Begin(), output_.Size(), |
2884 false); | 2884 false); |
2885 EXPECT_EQ(push_promise_frame.size(), | 2885 EXPECT_EQ(push_promise_frame.size(), |
2886 TestSpdyVisitor::sent_control_frame_max_size()); | 2886 TestSpdyVisitor::sent_control_frame_max_size()); |
2887 | 2887 |
2888 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); | 2888 TestSpdyVisitor visitor(SpdyFramer::DISABLE_COMPRESSION); |
2889 visitor.SimulateInFramer( | 2889 visitor.SimulateInFramer( |
2890 reinterpret_cast<unsigned char*>(push_promise_frame.data()), | 2890 reinterpret_cast<unsigned char*>(push_promise_frame.data()), |
2891 push_promise_frame.size()); | 2891 push_promise_frame.size()); |
2892 EXPECT_TRUE(visitor.header_buffer_valid_); | 2892 EXPECT_TRUE(visitor.header_buffer_valid_); |
2893 EXPECT_EQ(0, visitor.error_count_); | 2893 EXPECT_EQ(0, visitor.error_count_); |
2894 EXPECT_EQ(1, visitor.push_promise_frame_count_); | 2894 EXPECT_EQ(1, visitor.push_promise_frame_count_); |
2895 EXPECT_EQ(0, visitor.continuation_count_); | 2895 EXPECT_EQ(0, visitor.continuation_count_); |
2896 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2896 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2897 | 2897 |
2898 EXPECT_TRUE(frame_it.HasNextFrame()); | 2898 EXPECT_TRUE(frame_it.HasNextFrame()); |
2899 output_.Reset(); | 2899 output_.Reset(); |
2900 EXPECT_TRUE(frame_it.NextFrame(&output_)); | 2900 EXPECT_GT(frame_it.NextFrame(&output_), 0u); |
2901 SpdySerializedFrame first_cont_frame(output_.Begin(), output_.Size(), false); | 2901 SpdySerializedFrame first_cont_frame(output_.Begin(), output_.Size(), false); |
2902 | 2902 |
2903 EXPECT_EQ(first_cont_frame.size(), | 2903 EXPECT_EQ(first_cont_frame.size(), |
2904 TestSpdyVisitor::sent_control_frame_max_size()); | 2904 TestSpdyVisitor::sent_control_frame_max_size()); |
2905 visitor.SimulateInFramer( | 2905 visitor.SimulateInFramer( |
2906 reinterpret_cast<unsigned char*>(first_cont_frame.data()), | 2906 reinterpret_cast<unsigned char*>(first_cont_frame.data()), |
2907 first_cont_frame.size()); | 2907 first_cont_frame.size()); |
2908 EXPECT_TRUE(visitor.header_buffer_valid_); | 2908 EXPECT_TRUE(visitor.header_buffer_valid_); |
2909 EXPECT_EQ(0, visitor.error_count_); | 2909 EXPECT_EQ(0, visitor.error_count_); |
2910 EXPECT_EQ(1, visitor.push_promise_frame_count_); | 2910 EXPECT_EQ(1, visitor.push_promise_frame_count_); |
2911 EXPECT_EQ(1, visitor.continuation_count_); | 2911 EXPECT_EQ(1, visitor.continuation_count_); |
2912 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2912 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2913 | 2913 |
2914 EXPECT_TRUE(frame_it.HasNextFrame()); | 2914 EXPECT_TRUE(frame_it.HasNextFrame()); |
2915 output_.Reset(); | 2915 output_.Reset(); |
2916 EXPECT_TRUE(frame_it.NextFrame(&output_)); | 2916 EXPECT_GT(frame_it.NextFrame(&output_), 0u); |
2917 SpdySerializedFrame second_cont_frame(output_.Begin(), output_.Size(), false); | 2917 SpdySerializedFrame second_cont_frame(output_.Begin(), output_.Size(), false); |
2918 EXPECT_LT(second_cont_frame.size(), | 2918 EXPECT_LT(second_cont_frame.size(), |
2919 TestSpdyVisitor::sent_control_frame_max_size()); | 2919 TestSpdyVisitor::sent_control_frame_max_size()); |
2920 | 2920 |
2921 visitor.SimulateInFramer( | 2921 visitor.SimulateInFramer( |
2922 reinterpret_cast<unsigned char*>(second_cont_frame.data()), | 2922 reinterpret_cast<unsigned char*>(second_cont_frame.data()), |
2923 second_cont_frame.size()); | 2923 second_cont_frame.size()); |
2924 EXPECT_TRUE(visitor.header_buffer_valid_); | 2924 EXPECT_TRUE(visitor.header_buffer_valid_); |
2925 EXPECT_EQ(0, visitor.error_count_); | 2925 EXPECT_EQ(0, visitor.error_count_); |
2926 EXPECT_EQ(1, visitor.push_promise_frame_count_); | 2926 EXPECT_EQ(1, visitor.push_promise_frame_count_); |
2927 EXPECT_EQ(2, visitor.continuation_count_); | 2927 EXPECT_EQ(2, visitor.continuation_count_); |
2928 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); | 2928 EXPECT_EQ(0, visitor.zero_length_control_frame_header_data_count_); |
2929 | 2929 |
2930 EXPECT_FALSE(frame_it.HasNextFrame()); | 2930 EXPECT_FALSE(frame_it.HasNextFrame()); |
2931 } | 2931 } |
2932 | 2932 |
| 2933 class SpdyControlFrameIteratorTest : public ::testing::Test { |
| 2934 public: |
| 2935 SpdyControlFrameIteratorTest() : output_(output_buffer, kSize) {} |
| 2936 |
| 2937 void RunTest(std::unique_ptr<SpdyFrameIR> ir) { |
| 2938 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
| 2939 SpdySerializedFrame frame(framer.SerializeFrame(*ir)); |
| 2940 std::unique_ptr<SpdyFrameSequence> it = |
| 2941 SpdyFramer::CreateIterator(&framer, std::move(ir)); |
| 2942 EXPECT_TRUE(it->HasNextFrame()); |
| 2943 EXPECT_EQ(it->NextFrame(&output_), frame.size()); |
| 2944 EXPECT_FALSE(it->HasNextFrame()); |
| 2945 } |
| 2946 |
| 2947 private: |
| 2948 ArrayOutputBuffer output_; |
| 2949 }; |
| 2950 |
| 2951 TEST_F(SpdyControlFrameIteratorTest, RstStreamFrameWithIterator) { |
| 2952 auto ir = base::MakeUnique<SpdyRstStreamIR>(0, ERROR_CODE_PROTOCOL_ERROR); |
| 2953 RunTest(std::move(ir)); |
| 2954 } |
| 2955 |
| 2956 TEST_F(SpdyControlFrameIteratorTest, SettingsFrameWithIterator) { |
| 2957 auto ir = base::MakeUnique<SpdySettingsIR>(); |
| 2958 uint32_t kValue = 0x0a0b0c0d; |
| 2959 SpdySettingsIds kId = SETTINGS_INITIAL_WINDOW_SIZE; |
| 2960 ir->AddSetting(kId, kValue); |
| 2961 RunTest(std::move(ir)); |
| 2962 } |
| 2963 |
| 2964 TEST_F(SpdyControlFrameIteratorTest, PingFrameWithIterator) { |
| 2965 const SpdyPingId kPingId = 0x123456789abcdeffULL; |
| 2966 auto ir = base::MakeUnique<SpdyPingIR>(kPingId); |
| 2967 RunTest(std::move(ir)); |
| 2968 } |
| 2969 |
| 2970 TEST_F(SpdyControlFrameIteratorTest, GoAwayFrameWithIterator) { |
| 2971 auto ir = base::MakeUnique<SpdyGoAwayIR>(0, ERROR_CODE_NO_ERROR, "GA"); |
| 2972 RunTest(std::move(ir)); |
| 2973 } |
| 2974 |
| 2975 TEST_F(SpdyControlFrameIteratorTest, WindowUpdateFrameWithIterator) { |
| 2976 auto ir = base::MakeUnique<SpdyWindowUpdateIR>(1, 1); |
| 2977 RunTest(std::move(ir)); |
| 2978 } |
| 2979 |
| 2980 TEST_F(SpdyControlFrameIteratorTest, AtlSvcFrameWithIterator) { |
| 2981 auto ir = base::MakeUnique<SpdyAltSvcIR>(3); |
| 2982 ir->set_origin("origin"); |
| 2983 ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService( |
| 2984 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector())); |
| 2985 ir->add_altsvc(SpdyAltSvcWireFormat::AlternativeService( |
| 2986 "p\"=i:d", "h_\\o\"st", 123, 42, |
| 2987 SpdyAltSvcWireFormat::VersionVector{24})); |
| 2988 RunTest(std::move(ir)); |
| 2989 } |
| 2990 |
| 2991 TEST_F(SpdyControlFrameIteratorTest, PriorityFrameWithIterator) { |
| 2992 auto ir = base::MakeUnique<SpdyPriorityIR>(2, 1, 17, true); |
| 2993 RunTest(std::move(ir)); |
| 2994 } |
| 2995 |
2933 TEST_P(SpdyFramerTest, TooLargePushPromiseFrameUsesContinuation) { | 2996 TEST_P(SpdyFramerTest, TooLargePushPromiseFrameUsesContinuation) { |
2934 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); | 2997 SpdyFramer framer(SpdyFramer::DISABLE_COMPRESSION); |
2935 SpdyPushPromiseIR push_promise(1, 2); | 2998 SpdyPushPromiseIR push_promise(1, 2); |
2936 push_promise.set_padding_len(256); | 2999 push_promise.set_padding_len(256); |
2937 | 3000 |
2938 // Exact payload length will change with HPACK, but this should be long | 3001 // Exact payload length will change with HPACK, but this should be long |
2939 // enough to cause an overflow. | 3002 // enough to cause an overflow. |
2940 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); | 3003 const size_t kBigValueSize = TestSpdyVisitor::sent_control_frame_max_size(); |
2941 SpdyString big_value(kBigValueSize, 'x'); | 3004 SpdyString big_value(kBigValueSize, 'x'); |
2942 push_promise.SetHeader("aa", big_value); | 3005 push_promise.SetHeader("aa", big_value); |
(...skipping 1432 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4375 EXPECT_CALL(visitor, | 4438 EXPECT_CALL(visitor, |
4376 OnAltSvc(kStreamId, SpdyStringPiece("o_r|g!n"), altsvc_vector)); | 4439 OnAltSvc(kStreamId, SpdyStringPiece("o_r|g!n"), altsvc_vector)); |
4377 | 4440 |
4378 SpdyAltSvcIR altsvc_ir(kStreamId); | 4441 SpdyAltSvcIR altsvc_ir(kStreamId); |
4379 altsvc_ir.set_origin("o_r|g!n"); | 4442 altsvc_ir.set_origin("o_r|g!n"); |
4380 altsvc_ir.add_altsvc(altsvc1); | 4443 altsvc_ir.add_altsvc(altsvc1); |
4381 altsvc_ir.add_altsvc(altsvc2); | 4444 altsvc_ir.add_altsvc(altsvc2); |
4382 SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir)); | 4445 SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir)); |
4383 if (use_output_) { | 4446 if (use_output_) { |
4384 output_.Reset(); | 4447 output_.Reset(); |
4385 ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_)); | 4448 EXPECT_GT(framer.SerializeFrame(altsvc_ir, &output_), 0u); |
4386 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); | 4449 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); |
4387 } | 4450 } |
4388 framer.ProcessInput(frame.data(), frame.size()); | 4451 framer.ProcessInput(frame.data(), frame.size()); |
4389 | 4452 |
4390 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); | 4453 EXPECT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, framer.state()); |
4391 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) | 4454 EXPECT_EQ(SpdyFramer::SPDY_NO_ERROR, framer.spdy_framer_error()) |
4392 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); | 4455 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); |
4393 } | 4456 } |
4394 | 4457 |
4395 TEST_P(SpdyFramerTest, OnAltSvcNoOrigin) { | 4458 TEST_P(SpdyFramerTest, OnAltSvcNoOrigin) { |
(...skipping 34 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4430 | 4493 |
4431 SpdyAltSvcIR altsvc_ir(kStreamId); | 4494 SpdyAltSvcIR altsvc_ir(kStreamId); |
4432 altsvc_ir.set_origin("o1"); | 4495 altsvc_ir.set_origin("o1"); |
4433 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( | 4496 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( |
4434 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector())); | 4497 "pid1", "host", 443, 5, SpdyAltSvcWireFormat::VersionVector())); |
4435 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( | 4498 altsvc_ir.add_altsvc(SpdyAltSvcWireFormat::AlternativeService( |
4436 "", "h1", 443, 10, SpdyAltSvcWireFormat::VersionVector())); | 4499 "", "h1", 443, 10, SpdyAltSvcWireFormat::VersionVector())); |
4437 SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir)); | 4500 SpdySerializedFrame frame(framer.SerializeFrame(altsvc_ir)); |
4438 if (use_output_) { | 4501 if (use_output_) { |
4439 output_.Reset(); | 4502 output_.Reset(); |
4440 ASSERT_TRUE(framer.SerializeFrame(altsvc_ir, &output_)); | 4503 EXPECT_GT(framer.SerializeFrame(altsvc_ir, &output_), 0u); |
4441 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); | 4504 frame = SpdySerializedFrame(output_.Begin(), output_.Size(), false); |
4442 } | 4505 } |
4443 framer.ProcessInput(frame.data(), frame.size()); | 4506 framer.ProcessInput(frame.data(), frame.size()); |
4444 | 4507 |
4445 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); | 4508 EXPECT_EQ(SpdyFramer::SPDY_ERROR, framer.state()); |
4446 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.spdy_framer_error()) | 4509 EXPECT_EQ(SpdyFramer::SPDY_INVALID_CONTROL_FRAME, framer.spdy_framer_error()) |
4447 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); | 4510 << SpdyFramer::SpdyFramerErrorToString(framer.spdy_framer_error()); |
4448 } | 4511 } |
4449 | 4512 |
4450 TEST_P(SpdyFramerTest, OnAltSvcBadLengths) { | 4513 TEST_P(SpdyFramerTest, OnAltSvcBadLengths) { |
(...skipping 361 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
4812 | 4875 |
4813 EXPECT_EQ(1, visitor->data_frame_count_); | 4876 EXPECT_EQ(1, visitor->data_frame_count_); |
4814 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); | 4877 EXPECT_EQ(strlen(four_score), static_cast<unsigned>(visitor->data_bytes_)); |
4815 EXPECT_EQ(0, visitor->headers_frame_count_); | 4878 EXPECT_EQ(0, visitor->headers_frame_count_); |
4816 } | 4879 } |
4817 } | 4880 } |
4818 | 4881 |
4819 } // namespace test | 4882 } // namespace test |
4820 | 4883 |
4821 } // namespace net | 4884 } // namespace net |
OLD | NEW |