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

Side by Side Diff: net/tools/flip_server/spdy_interface_test.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/tools/flip_server/spdy_interface.cc ('k') | net/tools/quic/quic_in_memory_cache.cc » ('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 2013 The Chromium Authors. All rights reserved. 1 // Copyright 2013 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/tools/flip_server/spdy_interface.h" 5 #include "net/tools/flip_server/spdy_interface.h"
6 6
7 #include <list> 7 #include <list>
8 #include <memory> 8 #include <memory>
9 9
10 #include "base/strings/string_piece.h" 10 #include "base/strings/string_piece.h"
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
43 size_t size; 43 size_t size;
44 std::string string; 44 std::string string;
45 }; 45 };
46 46
47 class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface { 47 class SpdyFramerVisitor : public BufferedSpdyFramerVisitorInterface {
48 public: 48 public:
49 virtual ~SpdyFramerVisitor() {} 49 virtual ~SpdyFramerVisitor() {}
50 MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError)); 50 MOCK_METHOD1(OnError, void(SpdyFramer::SpdyError));
51 MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&)); 51 MOCK_METHOD2(OnStreamError, void(SpdyStreamId, const std::string&));
52 // SaveArg cannot be used on non-copyable types like SpdyHeaderBlock. 52 // SaveArg cannot be used on non-copyable types like SpdyHeaderBlock.
53 void OnSynStream(SpdyStreamId stream_id,
54 SpdyStreamId associated_stream_id,
55 SpdyPriority priority,
56 bool fin,
57 bool unidirectional,
58 const SpdyHeaderBlock& headers) override {
59 actual_header_block_ = headers.Clone();
60 OnSynStreamMock(stream_id, associated_stream_id, priority, fin,
61 unidirectional, headers);
62 }
63 MOCK_METHOD6(OnSynStreamMock,
64 void(SpdyStreamId,
65 SpdyStreamId,
66 SpdyPriority,
67 bool,
68 bool,
69 const SpdyHeaderBlock&));
70 void OnSynReply(SpdyStreamId stream_id,
71 bool fin,
72 const SpdyHeaderBlock& headers) override {
73 actual_header_block_ = headers.Clone();
74 OnSynReplyMock(stream_id, fin, headers);
75 }
76 MOCK_METHOD3(OnSynReplyMock,
77 void(SpdyStreamId, bool, const SpdyHeaderBlock&));
78 void OnHeaders(SpdyStreamId stream_id, 53 void OnHeaders(SpdyStreamId stream_id,
79 bool has_priority, 54 bool has_priority,
80 int weight, 55 int weight,
81 SpdyStreamId parent_stream_id, 56 SpdyStreamId parent_stream_id,
82 bool exclusive, 57 bool exclusive,
83 bool fin, 58 bool fin,
84 const SpdyHeaderBlock& headers) override { 59 const SpdyHeaderBlock& headers) override {
85 actual_header_block_ = headers.Clone(); 60 actual_header_block_ = headers.Clone();
86 OnHeadersMock(stream_id, has_priority, weight, parent_stream_id, exclusive, 61 OnHeadersMock(stream_id, has_priority, weight, parent_stream_id, exclusive,
87 fin, headers); 62 fin, headers);
(...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after
146 121
147 // This class is almost SpdySM, except one function. 122 // This class is almost SpdySM, except one function.
148 // This class is the test target of tests in this file. 123 // This class is the test target of tests in this file.
149 class TestSpdySM : public SpdySM { 124 class TestSpdySM : public SpdySM {
150 public: 125 public:
151 virtual ~TestSpdySM() {} 126 virtual ~TestSpdySM() {}
152 TestSpdySM(SMConnection* connection, 127 TestSpdySM(SMConnection* connection,
153 SMInterface* sm_http_interface, 128 SMInterface* sm_http_interface,
154 EpollServer* epoll_server, 129 EpollServer* epoll_server,
155 MemoryCache* memory_cache, 130 MemoryCache* memory_cache,
156 FlipAcceptor* acceptor, 131 FlipAcceptor* acceptor)
157 SpdyMajorVersion version)
158 : SpdySM(connection, 132 : SpdySM(connection,
159 sm_http_interface, 133 sm_http_interface,
160 epoll_server, 134 epoll_server,
161 memory_cache, 135 memory_cache,
162 acceptor, 136 acceptor) {}
163 version) {}
164 137
165 MOCK_METHOD2(FindOrMakeNewSMConnectionInterface, 138 MOCK_METHOD2(FindOrMakeNewSMConnectionInterface,
166 SMInterface*(const std::string&, const std::string&)); 139 SMInterface*(const std::string&, const std::string&));
167 }; 140 };
168 141
169 class SpdySMTestBase : public ::testing::TestWithParam<SpdyMajorVersion> { 142 class SpdySMTestBase : public ::testing::Test {
170 public: 143 public:
171 explicit SpdySMTestBase(FlipHandlerType type) { 144 explicit SpdySMTestBase(FlipHandlerType type) {
172 SSLState* ssl_state = NULL; 145 SSLState* ssl_state = NULL;
173 mock_another_interface_.reset(new MockSMInterface); 146 mock_another_interface_.reset(new MockSMInterface);
174 memory_cache_.reset(new MemoryCache); 147 memory_cache_.reset(new MemoryCache);
175 acceptor_.reset(new FlipAcceptor(type, 148 acceptor_.reset(new FlipAcceptor(type,
176 "127.0.0.1", 149 "127.0.0.1",
177 "8941", 150 "8941",
178 "ssl_cert_filename", 151 "ssl_cert_filename",
179 "ssl_key_filename", 152 "ssl_key_filename",
180 "127.0.0.1", 153 "127.0.0.1",
181 "8942", 154 "8942",
182 "127.0.0.1", 155 "127.0.0.1",
183 "8943", 156 "8943",
184 1, 157 1,
185 0, 158 0,
186 true, 159 true,
187 1, 160 1,
188 false, 161 false,
189 true, 162 true,
190 NULL)); 163 NULL));
191 epoll_server_.reset(new EpollServer); 164 epoll_server_.reset(new EpollServer);
192 connection_.reset(new FakeSMConnection(epoll_server_.get(), 165 connection_.reset(new FakeSMConnection(epoll_server_.get(),
193 ssl_state, 166 ssl_state,
194 memory_cache_.get(), 167 memory_cache_.get(),
195 acceptor_.get(), 168 acceptor_.get(),
196 "log_prefix")); 169 "log_prefix"));
197 170
198 interface_.reset(new TestSpdySM(connection_.get(), 171 interface_.reset(new TestSpdySM(
199 mock_another_interface_.get(), 172 connection_.get(), mock_another_interface_.get(), epoll_server_.get(),
200 epoll_server_.get(), 173 memory_cache_.get(), acceptor_.get()));
201 memory_cache_.get(),
202 acceptor_.get(),
203 GetParam()));
204 174
205 spdy_framer_.reset(new BufferedSpdyFramer(GetParam())); 175 spdy_framer_.reset(new BufferedSpdyFramer());
206 spdy_framer_visitor_.reset(new SpdyFramerVisitor); 176 spdy_framer_visitor_.reset(new SpdyFramerVisitor);
207 spdy_framer_->set_visitor(spdy_framer_visitor_.get()); 177 spdy_framer_->set_visitor(spdy_framer_visitor_.get());
208 } 178 }
209 179
210 virtual ~SpdySMTestBase() { 180 ~SpdySMTestBase() override {
211 if (acceptor_->listen_fd_ >= 0) { 181 if (acceptor_->listen_fd_ >= 0) {
212 epoll_server_->UnregisterFD(acceptor_->listen_fd_); 182 epoll_server_->UnregisterFD(acceptor_->listen_fd_);
213 close(acceptor_->listen_fd_); 183 close(acceptor_->listen_fd_);
214 acceptor_->listen_fd_ = -1; 184 acceptor_->listen_fd_ = -1;
215 } 185 }
216 OutputList& output_list = *connection_->output_list(); 186 OutputList& output_list = *connection_->output_list();
217 for (OutputList::const_iterator i = output_list.begin(); 187 for (OutputList::const_iterator i = output_list.begin();
218 i != output_list.end(); 188 i != output_list.end();
219 ++i) { 189 ++i) {
220 delete *i; 190 delete *i;
(...skipping 12 matching lines...) Expand all
233 std::unique_ptr<EpollServer> epoll_server_; 203 std::unique_ptr<EpollServer> epoll_server_;
234 std::unique_ptr<FakeSMConnection> connection_; 204 std::unique_ptr<FakeSMConnection> connection_;
235 std::unique_ptr<TestSpdySM> interface_; 205 std::unique_ptr<TestSpdySM> interface_;
236 std::unique_ptr<BufferedSpdyFramer> spdy_framer_; 206 std::unique_ptr<BufferedSpdyFramer> spdy_framer_;
237 std::unique_ptr<SpdyFramerVisitor> spdy_framer_visitor_; 207 std::unique_ptr<SpdyFramerVisitor> spdy_framer_visitor_;
238 }; 208 };
239 209
240 class SpdySMProxyTest : public SpdySMTestBase { 210 class SpdySMProxyTest : public SpdySMTestBase {
241 public: 211 public:
242 SpdySMProxyTest() : SpdySMTestBase(FLIP_HANDLER_PROXY) {} 212 SpdySMProxyTest() : SpdySMTestBase(FLIP_HANDLER_PROXY) {}
243 virtual ~SpdySMProxyTest() {} 213 ~SpdySMProxyTest() override {}
244 }; 214 };
245 215
246 class SpdySMServerTest : public SpdySMTestBase { 216 class SpdySMServerTest : public SpdySMTestBase {
247 public: 217 public:
248 SpdySMServerTest() : SpdySMTestBase(FLIP_HANDLER_SPDY_SERVER) {} 218 SpdySMServerTest() : SpdySMTestBase(FLIP_HANDLER_SPDY_SERVER) {}
249 virtual ~SpdySMServerTest() {} 219 ~SpdySMServerTest() override {}
250 }; 220 };
251 221
252 INSTANTIATE_TEST_CASE_P(SpdySMProxyTest, SpdySMProxyTest, Values(SPDY3, HTTP2)); 222 TEST_F(SpdySMProxyTest, InitSMConnection) {
253 INSTANTIATE_TEST_CASE_P(SpdySMServerTest, SpdySMServerTest, Values(HTTP2));
254
255 TEST_P(SpdySMProxyTest, InitSMConnection) {
256 { 223 {
257 InSequence s; 224 InSequence s;
258 EXPECT_CALL(*connection_, InitSMConnection(_, _, _, _, _, _, _, _)); 225 EXPECT_CALL(*connection_, InitSMConnection(_, _, _, _, _, _, _, _));
259 } 226 }
260 interface_->InitSMConnection( 227 interface_->InitSMConnection(
261 NULL, NULL, epoll_server_.get(), -1, "", "", "", false); 228 NULL, NULL, epoll_server_.get(), -1, "", "", "", false);
262 } 229 }
263 230
264 TEST_P(SpdySMProxyTest, OnStreamFrameData) { 231 TEST_F(SpdySMProxyTest, OnRstStream) {
265 BufferedSpdyFramerVisitorInterface* visitor = interface_.get();
266 std::unique_ptr<MockSMInterface> mock_interface(new MockSMInterface);
267 uint32_t stream_id = 92;
268 uint32_t associated_id = 43;
269 SpdyHeaderBlock block;
270 testing::MockFunction<void(int)> checkpoint; // NOLINT
271
272 std::unique_ptr<SpdySerializedFrame> frame(
273 spdy_framer_->CreatePingFrame(12, false));
274 block[":method"] = "GET";
275 block[":host"] = "www.example.com";
276 block[":path"] = "/path";
277 block[":scheme"] = "http";
278 block["foo"] = "bar";
279 {
280 InSequence s;
281 EXPECT_CALL(*interface_,
282 FindOrMakeNewSMConnectionInterface(_, _))
283 .WillOnce(Return(mock_interface.get()));
284 EXPECT_CALL(*mock_interface, SetStreamID(stream_id));
285 EXPECT_CALL(*mock_interface, ProcessWriteInput(_, _)).Times(1);
286 EXPECT_CALL(checkpoint, Call(0));
287 EXPECT_CALL(*mock_interface,
288 ProcessWriteInput(frame->data(), frame->size())).Times(1);
289 }
290
291 visitor->OnSynStream(stream_id, associated_id, 0, false, false, block);
292 checkpoint.Call(0);
293 visitor->OnStreamFrameData(stream_id, frame->data(), frame->size());
294 }
295
296 TEST_P(SpdySMProxyTest, OnRstStream) {
297 BufferedSpdyFramerVisitorInterface* visitor = interface_.get(); 232 BufferedSpdyFramerVisitorInterface* visitor = interface_.get();
298 uint32_t stream_id = 82; 233 uint32_t stream_id = 82;
299 MemCacheIter mci; 234 MemCacheIter mci;
300 mci.stream_id = stream_id; 235 mci.stream_id = stream_id;
301 236
302 { 237 {
303 BalsaHeaders headers; 238 BalsaHeaders headers;
304 std::string filename = "foobar"; 239 std::string filename = "foobar";
305 memory_cache_->InsertFile(&headers, filename, ""); 240 memory_cache_->InsertFile(&headers, filename, "");
306 mci.file_data = memory_cache_->GetFileData(filename); 241 mci.file_data = memory_cache_->GetFileData(filename);
307 } 242 }
308 243
309 interface_->AddToOutputOrder(mci); 244 interface_->AddToOutputOrder(mci);
310 ASSERT_TRUE(HasStream(stream_id)); 245 ASSERT_TRUE(HasStream(stream_id));
311 visitor->OnRstStream(stream_id, RST_STREAM_INVALID); 246 visitor->OnRstStream(stream_id, RST_STREAM_INVALID);
312 ASSERT_FALSE(HasStream(stream_id)); 247 ASSERT_FALSE(HasStream(stream_id));
313 } 248 }
314 249
315 TEST_P(SpdySMProxyTest, ProcessReadInput) { 250 TEST_F(SpdySMProxyTest, ProcessReadInput) {
316 ASSERT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME, 251 ASSERT_EQ(SpdyFramer::SPDY_READY_FOR_FRAME,
317 interface_->spdy_framer()->state()); 252 interface_->spdy_framer()->state());
318 interface_->ProcessReadInput("", 1); 253 interface_->ProcessReadInput("", 1);
319 ASSERT_EQ(SpdyFramer::SPDY_READING_COMMON_HEADER, 254 ASSERT_EQ(SpdyFramer::SPDY_READING_COMMON_HEADER,
320 interface_->spdy_framer()->state()); 255 interface_->spdy_framer()->state());
321 } 256 }
322 257
323 TEST_P(SpdySMProxyTest, ResetForNewConnection) { 258 TEST_F(SpdySMProxyTest, ResetForNewConnection) {
324 uint32_t stream_id = 13; 259 uint32_t stream_id = 13;
325 MemCacheIter mci; 260 MemCacheIter mci;
326 mci.stream_id = stream_id; 261 mci.stream_id = stream_id;
327 // incomplete input 262 // incomplete input
328 const char input[] = {'\0', '\0', '\0'}; 263 const char input[] = {'\0', '\0', '\0'};
329 264
330 { 265 {
331 BalsaHeaders headers; 266 BalsaHeaders headers;
332 std::string filename = "foobar"; 267 std::string filename = "foobar";
333 memory_cache_->InsertFile(&headers, filename, ""); 268 memory_cache_->InsertFile(&headers, filename, "");
334 mci.file_data = memory_cache_->GetFileData(filename); 269 mci.file_data = memory_cache_->GetFileData(filename);
335 } 270 }
336 271
337 interface_->AddToOutputOrder(mci); 272 interface_->AddToOutputOrder(mci);
338 ASSERT_TRUE(HasStream(stream_id)); 273 ASSERT_TRUE(HasStream(stream_id));
339 interface_->ProcessReadInput(input, sizeof(input)); 274 interface_->ProcessReadInput(input, sizeof(input));
340 ASSERT_NE(SpdyFramer::SPDY_READY_FOR_FRAME, 275 ASSERT_NE(SpdyFramer::SPDY_READY_FOR_FRAME,
341 interface_->spdy_framer()->state()); 276 interface_->spdy_framer()->state());
342 277
343 interface_->ResetForNewConnection(); 278 interface_->ResetForNewConnection();
344 ASSERT_FALSE(HasStream(stream_id)); 279 ASSERT_FALSE(HasStream(stream_id));
345 ASSERT_TRUE(interface_->spdy_framer() == NULL); 280 ASSERT_TRUE(interface_->spdy_framer() == NULL);
346 } 281 }
347 282
348 TEST_P(SpdySMProxyTest, CreateFramer) { 283 TEST_F(SpdySMProxyTest, CreateFramer) {
349 interface_->ResetForNewConnection(); 284 interface_->ResetForNewConnection();
350 interface_->CreateFramer(SPDY3); 285 interface_->CreateFramer();
351 ASSERT_TRUE(interface_->spdy_framer() != NULL); 286 ASSERT_TRUE(interface_->spdy_framer());
352 ASSERT_EQ(interface_->spdy_version(), SPDY3);
353
354 interface_->ResetForNewConnection();
355 interface_->CreateFramer(HTTP2);
356 ASSERT_TRUE(interface_->spdy_framer() != NULL);
357 ASSERT_EQ(interface_->spdy_version(), HTTP2);
358 } 287 }
359 288
360 TEST_P(SpdySMProxyTest, PostAcceptHook) { 289 TEST_F(SpdySMProxyTest, PostAcceptHook) {
361 interface_->PostAcceptHook(); 290 interface_->PostAcceptHook();
362 291
363 ASSERT_EQ(1u, connection_->output_list()->size()); 292 ASSERT_EQ(1u, connection_->output_list()->size());
364 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); 293 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
365 DataFrame* df = *i++; 294 DataFrame* df = *i++;
366 295
367 { 296 {
368 InSequence s; 297 InSequence s;
369 EXPECT_CALL(*spdy_framer_visitor_, OnSettings(false)); 298 EXPECT_CALL(*spdy_framer_visitor_, OnSettings(false));
370 EXPECT_CALL(*spdy_framer_visitor_, 299 EXPECT_CALL(*spdy_framer_visitor_,
371 OnSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0u, 100u)); 300 OnSetting(SETTINGS_MAX_CONCURRENT_STREAMS, 0u, 100u));
372 } 301 }
373 spdy_framer_->ProcessInput(df->data, df->size); 302 spdy_framer_->ProcessInput(df->data, df->size);
374 } 303 }
375 304
376 TEST_P(SpdySMProxyTest, NewStream) { 305 TEST_F(SpdySMProxyTest, NewStream) {
377 // TODO(yhirano): SpdySM::NewStream leads to crash when 306 // TODO(yhirano): SpdySM::NewStream leads to crash when
378 // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER. 307 // acceptor_->flip_handler_type_ != FLIP_HANDLER_SPDY_SERVER.
379 // It should be fixed though I don't know the solution now. 308 // It should be fixed though I don't know the solution now.
380 } 309 }
381 310
382 TEST_P(SpdySMProxyTest, AddToOutputOrder) { 311 TEST_F(SpdySMProxyTest, AddToOutputOrder) {
383 uint32_t stream_id = 13; 312 uint32_t stream_id = 13;
384 MemCacheIter mci; 313 MemCacheIter mci;
385 mci.stream_id = stream_id; 314 mci.stream_id = stream_id;
386 315
387 { 316 {
388 BalsaHeaders headers; 317 BalsaHeaders headers;
389 std::string filename = "foobar"; 318 std::string filename = "foobar";
390 memory_cache_->InsertFile(&headers, filename, ""); 319 memory_cache_->InsertFile(&headers, filename, "");
391 mci.file_data = memory_cache_->GetFileData(filename); 320 mci.file_data = memory_cache_->GetFileData(filename);
392 } 321 }
393 322
394 interface_->AddToOutputOrder(mci); 323 interface_->AddToOutputOrder(mci);
395 ASSERT_TRUE(HasStream(stream_id)); 324 ASSERT_TRUE(HasStream(stream_id));
396 } 325 }
397 326
398 TEST_P(SpdySMProxyTest, SendErrorNotFound) { 327 TEST_F(SpdySMProxyTest, SendErrorNotFound) {
399 uint32_t stream_id = 82; 328 uint32_t stream_id = 82;
400 const char* actual_data; 329 const char* actual_data;
401 size_t actual_size; 330 size_t actual_size;
402 testing::MockFunction<void(int)> checkpoint; // NOLINT 331 testing::MockFunction<void(int)> checkpoint; // NOLINT
403 332
404 interface_->SendErrorNotFound(stream_id); 333 interface_->SendErrorNotFound(stream_id);
405 334
406 ASSERT_EQ(2u, connection_->output_list()->size()); 335 ASSERT_EQ(2u, connection_->output_list()->size());
407 336
408 { 337 {
409 InSequence s; 338 InSequence s;
410 if (GetParam() < HTTP2) {
411 EXPECT_CALL(*spdy_framer_visitor_, OnSynReplyMock(stream_id, false, _));
412 } else {
413 EXPECT_CALL(*spdy_framer_visitor_, 339 EXPECT_CALL(*spdy_framer_visitor_,
414 OnHeadersMock(stream_id, /*has_priority=*/false, _, _, _, 340 OnHeadersMock(stream_id, /*has_priority=*/false, _, _, _,
415 /*fin=*/false, _)); 341 /*fin=*/false, _));
416 }
417 EXPECT_CALL(checkpoint, Call(0)); 342 EXPECT_CALL(checkpoint, Call(0));
418 EXPECT_CALL(*spdy_framer_visitor_, 343 EXPECT_CALL(*spdy_framer_visitor_,
419 OnDataFrameHeader(stream_id, _, true)); 344 OnDataFrameHeader(stream_id, _, true));
420 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, _, _)) 345 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, _, _))
421 .Times(1) 346 .Times(1)
422 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); 347 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size)));
423 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, NULL, 0)) 348 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, NULL, 0))
424 .Times(1); 349 .Times(1);
425 } 350 }
426 351
427 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); 352 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
428 DataFrame* df = *i++; 353 DataFrame* df = *i++;
429 spdy_framer_->ProcessInput(df->data, df->size); 354 spdy_framer_->ProcessInput(df->data, df->size);
430 checkpoint.Call(0); 355 checkpoint.Call(0);
431 df = *i++; 356 df = *i++;
432 spdy_framer_->ProcessInput(df->data, df->size); 357 spdy_framer_->ProcessInput(df->data, df->size);
433 358
434 ASSERT_EQ(2, spdy_framer_->frames_received()); 359 ASSERT_EQ(2, spdy_framer_->frames_received());
435 ASSERT_EQ(2u, spdy_framer_visitor_->actual_header_block_.size()); 360 ASSERT_EQ(2u, spdy_framer_visitor_->actual_header_block_.size());
436 ASSERT_EQ("404 Not Found", 361 ASSERT_EQ("404 Not Found",
437 spdy_framer_visitor_->actual_header_block_[":status"]); 362 spdy_framer_visitor_->actual_header_block_[":status"]);
438 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_[":version"]); 363 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_[":version"]);
439 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); 364 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size));
440 } 365 }
441 366
442 TEST_P(SpdySMProxyTest, SendSynStream) { 367 TEST_F(SpdySMProxyTest, SendSynReply) {
443 uint32_t stream_id = 82; 368 uint32_t stream_id = 82;
444 BalsaHeaders headers; 369 BalsaHeaders headers;
445 headers.AppendHeader("key1", "value1"); 370 headers.AppendHeader("key1", "value1");
446 headers.AppendHeader("Host", "www.example.com");
447 headers.SetRequestFirstlineFromStringPieces("GET", "/path", "HTTP/1.1");
448
449 interface_->SendSynStream(stream_id, headers);
450
451 ASSERT_EQ(1u, connection_->output_list()->size());
452 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
453 DataFrame* df = *i++;
454
455 {
456 InSequence s;
457 EXPECT_CALL(*spdy_framer_visitor_,
458 OnSynStreamMock(stream_id, 0, _, false, false, _));
459 }
460
461 spdy_framer_->ProcessInput(df->data, df->size);
462 ASSERT_EQ(1, spdy_framer_->frames_received());
463 ASSERT_EQ(5u, spdy_framer_visitor_->actual_header_block_.size());
464 ASSERT_EQ("GET", spdy_framer_visitor_->actual_header_block_[":method"]);
465 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_[":version"]);
466 ASSERT_EQ("/path", spdy_framer_visitor_->actual_header_block_[":path"]);
467 ASSERT_EQ("www.example.com",
468 spdy_framer_visitor_->actual_header_block_[":host"]);
469 ASSERT_EQ("value1", spdy_framer_visitor_->actual_header_block_["key1"]);
470 }
471
472 TEST_P(SpdySMProxyTest, SendSynReply) {
473 uint32_t stream_id = 82;
474 BalsaHeaders headers;
475 headers.AppendHeader("key1", "value1");
476 headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK"); 371 headers.SetResponseFirstlineFromStringPieces("HTTP/1.1", "200", "OK");
477 372
478 interface_->SendSynReply(stream_id, headers); 373 interface_->SendSynReply(stream_id, headers);
479 374
480 ASSERT_EQ(1u, connection_->output_list()->size()); 375 ASSERT_EQ(1u, connection_->output_list()->size());
481 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); 376 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
482 DataFrame* df = *i++; 377 DataFrame* df = *i++;
483 378
484 { 379 {
485 InSequence s; 380 InSequence s;
486 if (GetParam() < HTTP2) {
487 EXPECT_CALL(*spdy_framer_visitor_, OnSynReplyMock(stream_id, false, _));
488 } else {
489 EXPECT_CALL(*spdy_framer_visitor_, 381 EXPECT_CALL(*spdy_framer_visitor_,
490 OnHeadersMock(stream_id, /*has_priority=*/false, _, _, _, 382 OnHeadersMock(stream_id, /*has_priority=*/false, _, _, _,
491 /*fin=*/false, _)); 383 /*fin=*/false, _));
492 }
493 } 384 }
494 385
495 spdy_framer_->ProcessInput(df->data, df->size); 386 spdy_framer_->ProcessInput(df->data, df->size);
496 ASSERT_EQ(1, spdy_framer_->frames_received()); 387 ASSERT_EQ(1, spdy_framer_->frames_received());
497 ASSERT_EQ(3u, spdy_framer_visitor_->actual_header_block_.size()); 388 ASSERT_EQ(3u, spdy_framer_visitor_->actual_header_block_.size());
498 ASSERT_EQ("200 OK", spdy_framer_visitor_->actual_header_block_[":status"]); 389 ASSERT_EQ("200 OK", spdy_framer_visitor_->actual_header_block_[":status"]);
499 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_[":version"]); 390 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_[":version"]);
500 ASSERT_EQ("value1", spdy_framer_visitor_->actual_header_block_["key1"]); 391 ASSERT_EQ("value1", spdy_framer_visitor_->actual_header_block_["key1"]);
501 } 392 }
502 393
503 TEST_P(SpdySMProxyTest, SendDataFrame) { 394 TEST_F(SpdySMProxyTest, SendDataFrame) {
504 uint32_t stream_id = 133; 395 uint32_t stream_id = 133;
505 SpdyDataFlags flags = DATA_FLAG_NONE; 396 SpdyDataFlags flags = DATA_FLAG_NONE;
506 const char* actual_data; 397 const char* actual_data;
507 size_t actual_size; 398 size_t actual_size;
508 399
509 interface_->SendDataFrame(stream_id, "hello", 5, flags, true); 400 interface_->SendDataFrame(stream_id, "hello", 5, flags, true);
510 401
511 ASSERT_EQ(1u, connection_->output_list()->size()); 402 ASSERT_EQ(1u, connection_->output_list()->size());
512 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); 403 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
513 DataFrame* df = *i++; 404 DataFrame* df = *i++;
514 405
515 { 406 {
516 InSequence s; 407 InSequence s;
517 EXPECT_CALL(*spdy_framer_visitor_, 408 EXPECT_CALL(*spdy_framer_visitor_,
518 OnDataFrameHeader(stream_id, _, false)); 409 OnDataFrameHeader(stream_id, _, false));
519 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, _, _)) 410 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, _, _))
520 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); 411 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size)));
521 } 412 }
522 413
523 spdy_framer_->ProcessInput(df->data, df->size); 414 spdy_framer_->ProcessInput(df->data, df->size);
524 ASSERT_EQ(1, spdy_framer_->frames_received()); 415 ASSERT_EQ(1, spdy_framer_->frames_received());
525 ASSERT_EQ("hello", StringPiece(actual_data, actual_size)); 416 ASSERT_EQ("hello", StringPiece(actual_data, actual_size));
526 } 417 }
527 418
528 TEST_P(SpdySMProxyTest, SendLongDataFrame) { 419 TEST_F(SpdySMProxyTest, SendLongDataFrame) {
529 uint32_t stream_id = 133; 420 uint32_t stream_id = 133;
530 SpdyDataFlags flags = DATA_FLAG_NONE; 421 SpdyDataFlags flags = DATA_FLAG_NONE;
531 const char* actual_data; 422 const char* actual_data;
532 size_t actual_size; 423 size_t actual_size;
533 424
534 std::string data = std::string(kSpdySegmentSize, 'a') + 425 std::string data = std::string(kSpdySegmentSize, 'a') +
535 std::string(kSpdySegmentSize, 'b') + "c"; 426 std::string(kSpdySegmentSize, 'b') + "c";
536 interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true); 427 interface_->SendDataFrame(stream_id, data.data(), data.size(), flags, true);
537 428
538 { 429 {
(...skipping 17 matching lines...) Expand all
556 df = *i++; 447 df = *i++;
557 spdy_framer_->ProcessInput(df->data, df->size); 448 spdy_framer_->ProcessInput(df->data, df->size);
558 ASSERT_EQ(std::string(kSpdySegmentSize, 'b'), 449 ASSERT_EQ(std::string(kSpdySegmentSize, 'b'),
559 StringPiece(actual_data, actual_size)); 450 StringPiece(actual_data, actual_size));
560 451
561 df = *i++; 452 df = *i++;
562 spdy_framer_->ProcessInput(df->data, df->size); 453 spdy_framer_->ProcessInput(df->data, df->size);
563 ASSERT_EQ("c", StringPiece(actual_data, actual_size)); 454 ASSERT_EQ("c", StringPiece(actual_data, actual_size));
564 } 455 }
565 456
566 TEST_P(SpdySMServerTest, OnSynStream) { 457 TEST_F(SpdySMServerTest, NewStream) {
567 BufferedSpdyFramerVisitorInterface* visitor = interface_.get();
568 uint32_t stream_id = 82;
569 SpdyHeaderBlock spdy_headers;
570 spdy_headers["url"] = "http://www.example.com/path";
571 spdy_headers["method"] = "GET";
572 spdy_headers["scheme"] = "http";
573 spdy_headers["version"] = "HTTP/1.1";
574
575 {
576 BalsaHeaders headers;
577 memory_cache_->InsertFile(&headers, "GET_/path", "");
578 }
579 visitor->OnSynStream(stream_id, 0, 0, true, true, spdy_headers);
580 ASSERT_TRUE(HasStream(stream_id));
581 }
582
583 TEST_P(SpdySMServerTest, NewStream) {
584 uint32_t stream_id = 13; 458 uint32_t stream_id = 13;
585 std::string filename = "foobar"; 459 std::string filename = "foobar";
586 460
587 { 461 {
588 BalsaHeaders headers; 462 BalsaHeaders headers;
589 memory_cache_->InsertFile(&headers, filename, ""); 463 memory_cache_->InsertFile(&headers, filename, "");
590 } 464 }
591 465
592 interface_->NewStream(stream_id, 0, filename); 466 interface_->NewStream(stream_id, 0, filename);
593 ASSERT_TRUE(HasStream(stream_id)); 467 ASSERT_TRUE(HasStream(stream_id));
594 } 468 }
595 469
596 TEST_P(SpdySMServerTest, NewStreamError) { 470 TEST_F(SpdySMServerTest, NewStreamError) {
597 uint32_t stream_id = 82; 471 uint32_t stream_id = 82;
598 const char* actual_data; 472 const char* actual_data;
599 size_t actual_size; 473 size_t actual_size;
600 testing::MockFunction<void(int)> checkpoint; // NOLINT 474 testing::MockFunction<void(int)> checkpoint; // NOLINT
601 475
602 interface_->NewStream(stream_id, 0, "nonexistingfile"); 476 interface_->NewStream(stream_id, 0, "nonexistingfile");
603 477
604 ASSERT_EQ(2u, connection_->output_list()->size()); 478 ASSERT_EQ(2u, connection_->output_list()->size());
605 479
606 { 480 {
607 InSequence s; 481 InSequence s;
608 if (GetParam() < HTTP2) {
609 EXPECT_CALL(*spdy_framer_visitor_, OnSynReplyMock(stream_id, false, _));
610 } else {
611 EXPECT_CALL(*spdy_framer_visitor_, 482 EXPECT_CALL(*spdy_framer_visitor_,
612 OnHeadersMock(stream_id, /*has_priority=*/false, _, _, _, 483 OnHeadersMock(stream_id, /*has_priority=*/false, _, _, _,
613 /*fin=*/false, _)); 484 /*fin=*/false, _));
614 }
615 EXPECT_CALL(checkpoint, Call(0)); 485 EXPECT_CALL(checkpoint, Call(0));
616 EXPECT_CALL(*spdy_framer_visitor_, 486 EXPECT_CALL(*spdy_framer_visitor_,
617 OnDataFrameHeader(stream_id, _, true)); 487 OnDataFrameHeader(stream_id, _, true));
618 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, _, _)) 488 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, _, _))
619 .Times(1) 489 .Times(1)
620 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size))); 490 .WillOnce(DoAll(SaveArg<1>(&actual_data), SaveArg<2>(&actual_size)));
621 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, NULL, 0)) 491 EXPECT_CALL(*spdy_framer_visitor_, OnStreamFrameData(stream_id, NULL, 0))
622 .Times(1); 492 .Times(1);
623 } 493 }
624 494
625 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin(); 495 std::list<DataFrame*>::const_iterator i = connection_->output_list()->begin();
626 DataFrame* df = *i++; 496 DataFrame* df = *i++;
627 spdy_framer_->ProcessInput(df->data, df->size); 497 spdy_framer_->ProcessInput(df->data, df->size);
628 checkpoint.Call(0); 498 checkpoint.Call(0);
629 df = *i++; 499 df = *i++;
630 spdy_framer_->ProcessInput(df->data, df->size); 500 spdy_framer_->ProcessInput(df->data, df->size);
631 501
632 ASSERT_EQ(2, spdy_framer_->frames_received()); 502 ASSERT_EQ(2, spdy_framer_->frames_received());
633 ASSERT_EQ(2u, spdy_framer_visitor_->actual_header_block_.size()); 503 ASSERT_EQ(2u, spdy_framer_visitor_->actual_header_block_.size());
634 ASSERT_EQ("404 Not Found", 504 ASSERT_EQ("404 Not Found",
635 spdy_framer_visitor_->actual_header_block_["status"]); 505 spdy_framer_visitor_->actual_header_block_["status"]);
636 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_["version"]); 506 ASSERT_EQ("HTTP/1.1", spdy_framer_visitor_->actual_header_block_["version"]);
637 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size)); 507 ASSERT_EQ("wtf?", StringPiece(actual_data, actual_size));
638 } 508 }
639 509
640 } // namespace 510 } // namespace
641 511
642 } // namespace net 512 } // namespace net
OLDNEW
« no previous file with comments | « net/tools/flip_server/spdy_interface.cc ('k') | net/tools/quic/quic_in_memory_cache.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698