| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "base/memory/ref_counted.h" | 5 #include "base/memory/ref_counted.h" |
| 6 #include "net/base/completion_callback.h" | 6 #include "net/base/completion_callback.h" |
| 7 #include "net/base/net_log_unittest.h" | 7 #include "net/base/net_log_unittest.h" |
| 8 #include "net/spdy/buffered_spdy_framer.h" | 8 #include "net/spdy/buffered_spdy_framer.h" |
| 9 #include "net/spdy/spdy_stream.h" | 9 #include "net/spdy/spdy_stream.h" |
| 10 #include "net/spdy/spdy_http_utils.h" | 10 #include "net/spdy/spdy_http_utils.h" |
| (...skipping 125 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 136 0, | 136 0, |
| 137 net::ConvertRequestPriorityToSpdyPriority(LOWEST), | 137 net::ConvertRequestPriorityToSpdyPriority(LOWEST), |
| 138 spdy::CONTROL_FLAG_NONE, | 138 spdy::CONTROL_FLAG_NONE, |
| 139 false, | 139 false, |
| 140 spdy::INVALID, | 140 spdy::INVALID, |
| 141 NULL, | 141 NULL, |
| 142 0, | 142 0, |
| 143 spdy::DATA_FLAG_NONE | 143 spdy::DATA_FLAG_NONE |
| 144 }; | 144 }; |
| 145 static const char* const kGetHeaders[] = { | 145 static const char* const kGetHeaders[] = { |
| 146 "method", | 146 ":method", |
| 147 "GET", | 147 "GET", |
| 148 "scheme", | 148 ":scheme", |
| 149 "http", | 149 "http", |
| 150 "host", | 150 ":host", |
| 151 "www.google.com", | 151 "www.google.com", |
| 152 "path", | 152 ":path", |
| 153 "/", | 153 "/", |
| 154 "version", | 154 ":version", |
| 155 "HTTP/1.1", | 155 "HTTP/1.1", |
| 156 }; | 156 }; |
| 157 scoped_ptr<spdy::SpdyFrame> req( | 157 scoped_ptr<spdy::SpdyFrame> req( |
| 158 ConstructSpdyPacket( | 158 ConstructSpdyPacket( |
| 159 kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2)); | 159 kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2)); |
| 160 scoped_ptr<spdy::SpdyFrame> msg( | 160 scoped_ptr<spdy::SpdyFrame> msg( |
| 161 ConstructSpdyBodyFrame("\0hello!\xff", 8)); | 161 ConstructSpdyBodyFrame("\0hello!\xff", 8)); |
| 162 MockWrite writes[] = { | 162 MockWrite writes[] = { |
| 163 CreateMockWrite(*req), | 163 CreateMockWrite(*req), |
| 164 CreateMockWrite(*msg), | 164 CreateMockWrite(*msg), |
| (...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 211 memcpy(buf->data(), "\0hello!\xff", 8); | 211 memcpy(buf->data(), "\0hello!\xff", 8); |
| 212 TestCompletionCallback callback; | 212 TestCompletionCallback callback; |
| 213 | 213 |
| 214 scoped_ptr<TestSpdyStreamDelegate> delegate( | 214 scoped_ptr<TestSpdyStreamDelegate> delegate( |
| 215 new TestSpdyStreamDelegate(stream.get(), buf.get(), callback.callback())); | 215 new TestSpdyStreamDelegate(stream.get(), buf.get(), callback.callback())); |
| 216 stream->SetDelegate(delegate.get()); | 216 stream->SetDelegate(delegate.get()); |
| 217 | 217 |
| 218 EXPECT_FALSE(stream->HasUrl()); | 218 EXPECT_FALSE(stream->HasUrl()); |
| 219 | 219 |
| 220 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); | 220 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); |
| 221 (*headers)["method"] = "GET"; | 221 (*headers)[":method"] = "GET"; |
| 222 (*headers)["scheme"] = url.scheme(); | 222 (*headers)[":scheme"] = url.scheme(); |
| 223 (*headers)["host"] = url.host(); | 223 (*headers)[":host"] = url.host(); |
| 224 (*headers)["path"] = url.path(); | 224 (*headers)[":path"] = url.path(); |
| 225 (*headers)["version"] = "HTTP/1.1"; | 225 (*headers)[":version"] = "HTTP/1.1"; |
| 226 stream->set_spdy_headers(headers); | 226 stream->set_spdy_headers(headers); |
| 227 EXPECT_TRUE(stream->HasUrl()); | 227 EXPECT_TRUE(stream->HasUrl()); |
| 228 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); | 228 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); |
| 229 | 229 |
| 230 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); | 230 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); |
| 231 | 231 |
| 232 EXPECT_EQ(OK, callback.WaitForResult()); | 232 EXPECT_EQ(OK, callback.WaitForResult()); |
| 233 | 233 |
| 234 EXPECT_TRUE(delegate->send_headers_completed()); | 234 EXPECT_TRUE(delegate->send_headers_completed()); |
| 235 EXPECT_EQ("200", (*delegate->response())["status"]); | 235 EXPECT_EQ("200", (*delegate->response())["status"]); |
| 236 EXPECT_EQ("HTTP/1.1", (*delegate->response())["version"]); | 236 EXPECT_EQ("HTTP/1.1", (*delegate->response())["version"]); |
| 237 EXPECT_EQ(std::string("\0hello!\xff", 8), delegate->received_data()); | 237 EXPECT_EQ(std::string("\0hello!\xff", 8), delegate->received_data()); |
| 238 EXPECT_EQ(8, delegate->data_sent()); | 238 EXPECT_EQ(8, delegate->data_sent()); |
| 239 EXPECT_TRUE(delegate->closed()); | 239 EXPECT_TRUE(delegate->closed()); |
| 240 } | 240 } |
| 241 | 241 |
| 242 TEST_F(SpdyStreamSpdy3Test, PushedStream) { | 242 TEST_F(SpdyStreamSpdy3Test, PushedStream) { |
| 243 const char kStreamUrl[] = "http://www.google.com/"; | 243 const char kStreamUrl[] = "http://www.google.com/"; |
| 244 | 244 |
| 245 SpdySessionDependencies session_deps; | 245 SpdySessionDependencies session_deps; |
| 246 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps); | 246 session_ = SpdySessionDependencies::SpdyCreateSession(&session_deps); |
| 247 SpdySessionPoolPeer pool_peer_(session_->spdy_session_pool()); | 247 SpdySessionPoolPeer pool_peer_(session_->spdy_session_pool()); |
| 248 scoped_refptr<SpdySession> spdy_session(CreateSpdySession()); | 248 scoped_refptr<SpdySession> spdy_session(CreateSpdySession()); |
| 249 |
| 250 MockRead reads[] = { |
| 251 MockRead(ASYNC, 0, 0), // EOF |
| 252 }; |
| 253 |
| 254 scoped_ptr<OrderedSocketData> data( |
| 255 new OrderedSocketData(reads, arraysize(reads), NULL, 0)); |
| 256 MockConnect connect_data(SYNCHRONOUS, OK); |
| 257 data->set_connect_data(connect_data); |
| 258 |
| 259 session_deps.socket_factory->AddSocketDataProvider(data.get()); |
| 260 SpdySession::SetSSLMode(false); |
| 261 |
| 262 HostPortPair host_port_pair("www.google.com", 80); |
| 263 scoped_refptr<TransportSocketParams> transport_params( |
| 264 new TransportSocketParams(host_port_pair, LOWEST, false, false)); |
| 265 scoped_ptr<ClientSocketHandle> connection(new ClientSocketHandle); |
| 266 EXPECT_EQ(OK, connection->Init(host_port_pair.ToString(), transport_params, |
| 267 LOWEST, CompletionCallback(), |
| 268 session_->GetTransportSocketPool(), |
| 269 BoundNetLog())); |
| 270 spdy_session->InitializeWithSocket(connection.release(), false, OK); |
| 249 BoundNetLog net_log; | 271 BoundNetLog net_log; |
| 250 | 272 |
| 251 // Conjure up a stream. | 273 // Conjure up a stream. |
| 252 scoped_refptr<SpdyStream> stream = new SpdyStream(spdy_session, | 274 scoped_refptr<SpdyStream> stream = new SpdyStream(spdy_session, |
| 253 2, | 275 2, |
| 254 true, | 276 true, |
| 255 net_log); | 277 net_log); |
| 256 EXPECT_FALSE(stream->response_received()); | 278 EXPECT_FALSE(stream->response_received()); |
| 257 EXPECT_FALSE(stream->HasUrl()); | 279 EXPECT_FALSE(stream->HasUrl()); |
| 258 | 280 |
| 259 // Set a couple of headers. | 281 // Set a couple of headers. |
| 260 spdy::SpdyHeaderBlock response; | 282 spdy::SpdyHeaderBlock response; |
| 261 response["url"] = kStreamUrl; | 283 GURL url(kStreamUrl); |
| 284 response[":host"] = url.host(); |
| 285 response[":scheme"] = url.scheme(); |
| 286 response[":path"] = url.path(); |
| 262 stream->OnResponseReceived(response); | 287 stream->OnResponseReceived(response); |
| 263 | 288 |
| 264 // Send some basic headers. | 289 // Send some basic headers. |
| 265 spdy::SpdyHeaderBlock headers; | 290 spdy::SpdyHeaderBlock headers; |
| 266 response["status"] = "200"; | 291 response["status"] = "200"; |
| 267 response["version"] = "OK"; | 292 response["version"] = "OK"; |
| 268 stream->OnHeaders(headers); | 293 stream->OnHeaders(headers); |
| 269 | 294 |
| 270 stream->set_response_received(); | 295 stream->set_response_received(); |
| 271 EXPECT_TRUE(stream->response_received()); | 296 EXPECT_TRUE(stream->response_received()); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 285 0, | 310 0, |
| 286 net::ConvertRequestPriorityToSpdyPriority(LOWEST), | 311 net::ConvertRequestPriorityToSpdyPriority(LOWEST), |
| 287 spdy::CONTROL_FLAG_NONE, | 312 spdy::CONTROL_FLAG_NONE, |
| 288 false, | 313 false, |
| 289 spdy::INVALID, | 314 spdy::INVALID, |
| 290 NULL, | 315 NULL, |
| 291 0, | 316 0, |
| 292 spdy::DATA_FLAG_NONE | 317 spdy::DATA_FLAG_NONE |
| 293 }; | 318 }; |
| 294 static const char* const kGetHeaders[] = { | 319 static const char* const kGetHeaders[] = { |
| 295 "method", | 320 ":method", |
| 296 "GET", | 321 "GET", |
| 297 "scheme", | 322 ":scheme", |
| 298 "http", | 323 "http", |
| 299 "host", | 324 ":host", |
| 300 "www.google.com", | 325 "www.google.com", |
| 301 "path", | 326 ":path", |
| 302 "/", | 327 "/", |
| 303 "version", | 328 ":version", |
| 304 "HTTP/1.1", | 329 "HTTP/1.1", |
| 305 }; | 330 }; |
| 306 scoped_ptr<spdy::SpdyFrame> req( | 331 scoped_ptr<spdy::SpdyFrame> req( |
| 307 ConstructSpdyPacket( | 332 ConstructSpdyPacket( |
| 308 kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2)); | 333 kSynStartHeader, NULL, 0, kGetHeaders, arraysize(kGetHeaders) / 2)); |
| 309 scoped_ptr<spdy::SpdyFrame> msg( | 334 scoped_ptr<spdy::SpdyFrame> msg( |
| 310 ConstructSpdyBodyFrame("\0hello!\xff", 8)); | 335 ConstructSpdyBodyFrame("\0hello!\xff", 8)); |
| 311 MockWrite writes[] = { | 336 MockWrite writes[] = { |
| 312 CreateMockWrite(*req), | 337 CreateMockWrite(*req), |
| 313 CreateMockWrite(*msg), | 338 CreateMockWrite(*msg), |
| (...skipping 48 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 362 memcpy(buf->data(), "\0hello!\xff", 8); | 387 memcpy(buf->data(), "\0hello!\xff", 8); |
| 363 TestCompletionCallback callback; | 388 TestCompletionCallback callback; |
| 364 | 389 |
| 365 scoped_ptr<TestSpdyStreamDelegate> delegate( | 390 scoped_ptr<TestSpdyStreamDelegate> delegate( |
| 366 new TestSpdyStreamDelegate(stream.get(), buf.get(), callback.callback())); | 391 new TestSpdyStreamDelegate(stream.get(), buf.get(), callback.callback())); |
| 367 stream->SetDelegate(delegate.get()); | 392 stream->SetDelegate(delegate.get()); |
| 368 | 393 |
| 369 EXPECT_FALSE(stream->HasUrl()); | 394 EXPECT_FALSE(stream->HasUrl()); |
| 370 | 395 |
| 371 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); | 396 linked_ptr<spdy::SpdyHeaderBlock> headers(new spdy::SpdyHeaderBlock); |
| 372 (*headers)["method"] = "GET"; | 397 (*headers)[":method"] = "GET"; |
| 373 (*headers)["scheme"] = url.scheme(); | 398 (*headers)[":scheme"] = url.scheme(); |
| 374 (*headers)["host"] = url.host(); | 399 (*headers)[":host"] = url.host(); |
| 375 (*headers)["path"] = url.path(); | 400 (*headers)[":path"] = url.path(); |
| 376 (*headers)["version"] = "HTTP/1.1"; | 401 (*headers)[":version"] = "HTTP/1.1"; |
| 377 stream->set_spdy_headers(headers); | 402 stream->set_spdy_headers(headers); |
| 378 EXPECT_TRUE(stream->HasUrl()); | 403 EXPECT_TRUE(stream->HasUrl()); |
| 379 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); | 404 EXPECT_EQ(kStreamUrl, stream->GetUrl().spec()); |
| 380 | 405 |
| 381 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); | 406 EXPECT_EQ(ERR_IO_PENDING, stream->SendRequest(true)); |
| 382 | 407 |
| 383 const spdy::SpdyStreamId stream_id = stream->stream_id(); | 408 const spdy::SpdyStreamId stream_id = stream->stream_id(); |
| 384 | 409 |
| 385 EXPECT_EQ(OK, callback.WaitForResult()); | 410 EXPECT_EQ(OK, callback.WaitForResult()); |
| 386 | 411 |
| (...skipping 16 matching lines...) Expand all Loading... |
| 403 net::NetLog::PHASE_NONE); | 428 net::NetLog::PHASE_NONE); |
| 404 | 429 |
| 405 CapturingNetLog::Entry entry = entries[pos]; | 430 CapturingNetLog::Entry entry = entries[pos]; |
| 406 NetLogSpdyStreamErrorParameter* request_params = | 431 NetLogSpdyStreamErrorParameter* request_params = |
| 407 static_cast<NetLogSpdyStreamErrorParameter*>( | 432 static_cast<NetLogSpdyStreamErrorParameter*>( |
| 408 entry.extra_parameters.get()); | 433 entry.extra_parameters.get()); |
| 409 EXPECT_EQ(stream_id, request_params->stream_id()); | 434 EXPECT_EQ(stream_id, request_params->stream_id()); |
| 410 } | 435 } |
| 411 | 436 |
| 412 } // namespace net | 437 } // namespace net |
| OLD | NEW |