OLD | NEW |
| (Empty) |
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 | |
3 // found in the LICENSE file. | |
4 | |
5 #include "net/http/http_network_session.h" | |
6 | |
7 #include "base/ref_counted.h" | |
8 #include "net/base/mock_host_resolver.h" | |
9 #include "net/base/mock_network_change_notifier.h" | |
10 #include "net/base/ssl_config_service_defaults.h" | |
11 #include "net/base/test_completion_callback.h" | |
12 #include "net/http/http_auth_handler_factory.h" | |
13 #include "net/proxy/proxy_service.h" | |
14 #include "net/socket/client_socket_handle.h" | |
15 #include "net/socket/socket_test_util.h" | |
16 #include "net/socket/tcp_client_socket_pool.h" | |
17 #include "net/spdy/spdy_session.h" | |
18 #include "net/spdy/spdy_session_pool.h" | |
19 #include "testing/gtest/include/gtest/gtest.h" | |
20 | |
21 namespace net { | |
22 namespace { | |
23 | |
24 TEST(HttpNetworkSessionTest, FlushOnNetworkChange) { | |
25 MockNetworkChangeNotifier mock_notifier; | |
26 scoped_refptr<MockCachingHostResolver> mock_resolver( | |
27 new MockCachingHostResolver); | |
28 MockClientSocketFactory mock_factory; | |
29 scoped_ptr<HttpAuthHandlerFactory> auth_handler_factory( | |
30 HttpAuthHandlerFactory::CreateDefault()); | |
31 scoped_refptr<HttpNetworkSession> session( | |
32 new HttpNetworkSession(&mock_notifier, | |
33 mock_resolver, | |
34 ProxyService::CreateNull(), | |
35 &mock_factory, | |
36 new SSLConfigServiceDefaults, | |
37 auth_handler_factory.get())); | |
38 | |
39 scoped_refptr<TCPClientSocketPool> tcp_socket_pool( | |
40 session->tcp_socket_pool()); | |
41 | |
42 StaticSocketDataProvider data; | |
43 mock_factory.AddSocketDataProvider(&data); | |
44 | |
45 TestCompletionCallback callback; | |
46 ClientSocketHandle handle; | |
47 TCPSocketParams dest("www.google.com", 80, LOW, GURL(), false); | |
48 int rv = handle.Init("a", dest, LOW, &callback, tcp_socket_pool, NULL); | |
49 EXPECT_EQ(ERR_IO_PENDING, rv); | |
50 EXPECT_FALSE(handle.is_initialized()); | |
51 EXPECT_FALSE(handle.socket()); | |
52 | |
53 EXPECT_EQ(OK, callback.WaitForResult()); | |
54 EXPECT_TRUE(handle.is_initialized()); | |
55 EXPECT_TRUE(handle.socket()); | |
56 | |
57 handle.Reset(); | |
58 | |
59 // Need to run all pending to release the socket back to the pool. | |
60 MessageLoop::current()->RunAllPending(); | |
61 | |
62 // Now we should have 1 idle socket. | |
63 EXPECT_EQ(1, tcp_socket_pool->IdleSocketCount()); | |
64 | |
65 HostPortPair host_port_pair("www.google.com", 80); | |
66 | |
67 scoped_refptr<SpdySession> spdy_session(session->spdy_session_pool()->Get( | |
68 host_port_pair, session)); | |
69 | |
70 EXPECT_TRUE(session->spdy_session_pool()->HasSession(host_port_pair)); | |
71 | |
72 EXPECT_EQ(1u, mock_resolver->cache()->size()); | |
73 | |
74 // After an IP address change, we should have 0 idle sockets. | |
75 mock_notifier.NotifyIPAddressChange(); | |
76 EXPECT_EQ(0, tcp_socket_pool->IdleSocketCount()); | |
77 EXPECT_FALSE(session->spdy_session_pool()->HasSession(host_port_pair)); | |
78 EXPECT_EQ(0u, mock_resolver->cache()->size()); | |
79 } | |
80 | |
81 } // namespace | |
82 } // namespace net | |
OLD | NEW |