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

Side by Side Diff: net/spdy/buffered_spdy_framer_unittest.cc

Issue 2141993002: Remove many-many SpdyMajorVersion and NextProto arguments and members. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Remove OnSynStream() and OnSynReply(). Created 4 years, 5 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
« no previous file with comments | « net/spdy/buffered_spdy_framer.cc ('k') | net/spdy/header_coalescer.h » ('j') | 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/buffered_spdy_framer.h" 5 #include "net/spdy/buffered_spdy_framer.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/logging.h" 9 #include "base/logging.h"
10 #include "net/spdy/spdy_test_util_common.h" 10 #include "net/spdy/spdy_test_util_common.h"
11 #include "testing/platform_test.h" 11 #include "testing/platform_test.h"
12 12
13 namespace net { 13 namespace net {
14 14
15 namespace { 15 namespace {
16 16
17 class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface { 17 class TestBufferedSpdyVisitor : public BufferedSpdyFramerVisitorInterface {
18 public: 18 public:
19 explicit TestBufferedSpdyVisitor() 19 explicit TestBufferedSpdyVisitor()
20 : buffered_spdy_framer_(HTTP2), 20 : buffered_spdy_framer_(),
21 error_count_(0), 21 error_count_(0),
22 setting_count_(0), 22 setting_count_(0),
23 syn_frame_count_(0),
24 syn_reply_frame_count_(0),
25 headers_frame_count_(0), 23 headers_frame_count_(0),
26 push_promise_frame_count_(0), 24 push_promise_frame_count_(0),
27 goaway_count_(0), 25 goaway_count_(0),
28 altsvc_count_(0), 26 altsvc_count_(0),
29 header_stream_id_(static_cast<SpdyStreamId>(-1)), 27 header_stream_id_(static_cast<SpdyStreamId>(-1)),
30 promised_stream_id_(static_cast<SpdyStreamId>(-1)) {} 28 promised_stream_id_(static_cast<SpdyStreamId>(-1)) {}
31 29
32 void OnError(SpdyFramer::SpdyError error_code) override { 30 void OnError(SpdyFramer::SpdyError error_code) override {
33 VLOG(1) << "SpdyFramer Error: " << error_code; 31 VLOG(1) << "SpdyFramer Error: " << error_code;
34 error_count_++; 32 error_count_++;
35 } 33 }
36 34
37 void OnStreamError(SpdyStreamId stream_id, 35 void OnStreamError(SpdyStreamId stream_id,
38 const std::string& description) override { 36 const std::string& description) override {
39 VLOG(1) << "SpdyFramer Error on stream: " << stream_id << " " 37 VLOG(1) << "SpdyFramer Error on stream: " << stream_id << " "
40 << description; 38 << description;
41 error_count_++; 39 error_count_++;
42 } 40 }
43 41
44 void OnSynStream(SpdyStreamId stream_id,
45 SpdyStreamId associated_stream_id,
46 SpdyPriority priority,
47 bool fin,
48 bool unidirectional,
49 const SpdyHeaderBlock& headers) override {
50 header_stream_id_ = stream_id;
51 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
52 syn_frame_count_++;
53 headers_ = headers.Clone();
54 }
55
56 void OnSynReply(SpdyStreamId stream_id,
57 bool fin,
58 const SpdyHeaderBlock& headers) override {
59 header_stream_id_ = stream_id;
60 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
61 syn_reply_frame_count_++;
62 headers_ = headers.Clone();
63 }
64
65 void OnHeaders(SpdyStreamId stream_id, 42 void OnHeaders(SpdyStreamId stream_id,
66 bool has_priority, 43 bool has_priority,
67 int weight, 44 int weight,
68 SpdyStreamId parent_stream_id, 45 SpdyStreamId parent_stream_id,
69 bool exclusive, 46 bool exclusive,
70 bool fin, 47 bool fin,
71 const SpdyHeaderBlock& headers) override { 48 const SpdyHeaderBlock& headers) override {
72 header_stream_id_ = stream_id; 49 header_stream_id_ = stream_id;
73 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream); 50 EXPECT_NE(header_stream_id_, SpdyFramer::kInvalidStream);
74 headers_frame_count_++; 51 headers_frame_count_++;
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
167 input_remaining -= bytes_processed; 144 input_remaining -= bytes_processed;
168 input_ptr += bytes_processed; 145 input_ptr += bytes_processed;
169 } 146 }
170 } 147 }
171 148
172 BufferedSpdyFramer buffered_spdy_framer_; 149 BufferedSpdyFramer buffered_spdy_framer_;
173 150
174 // Counters from the visitor callbacks. 151 // Counters from the visitor callbacks.
175 int error_count_; 152 int error_count_;
176 int setting_count_; 153 int setting_count_;
177 int syn_frame_count_;
178 int syn_reply_frame_count_;
179 int headers_frame_count_; 154 int headers_frame_count_;
180 int push_promise_frame_count_; 155 int push_promise_frame_count_;
181 int goaway_count_; 156 int goaway_count_;
182 int altsvc_count_; 157 int altsvc_count_;
183 158
184 // Header block streaming state: 159 // Header block streaming state:
185 SpdyStreamId header_stream_id_; 160 SpdyStreamId header_stream_id_;
186 SpdyStreamId promised_stream_id_; 161 SpdyStreamId promised_stream_id_;
187 162
188 // Headers from OnSyn, OnSynReply, OnHeaders and OnPushPromise for 163 // Headers from OnHeaders and OnPushPromise for verification.
189 // verification.
190 SpdyHeaderBlock headers_; 164 SpdyHeaderBlock headers_;
191 165
192 // OnGoAway parameters. 166 // OnGoAway parameters.
193 SpdyStreamId goaway_last_accepted_stream_id_; 167 SpdyStreamId goaway_last_accepted_stream_id_;
194 SpdyGoAwayStatus goaway_status_; 168 SpdyGoAwayStatus goaway_status_;
195 std::string goaway_debug_data_; 169 std::string goaway_debug_data_;
196 170
197 // OnAltSvc parameters. 171 // OnAltSvc parameters.
198 SpdyStreamId altsvc_stream_id_; 172 SpdyStreamId altsvc_stream_id_;
199 std::string altsvc_origin_; 173 std::string altsvc_origin_;
(...skipping 16 matching lines...) Expand all
216 reinterpret_cast<unsigned char*>(control_frame.data()), 190 reinterpret_cast<unsigned char*>(control_frame.data()),
217 control_frame.size()); 191 control_frame.size());
218 EXPECT_EQ(0, visitor.error_count_); 192 EXPECT_EQ(0, visitor.error_count_);
219 EXPECT_EQ(2, visitor.setting_count_); 193 EXPECT_EQ(2, visitor.setting_count_);
220 } 194 }
221 195
222 TEST_F(BufferedSpdyFramerTest, HeaderListTooLarge) { 196 TEST_F(BufferedSpdyFramerTest, HeaderListTooLarge) {
223 SpdyHeaderBlock headers; 197 SpdyHeaderBlock headers;
224 std::string long_header_value(256 * 1024, 'x'); 198 std::string long_header_value(256 * 1024, 'x');
225 headers["foo"] = long_header_value; 199 headers["foo"] = long_header_value;
226 BufferedSpdyFramer framer(HTTP2); 200 BufferedSpdyFramer framer;
227 std::unique_ptr<SpdySerializedFrame> control_frame( 201 std::unique_ptr<SpdySerializedFrame> control_frame(
228 framer.CreateHeaders(1, // stream_id 202 framer.CreateHeaders(1, // stream_id
229 CONTROL_FLAG_NONE, 203 CONTROL_FLAG_NONE,
230 255, // weight 204 255, // weight
231 std::move(headers))); 205 std::move(headers)));
232 EXPECT_TRUE(control_frame); 206 EXPECT_TRUE(control_frame);
233 207
234 TestBufferedSpdyVisitor visitor; 208 TestBufferedSpdyVisitor visitor;
235 visitor.SimulateInFramer( 209 visitor.SimulateInFramer(
236 reinterpret_cast<unsigned char*>(control_frame.get()->data()), 210 reinterpret_cast<unsigned char*>(control_frame.get()->data()),
237 control_frame.get()->size()); 211 control_frame.get()->size());
238 212
239 EXPECT_EQ(1, visitor.error_count_); 213 EXPECT_EQ(1, visitor.error_count_);
240 EXPECT_EQ(0, visitor.syn_frame_count_);
241 EXPECT_EQ(0, visitor.syn_reply_frame_count_);
242 EXPECT_EQ(0, visitor.headers_frame_count_); 214 EXPECT_EQ(0, visitor.headers_frame_count_);
243 EXPECT_EQ(0, visitor.push_promise_frame_count_); 215 EXPECT_EQ(0, visitor.push_promise_frame_count_);
244 EXPECT_EQ(SpdyHeaderBlock(), visitor.headers_); 216 EXPECT_EQ(SpdyHeaderBlock(), visitor.headers_);
245 } 217 }
246 218
247 TEST_F(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) { 219 TEST_F(BufferedSpdyFramerTest, ReadHeadersHeaderBlock) {
248 SpdyHeaderBlock headers; 220 SpdyHeaderBlock headers;
249 headers["alpha"] = "beta"; 221 headers["alpha"] = "beta";
250 headers["gamma"] = "delta"; 222 headers["gamma"] = "delta";
251 BufferedSpdyFramer framer(HTTP2); 223 BufferedSpdyFramer framer;
252 std::unique_ptr<SpdySerializedFrame> control_frame( 224 std::unique_ptr<SpdySerializedFrame> control_frame(
253 framer.CreateHeaders(1, // stream_id 225 framer.CreateHeaders(1, // stream_id
254 CONTROL_FLAG_NONE, 226 CONTROL_FLAG_NONE,
255 255, // weight 227 255, // weight
256 headers.Clone())); 228 headers.Clone()));
257 EXPECT_TRUE(control_frame.get() != NULL); 229 EXPECT_TRUE(control_frame.get() != NULL);
258 230
259 TestBufferedSpdyVisitor visitor; 231 TestBufferedSpdyVisitor visitor;
260 visitor.SimulateInFramer( 232 visitor.SimulateInFramer(
261 reinterpret_cast<unsigned char*>(control_frame.get()->data()), 233 reinterpret_cast<unsigned char*>(control_frame.get()->data()),
262 control_frame.get()->size()); 234 control_frame.get()->size());
263 EXPECT_EQ(0, visitor.error_count_); 235 EXPECT_EQ(0, visitor.error_count_);
264 EXPECT_EQ(0, visitor.syn_frame_count_);
265 EXPECT_EQ(0, visitor.syn_reply_frame_count_);
266 EXPECT_EQ(1, visitor.headers_frame_count_); 236 EXPECT_EQ(1, visitor.headers_frame_count_);
267 EXPECT_EQ(0, visitor.push_promise_frame_count_); 237 EXPECT_EQ(0, visitor.push_promise_frame_count_);
268 EXPECT_EQ(headers, visitor.headers_); 238 EXPECT_EQ(headers, visitor.headers_);
269 } 239 }
270 240
271 TEST_F(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) { 241 TEST_F(BufferedSpdyFramerTest, ReadPushPromiseHeaderBlock) {
272 SpdyHeaderBlock headers; 242 SpdyHeaderBlock headers;
273 headers["alpha"] = "beta"; 243 headers["alpha"] = "beta";
274 headers["gamma"] = "delta"; 244 headers["gamma"] = "delta";
275 BufferedSpdyFramer framer(HTTP2); 245 BufferedSpdyFramer framer;
276 std::unique_ptr<SpdySerializedFrame> control_frame( 246 std::unique_ptr<SpdySerializedFrame> control_frame(
277 framer.CreatePushPromise(1, 2, headers.Clone())); 247 framer.CreatePushPromise(1, 2, headers.Clone()));
278 EXPECT_TRUE(control_frame.get() != NULL); 248 EXPECT_TRUE(control_frame.get() != NULL);
279 249
280 TestBufferedSpdyVisitor visitor; 250 TestBufferedSpdyVisitor visitor;
281 visitor.SimulateInFramer( 251 visitor.SimulateInFramer(
282 reinterpret_cast<unsigned char*>(control_frame.get()->data()), 252 reinterpret_cast<unsigned char*>(control_frame.get()->data()),
283 control_frame.get()->size()); 253 control_frame.get()->size());
284 EXPECT_EQ(0, visitor.error_count_); 254 EXPECT_EQ(0, visitor.error_count_);
285 EXPECT_EQ(0, visitor.syn_frame_count_);
286 EXPECT_EQ(0, visitor.syn_reply_frame_count_);
287 EXPECT_EQ(0, visitor.headers_frame_count_); 255 EXPECT_EQ(0, visitor.headers_frame_count_);
288 EXPECT_EQ(1, visitor.push_promise_frame_count_); 256 EXPECT_EQ(1, visitor.push_promise_frame_count_);
289 EXPECT_EQ(headers, visitor.headers_); 257 EXPECT_EQ(headers, visitor.headers_);
290 EXPECT_EQ(1u, visitor.header_stream_id_); 258 EXPECT_EQ(1u, visitor.header_stream_id_);
291 EXPECT_EQ(2u, visitor.promised_stream_id_); 259 EXPECT_EQ(2u, visitor.promised_stream_id_);
292 } 260 }
293 261
294 TEST_F(BufferedSpdyFramerTest, GoAwayDebugData) { 262 TEST_F(BufferedSpdyFramerTest, GoAwayDebugData) {
295 BufferedSpdyFramer framer(HTTP2); 263 BufferedSpdyFramer framer;
296 std::unique_ptr<SpdySerializedFrame> goaway_frame( 264 std::unique_ptr<SpdySerializedFrame> goaway_frame(
297 framer.CreateGoAway(2u, GOAWAY_FRAME_SIZE_ERROR, "foo")); 265 framer.CreateGoAway(2u, GOAWAY_FRAME_SIZE_ERROR, "foo"));
298 266
299 TestBufferedSpdyVisitor visitor; 267 TestBufferedSpdyVisitor visitor;
300 visitor.SimulateInFramer( 268 visitor.SimulateInFramer(
301 reinterpret_cast<unsigned char*>(goaway_frame.get()->data()), 269 reinterpret_cast<unsigned char*>(goaway_frame.get()->data()),
302 goaway_frame.get()->size()); 270 goaway_frame.get()->size());
303 EXPECT_EQ(0, visitor.error_count_); 271 EXPECT_EQ(0, visitor.error_count_);
304 EXPECT_EQ(1, visitor.goaway_count_); 272 EXPECT_EQ(1, visitor.goaway_count_);
305 EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_); 273 EXPECT_EQ(2u, visitor.goaway_last_accepted_stream_id_);
306 EXPECT_EQ(GOAWAY_FRAME_SIZE_ERROR, visitor.goaway_status_); 274 EXPECT_EQ(GOAWAY_FRAME_SIZE_ERROR, visitor.goaway_status_);
307 EXPECT_EQ("foo", visitor.goaway_debug_data_); 275 EXPECT_EQ("foo", visitor.goaway_debug_data_);
308 } 276 }
309 277
310 TEST_F(BufferedSpdyFramerTest, OnAltSvc) { 278 TEST_F(BufferedSpdyFramerTest, OnAltSvc) {
311 const SpdyStreamId altsvc_stream_id(1); 279 const SpdyStreamId altsvc_stream_id(1);
312 const char altsvc_origin[] = "https://www.example.org"; 280 const char altsvc_origin[] = "https://www.example.org";
313 SpdyAltSvcIR altsvc_ir(altsvc_stream_id); 281 SpdyAltSvcIR altsvc_ir(altsvc_stream_id);
314 SpdyAltSvcWireFormat::AlternativeService alternative_service( 282 SpdyAltSvcWireFormat::AlternativeService alternative_service(
315 "quic", "alternative.example.org", 443, 86400, 283 "quic", "alternative.example.org", 443, 86400,
316 SpdyAltSvcWireFormat::VersionVector()); 284 SpdyAltSvcWireFormat::VersionVector());
317 altsvc_ir.add_altsvc(alternative_service); 285 altsvc_ir.add_altsvc(alternative_service);
318 altsvc_ir.set_origin(altsvc_origin); 286 altsvc_ir.set_origin(altsvc_origin);
319 BufferedSpdyFramer framer(HTTP2); 287 BufferedSpdyFramer framer;
320 SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir)); 288 SpdySerializedFrame altsvc_frame(framer.SerializeFrame(altsvc_ir));
321 289
322 TestBufferedSpdyVisitor visitor; 290 TestBufferedSpdyVisitor visitor;
323 visitor.SimulateInFramer( 291 visitor.SimulateInFramer(
324 reinterpret_cast<unsigned char*>(altsvc_frame.data()), 292 reinterpret_cast<unsigned char*>(altsvc_frame.data()),
325 altsvc_frame.size()); 293 altsvc_frame.size());
326 EXPECT_EQ(0, visitor.error_count_); 294 EXPECT_EQ(0, visitor.error_count_);
327 EXPECT_EQ(1, visitor.altsvc_count_); 295 EXPECT_EQ(1, visitor.altsvc_count_);
328 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_); 296 EXPECT_EQ(altsvc_stream_id, visitor.altsvc_stream_id_);
329 EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_); 297 EXPECT_EQ(altsvc_origin, visitor.altsvc_origin_);
330 ASSERT_EQ(1u, visitor.altsvc_vector_.size()); 298 ASSERT_EQ(1u, visitor.altsvc_vector_.size());
331 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]); 299 EXPECT_EQ(alternative_service, visitor.altsvc_vector_[0]);
332 } 300 }
333 301
334 } // namespace net 302 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/buffered_spdy_framer.cc ('k') | net/spdy/header_coalescer.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698