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

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

Issue 3033012: Fixed memory leak in SpdyHttpStreamTest. Removed suppressions. (Closed)
Patch Set: merge with trunk Created 10 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/spdy_framer.h ('k') | net/spdy/spdy_network_transaction_unittest.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 (c) 2010 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 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/spdy_http_stream.h" 5 #include "net/spdy/spdy_http_stream.h"
6 #include "base/ref_counted.h"
7 #include "base/time.h"
8 #include "net/base/mock_host_resolver.h"
9 #include "net/base/net_errors.h"
10 #include "net/base/net_log.h"
11 #include "net/base/ssl_config_service.h"
12 #include "net/base/ssl_config_service_defaults.h"
13 #include "net/base/test_completion_callback.h"
14 #include "net/http/http_auth_handler_factory.h"
15 #include "net/http/http_network_session.h"
16 #include "net/http/http_request_info.h"
17 #include "net/http/http_response_info.h"
18 #include "net/proxy/proxy_service.h"
19 #include "net/socket/socket_test_util.h"
20 #include "net/spdy/spdy_session.h" 6 #include "net/spdy/spdy_session.h"
21 #include "net/spdy/spdy_session_pool.h" 7 #include "net/spdy/spdy_test_util.h"
22 #include "testing/gtest/include/gtest/gtest.h" 8 #include "testing/gtest/include/gtest/gtest.h"
23 9
24 namespace net { 10 namespace net {
25 11
26 class SpdySessionPoolPeer {
27 public:
28 explicit SpdySessionPoolPeer(const scoped_refptr<SpdySessionPool>& pool)
29 : pool_(pool) {}
30
31 void RemoveSpdySession(const scoped_refptr<SpdySession>& session) {
32 pool_->Remove(session);
33 }
34
35 private:
36 const scoped_refptr<SpdySessionPool> pool_;
37
38 DISALLOW_COPY_AND_ASSIGN(SpdySessionPoolPeer);
39 };
40
41 namespace {
42
43 // Create a proxy service which fails on all requests (falls back to direct).
44 ProxyService* CreateNullProxyService() {
45 return ProxyService::CreateNull();
46 }
47
48 // Helper to manage the lifetimes of the dependencies for a
49 // SpdyNetworkTransaction.
50 class SessionDependencies {
51 public:
52 // Default set of dependencies -- "null" proxy service.
53 SessionDependencies()
54 : host_resolver(new MockHostResolver),
55 proxy_service(CreateNullProxyService()),
56 ssl_config_service(new SSLConfigServiceDefaults),
57 http_auth_handler_factory(HttpAuthHandlerFactory::CreateDefault()),
58 spdy_session_pool(new SpdySessionPool()) {}
59
60 // Custom proxy service dependency.
61 explicit SessionDependencies(ProxyService* proxy_service)
62 : host_resolver(new MockHostResolver),
63 proxy_service(proxy_service),
64 ssl_config_service(new SSLConfigServiceDefaults),
65 http_auth_handler_factory(HttpAuthHandlerFactory::CreateDefault()),
66 spdy_session_pool(new SpdySessionPool()) {}
67
68 scoped_refptr<MockHostResolverBase> host_resolver;
69 scoped_refptr<ProxyService> proxy_service;
70 scoped_refptr<SSLConfigService> ssl_config_service;
71 MockClientSocketFactory socket_factory;
72 scoped_ptr<HttpAuthHandlerFactory> http_auth_handler_factory;
73 scoped_refptr<SpdySessionPool> spdy_session_pool;
74 };
75
76 HttpNetworkSession* CreateSession(SessionDependencies* session_deps) {
77 return new HttpNetworkSession(session_deps->host_resolver,
78 session_deps->proxy_service,
79 &session_deps->socket_factory,
80 session_deps->ssl_config_service,
81 session_deps->spdy_session_pool,
82 session_deps->http_auth_handler_factory.get(),
83 NULL,
84 NULL);
85 }
86
87 class SpdyHttpStreamTest : public testing::Test { 12 class SpdyHttpStreamTest : public testing::Test {
88 protected: 13 protected:
89 SpdyHttpStreamTest() 14 SpdyHttpStreamTest(){}
90 : session_(CreateSession(&session_deps_)),
91 pool_peer_(session_->spdy_session_pool()) {}
92 15
93 scoped_refptr<SpdySession> CreateSpdySession() { 16 void EnableCompression(bool enabled) {
94 HostPortPair host_port_pair("www.google.com", 80); 17 spdy::SpdyFramer::set_enable_compression_default(enabled);
95 scoped_refptr<SpdySession> session(
96 session_->spdy_session_pool()->Get(
97 host_port_pair, session_, BoundNetLog()));
98 return session;
99 } 18 }
100 19
101 virtual void TearDown() { 20 virtual void TearDown() {
102 MessageLoop::current()->RunAllPending(); 21 MessageLoop::current()->RunAllPending();
103 } 22 }
104
105 SessionDependencies session_deps_;
106 scoped_refptr<HttpNetworkSession> session_;
107 SpdySessionPoolPeer pool_peer_;
108 }; 23 };
109 24
110 // Needs fixing, see http://crbug.com/28622
111 TEST_F(SpdyHttpStreamTest, SendRequest) { 25 TEST_F(SpdyHttpStreamTest, SendRequest) {
112 scoped_refptr<SpdySession> session(CreateSpdySession()); 26 EnableCompression(false);
27 SpdySession::SetSSLMode(false);
28
29 SpdySessionDependencies session_deps;
30 scoped_ptr<spdy::SpdyFrame> req(ConstructSpdyGet(NULL, 0, false, 1, LOWEST));
31 MockWrite writes[] = {
32 CreateMockWrite(*req.get(), 1),
33 };
34 MockRead reads[] = {
35 MockRead(false, 0, 2) // EOF
36 };
37 scoped_refptr<OrderedSocketData> data(
38 new OrderedSocketData(reads, arraysize(reads),
39 writes, arraysize(writes)));
40 session_deps.socket_factory.AddSocketDataProvider(data.get());
41
42 scoped_refptr<HttpNetworkSession> http_session(
43 SpdySessionDependencies::SpdyCreateSession(&session_deps));
44 scoped_refptr<SpdySessionPool> spdy_session_pool(
45 http_session->spdy_session_pool());
46 HostPortPair host_port_pair("www.google.com", 80);
47 scoped_refptr<SpdySession> session =
48 spdy_session_pool->Get(
49 host_port_pair, http_session.get(), BoundNetLog());
50 scoped_refptr<TCPSocketParams> tcp_params =
51 new TCPSocketParams(host_port_pair.host, host_port_pair.port,
52 MEDIUM, GURL(), false);
53 int rv = session->Connect(host_port_pair.host, tcp_params, MEDIUM);
54 ASSERT_EQ(OK, rv);
55
113 HttpRequestInfo request; 56 HttpRequestInfo request;
114 request.method = "GET"; 57 request.method = "GET";
115 request.url = GURL("http://www.google.com/"); 58 request.url = GURL("http://www.google.com/");
116 TestCompletionCallback callback; 59 TestCompletionCallback callback;
117 HttpResponseInfo response; 60 HttpResponseInfo response;
118 scoped_ptr<SpdyHttpStream> http_stream(new SpdyHttpStream()); 61 scoped_ptr<SpdyHttpStream> http_stream(new SpdyHttpStream());
119 ASSERT_EQ( 62 ASSERT_EQ(
120 OK, 63 OK,
121 http_stream->InitializeStream(session, request, BoundNetLog(), NULL)); 64 http_stream->InitializeStream(session, request, BoundNetLog(), NULL));
122 http_stream->InitializeRequest(base::Time::Now(), NULL); 65 http_stream->InitializeRequest(base::Time::Now(), NULL);
123 EXPECT_EQ(ERR_IO_PENDING, 66 EXPECT_EQ(ERR_IO_PENDING,
124 http_stream->SendRequest(&response, &callback)); 67 http_stream->SendRequest(&response, &callback));
125 68 MessageLoop::current()->RunAllPending();
126 // Need to manually remove the spdy session since normally it gets removed on 69 EXPECT_TRUE(spdy_session_pool->HasSession(host_port_pair));
127 // socket close/error, but we aren't communicating over a socket here. 70 spdy_session_pool->Remove(session);
128 pool_peer_.RemoveSpdySession(session);
129 } 71 }
130 72
131 // TODO(willchan): Write a longer test for SpdyStream that exercises all 73 // TODO(willchan): Write a longer test for SpdyStream that exercises all
132 // methods. 74 // methods.
133 75
134 } // namespace
135
136 } // namespace net 76 } // namespace net
OLDNEW
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_network_transaction_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698