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

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

Issue 12743006: [SPDY] Refactor tests in preparation for a fix for a session flow control bug (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 7 years, 9 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 | Annotate | Revision Log
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 "base/memory/ref_counted.h" 5 #include "base/memory/ref_counted.h"
6 #include "base/memory/scoped_ptr.h" 6 #include "base/memory/scoped_ptr.h"
7 #include "net/base/completion_callback.h" 7 #include "net/base/completion_callback.h"
8 #include "net/base/net_log_unittest.h" 8 #include "net/base/net_log_unittest.h"
9 #include "net/spdy/buffered_spdy_framer.h" 9 #include "net/spdy/buffered_spdy_framer.h"
10 #include "net/spdy/spdy_stream.h" 10 #include "net/spdy/spdy_stream.h"
(...skipping 22 matching lines...) Expand all
33 0, 33 0,
34 ConvertRequestPriorityToSpdyPriority(LOWEST, 2), 34 ConvertRequestPriorityToSpdyPriority(LOWEST, 2),
35 CONTROL_FLAG_NONE, 35 CONTROL_FLAG_NONE,
36 false, 36 false,
37 RST_STREAM_INVALID, 37 RST_STREAM_INVALID,
38 NULL, 38 NULL,
39 0, 39 0,
40 DATA_FLAG_NONE 40 DATA_FLAG_NONE
41 }; 41 };
42 42
43 const char* const kGetHeaders[] = { 43 // TODO(akalin): Merge with ConstructSpdyGet(). (The sticking point is
44 "method", 44 // CONTROL_FLAG_NONE vs. CONTROL_FLAG_FIN.)
45 "GET", 45 scoped_ptr<SpdyFrame> ConstructSpdyGetRequest(const char* url) {
46 "scheme",
47 "http",
48 "host",
49 "www.google.com",
50 "url",
51 "/",
52 "version",
53 "HTTP/1.1",
54 };
55
56 scoped_ptr<SpdyFrame> ConstructSpdyGetRequest() {
57 return scoped_ptr<SpdyFrame>( 46 return scoped_ptr<SpdyFrame>(
58 ConstructSpdyPacket( 47 ConstructSpdyPacket(kSynStartHeader, ConstructHeaderBlock(url)));
59 kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2));
60 }
61
62 scoped_ptr<SpdyHeaderBlock> ConstructSpdyGetHeaderBlock() {
63 scoped_ptr<SpdyHeaderBlock> headers(new SpdyHeaderBlock);
64 for (size_t i = 0; i < arraysize(kGetHeaders) / 2; ++i) {
65 (*headers)[kGetHeaders[2*i]] = kGetHeaders[2*i+1];
66 }
67 return headers.Pass();
68 } 48 }
69 49
70 scoped_ptr<SpdyFrame> ConstructSpdyBodyFrame(const char* data, int length) { 50 scoped_ptr<SpdyFrame> ConstructSpdyBodyFrame(const char* data, int length) {
71 BufferedSpdyFramer framer(kSpdyVersion2, false); 51 BufferedSpdyFramer framer(kSpdyVersion2, false);
72 return scoped_ptr<SpdyFrame>( 52 return scoped_ptr<SpdyFrame>(
73 framer.CreateDataFrame(1, data, length, DATA_FLAG_NONE)); 53 framer.CreateDataFrame(1, data, length, DATA_FLAG_NONE));
74 } 54 }
75 55
76 class SpdyStreamSpdy2Test : public testing::Test { 56 class SpdyStreamSpdy2Test : public testing::Test {
77 protected: 57 protected:
(...skipping 25 matching lines...) Expand all
103 virtual void TearDown() { 83 virtual void TearDown() {
104 MessageLoop::current()->RunUntilIdle(); 84 MessageLoop::current()->RunUntilIdle();
105 } 85 }
106 86
107 HostPortPair host_port_pair_; 87 HostPortPair host_port_pair_;
108 SpdySessionDependencies session_deps_; 88 SpdySessionDependencies session_deps_;
109 scoped_refptr<HttpNetworkSession> session_; 89 scoped_refptr<HttpNetworkSession> session_;
110 }; 90 };
111 91
112 TEST_F(SpdyStreamSpdy2Test, SendDataAfterOpen) { 92 TEST_F(SpdyStreamSpdy2Test, SendDataAfterOpen) {
93 const char kStreamUrl[] = "http://www.google.com/";
94 GURL url(kStreamUrl);
95
113 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 96 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
114 97
115 scoped_ptr<SpdyFrame> req = ConstructSpdyGetRequest(); 98 scoped_ptr<SpdyFrame> req = ConstructSpdyGetRequest(kStreamUrl);
116 scoped_ptr<SpdyFrame> msg = ConstructSpdyBodyFrame("\0hello!\xff", 8); 99 scoped_ptr<SpdyFrame> msg = ConstructSpdyBodyFrame("\0hello!\xff", 8);
117 MockWrite writes[] = { 100 MockWrite writes[] = {
118 CreateMockWrite(*req), 101 CreateMockWrite(*req),
119 CreateMockWrite(*msg), 102 CreateMockWrite(*msg),
120 }; 103 };
121 writes[0].sequence_number = 0; 104 writes[0].sequence_number = 0;
122 writes[1].sequence_number = 2; 105 writes[1].sequence_number = 2;
123 106
124 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 107 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
125 scoped_ptr<SpdyFrame> echo( 108 scoped_ptr<SpdyFrame> echo(
126 ConstructSpdyBodyFrame("\0hello!\xff", 8)); 109 ConstructSpdyBodyFrame("\0hello!\xff", 8));
127 MockRead reads[] = { 110 MockRead reads[] = {
128 CreateMockRead(*resp), 111 CreateMockRead(*resp),
129 CreateMockRead(*echo), 112 CreateMockRead(*echo),
130 MockRead(ASYNC, 0, 0), // EOF 113 MockRead(ASYNC, 0, 0), // EOF
131 }; 114 };
132 reads[0].sequence_number = 1; 115 reads[0].sequence_number = 1;
133 reads[1].sequence_number = 3; 116 reads[1].sequence_number = 3;
134 reads[2].sequence_number = 4; 117 reads[2].sequence_number = 4;
135 118
136 OrderedSocketData data(reads, arraysize(reads), 119 OrderedSocketData data(reads, arraysize(reads),
137 writes, arraysize(writes)); 120 writes, arraysize(writes));
138 MockConnect connect_data(SYNCHRONOUS, OK); 121 MockConnect connect_data(SYNCHRONOUS, OK);
139 data.set_connect_data(connect_data); 122 data.set_connect_data(connect_data);
140 123
141 session_deps_.socket_factory->AddSocketDataProvider(&data); 124 session_deps_.socket_factory->AddSocketDataProvider(&data);
142 125
143 scoped_refptr<SpdySession> session(CreateSpdySession()); 126 scoped_refptr<SpdySession> session(CreateSpdySession());
144 const char kStreamUrl[] = "http://www.google.com/";
145 GURL url(kStreamUrl);
146 127
147 InitializeSpdySession(session, host_port_pair_); 128 InitializeSpdySession(session, host_port_pair_);
148 129
149 scoped_refptr<SpdyStream> stream = 130 scoped_refptr<SpdyStream> stream =
150 CreateStreamSynchronously(session, url, LOWEST, BoundNetLog()); 131 CreateStreamSynchronously(session, url, LOWEST, BoundNetLog());
151 ASSERT_TRUE(stream.get() != NULL); 132 ASSERT_TRUE(stream.get() != NULL);
152 scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(8)); 133 scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(8));
153 memcpy(buf->data(), "\0hello!\xff", 8); 134 memcpy(buf->data(), "\0hello!\xff", 8);
154 135
155 StreamDelegateSendImmediate delegate( 136 StreamDelegateSendImmediate delegate(
156 stream.get(), scoped_ptr<SpdyHeaderBlock>(), buf.get()); 137 stream.get(), scoped_ptr<SpdyHeaderBlock>(), buf.get());
157 stream->SetDelegate(&delegate); 138 stream->SetDelegate(&delegate);
158 139
159 EXPECT_FALSE(stream->HasUrl()); 140 EXPECT_FALSE(stream->HasUrl());
160 141
161 stream->set_spdy_headers(ConstructSpdyGetHeaderBlock()); 142 stream->set_spdy_headers(ConstructHeaderBlock(kStreamUrl));
162 EXPECT_TRUE(stream->HasUrl()); 143 EXPECT_TRUE(stream->HasUrl());
163 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); 144 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
164 145
165 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); 146 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
166 147
167 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 148 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
168 149
169 EXPECT_TRUE(delegate.send_headers_completed()); 150 EXPECT_TRUE(delegate.send_headers_completed());
170 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status")); 151 EXPECT_EQ("200", delegate.GetResponseHeaderValue("status"));
171 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version")); 152 EXPECT_EQ("HTTP/1.1", delegate.GetResponseHeaderValue("version"));
(...skipping 119 matching lines...) Expand 10 before | Expand all | Expand 10 after
291 response["version"] = "OK"; 272 response["version"] = "OK";
292 stream->OnHeaders(headers); 273 stream->OnHeaders(headers);
293 274
294 stream->set_response_received(); 275 stream->set_response_received();
295 EXPECT_TRUE(stream->response_received()); 276 EXPECT_TRUE(stream->response_received());
296 EXPECT_TRUE(stream->HasUrl()); 277 EXPECT_TRUE(stream->HasUrl());
297 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); 278 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
298 } 279 }
299 280
300 TEST_F(SpdyStreamSpdy2Test, StreamError) { 281 TEST_F(SpdyStreamSpdy2Test, StreamError) {
282 const char kStreamUrl[] = "http://www.google.com/";
283 GURL url(kStreamUrl);
284
301 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_); 285 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps_);
302 286
303 scoped_ptr<SpdyFrame> req = ConstructSpdyGetRequest(); 287 scoped_ptr<SpdyFrame> req = ConstructSpdyGetRequest(kStreamUrl);
304 scoped_ptr<SpdyFrame> msg( 288 scoped_ptr<SpdyFrame> msg(
305 ConstructSpdyBodyFrame("\0hello!\xff", 8)); 289 ConstructSpdyBodyFrame("\0hello!\xff", 8));
306 MockWrite writes[] = { 290 MockWrite writes[] = {
307 CreateMockWrite(*req), 291 CreateMockWrite(*req),
308 CreateMockWrite(*msg), 292 CreateMockWrite(*msg),
309 }; 293 };
310 writes[0].sequence_number = 0; 294 writes[0].sequence_number = 0;
311 writes[1].sequence_number = 2; 295 writes[1].sequence_number = 2;
312 296
313 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1)); 297 scoped_ptr<SpdyFrame> resp(ConstructSpdyGetSynReply(NULL, 0, 1));
(...skipping 11 matching lines...) Expand all
325 CapturingBoundNetLog log; 309 CapturingBoundNetLog log;
326 310
327 OrderedSocketData data(reads, arraysize(reads), 311 OrderedSocketData data(reads, arraysize(reads),
328 writes, arraysize(writes)); 312 writes, arraysize(writes));
329 MockConnect connect_data(SYNCHRONOUS, OK); 313 MockConnect connect_data(SYNCHRONOUS, OK);
330 data.set_connect_data(connect_data); 314 data.set_connect_data(connect_data);
331 315
332 session_deps_.socket_factory->AddSocketDataProvider(&data); 316 session_deps_.socket_factory->AddSocketDataProvider(&data);
333 317
334 scoped_refptr<SpdySession> session(CreateSpdySession()); 318 scoped_refptr<SpdySession> session(CreateSpdySession());
335 const char kStreamUrl[] = "http://www.google.com/";
336 GURL url(kStreamUrl);
337 319
338 InitializeSpdySession(session, host_port_pair_); 320 InitializeSpdySession(session, host_port_pair_);
339 321
340 scoped_refptr<SpdyStream> stream = 322 scoped_refptr<SpdyStream> stream =
341 CreateStreamSynchronously(session, url, LOWEST, log.bound()); 323 CreateStreamSynchronously(session, url, LOWEST, log.bound());
342 ASSERT_TRUE(stream.get() != NULL); 324 ASSERT_TRUE(stream.get() != NULL);
343 scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(8)); 325 scoped_refptr<IOBufferWithSize> buf(new IOBufferWithSize(8));
344 memcpy(buf->data(), "\0hello!\xff", 8); 326 memcpy(buf->data(), "\0hello!\xff", 8);
345 327
346 StreamDelegateSendImmediate delegate( 328 StreamDelegateSendImmediate delegate(
347 stream.get(), scoped_ptr<SpdyHeaderBlock>(), buf.get()); 329 stream.get(), scoped_ptr<SpdyHeaderBlock>(), buf.get());
348 stream->SetDelegate(&delegate); 330 stream->SetDelegate(&delegate);
349 331
350 EXPECT_FALSE(stream->HasUrl()); 332 EXPECT_FALSE(stream->HasUrl());
351 333
352 stream->set_spdy_headers(ConstructSpdyGetHeaderBlock()); 334 stream->set_spdy_headers(ConstructHeaderBlock(kStreamUrl));
353 EXPECT_TRUE(stream->HasUrl()); 335 EXPECT_TRUE(stream->HasUrl());
354 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); 336 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec());
355 337
356 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); 338 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true));
357 339
358 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose()); 340 EXPECT_EQ(ERR_CONNECTION_CLOSED, delegate.WaitForClose());
359 341
360 const SpdyStreamId stream_id = stream->stream_id(); 342 const SpdyStreamId stream_id = stream->stream_id();
361 343
362 EXPECT_TRUE(delegate.send_headers_completed()); 344 EXPECT_TRUE(delegate.send_headers_completed());
(...skipping 16 matching lines...) Expand all
379 int stream_id2; 361 int stream_id2;
380 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2)); 362 ASSERT_TRUE(entries[pos].GetIntegerValue("stream_id", &stream_id2));
381 EXPECT_EQ(static_cast<int>(stream_id), stream_id2); 363 EXPECT_EQ(static_cast<int>(stream_id), stream_id2);
382 } 364 }
383 365
384 } // namespace 366 } // namespace
385 367
386 } // namespace test 368 } // namespace test
387 369
388 } // namespace net 370 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698