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

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

Issue 2844083003: Create frame iterator for frame types except HEADER, PUSH_PROMISE and DATA. This helps use unified … (Closed)
Patch Set: remove cast to 0. Created 3 years, 7 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
« net/spdy/core/spdy_framer.cc ('K') | « net/spdy/core/spdy_framer.cc ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
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 "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
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
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
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
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
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
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
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
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
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
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
OLDNEW
« net/spdy/core/spdy_framer.cc ('K') | « net/spdy/core/spdy_framer.cc ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698