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

Side by Side Diff: net/base/ssl_client_socket_unittest.cc

Issue 16207: Make ssl_client_socket_unittest use a local server (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 10 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
« no previous file with comments | « net/base/ssl_client_socket_nss.cc ('k') | net/base/ssl_test_util.h » ('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) 2006-2008 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2006-2008 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/ref_counted.h" 5 #include "base/ref_counted.h"
6 #include "net/base/address_list.h" 6 #include "net/base/address_list.h"
7 #include "net/base/client_socket_factory.h" 7 #include "net/base/client_socket_factory.h"
8 #include "net/base/host_resolver.h" 8 #include "net/base/host_resolver.h"
9 #include "net/base/host_resolver_unittest.h" 9 #include "net/base/host_resolver_unittest.h"
10 #include "net/base/net_errors.h" 10 #include "net/base/net_errors.h"
11 #include "net/base/ssl_client_socket.h" 11 #include "net/base/ssl_client_socket.h"
12 #include "net/base/ssl_config_service.h" 12 #include "net/base/ssl_config_service.h"
13 #include "net/base/ssl_test_util.h"
13 #include "net/base/tcp_client_socket.h" 14 #include "net/base/tcp_client_socket.h"
14 #include "net/base/test_completion_callback.h" 15 #include "net/base/test_completion_callback.h"
15 #include "testing/gtest/include/gtest/gtest.h" 16 #include "testing/gtest/include/gtest/gtest.h"
16 #include "testing/platform_test.h" 17 #include "testing/platform_test.h"
17 18
18 //----------------------------------------------------------------------------- 19 //-----------------------------------------------------------------------------
19 20
20 const net::SSLConfig kDefaultSSLConfig; 21 const net::SSLConfig kDefaultSSLConfig;
21 22
22 class SSLClientSocketTest : public PlatformTest { 23 class SSLClientSocketTest : public PlatformTest {
23 public: 24 public:
24 SSLClientSocketTest() 25 SSLClientSocketTest()
25 : host_mapper_(new net::RuleBasedHostMapper()), 26 : socket_factory_(net::ClientSocketFactory::GetDefaultFactory()) {
26 scoped_host_mapper_(host_mapper_.get()), 27 }
27 socket_factory_(net::ClientSocketFactory::GetDefaultFactory()) { 28
28 // TODO(darin): kill this exception once we have a way to test out the 29 void StartOKServer() {
29 // TCPClientSocket class using loopback connections. 30 bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
30 host_mapper_->AddRule("bugs.webkit.org", "bugs.webkit.org"); 31 server_.kHostName, server_.kOKHTTPSPort,
32 FilePath(), server_.GetOKCertPath());
33 ASSERT_TRUE(success);
34 }
35
36 void StartMismatchedServer() {
37 bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
38 server_.kMismatchedHostName, server_.kOKHTTPSPort,
39 FilePath(), server_.GetOKCertPath());
40 ASSERT_TRUE(success);
41 }
42
43 void StartExpiredServer() {
44 bool success = server_.Start(net::TestServerLauncher::ProtoHTTP,
45 server_.kHostName, server_.kBadHTTPSPort,
46 FilePath(), server_.GetExpiredCertPath());
47 ASSERT_TRUE(success);
31 } 48 }
32 49
33 protected: 50 protected:
34 scoped_refptr<net::RuleBasedHostMapper> host_mapper_;
35 net::ScopedHostMapper scoped_host_mapper_;
36 net::ClientSocketFactory* socket_factory_; 51 net::ClientSocketFactory* socket_factory_;
52 net::TestServerLauncher server_;
37 }; 53 };
38 54
39 //----------------------------------------------------------------------------- 55 //-----------------------------------------------------------------------------
40 56
41 // bug 1354783 57 #if defined(OS_MACOSX)
42 TEST_F(SSLClientSocketTest, DISABLED_Connect) { 58 #define MAYBE_Connect DISABLED_Connect
59 #define MAYBE_ConnectExpired DISABLED_ConnectExpired
60 #define MAYBE_ConnectMismatched DISABLED_ConnectMismatched
61 #define MAYBE_Read DISABLED_Read
62 #define MAYBE_Read_SmallChunks DISABLED_Read_SmallChunks
63 #define MAYBE_Read_Interrupted DISABLED_Read_Interrupted
64 #else
65 #define MAYBE_Connect Connect
66 #define MAYBE_ConnectExpired ConnectExpired
67 #define MAYBE_ConnectMismatched ConnectMismatched
68 #define MAYBE_Read Read
69 #define MAYBE_Read_SmallChunks Read_SmallChunks
70 #define MAYBE_Read_Interrupted Read_Interrupted
71 #endif
72
73 TEST_F(SSLClientSocketTest, MAYBE_Connect) {
74 StartOKServer();
75
43 net::AddressList addr; 76 net::AddressList addr;
44 net::HostResolver resolver; 77 net::HostResolver resolver;
45 TestCompletionCallback callback; 78 TestCompletionCallback callback;
46 79
47 std::string hostname = "bugs.webkit.org"; 80 int rv = resolver.Resolve(server_.kHostName, server_.kOKHTTPSPort,
48 int rv = resolver.Resolve(hostname, 443, &addr, NULL); 81 &addr, NULL);
49 EXPECT_EQ(net::OK, rv); 82 EXPECT_EQ(net::OK, rv);
50 83
51 scoped_ptr<net::SSLClientSocket> sock( 84 scoped_ptr<net::SSLClientSocket> sock(
52 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr), 85 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
53 hostname, kDefaultSSLConfig)); 86 server_.kHostName, kDefaultSSLConfig));
54 87
55 EXPECT_FALSE(sock->IsConnected()); 88 EXPECT_FALSE(sock->IsConnected());
56 89
57 rv = sock->Connect(&callback); 90 rv = sock->Connect(&callback);
58 if (rv != net::OK) { 91 if (rv != net::OK) {
59 ASSERT_EQ(net::ERR_IO_PENDING, rv); 92 ASSERT_EQ(net::ERR_IO_PENDING, rv);
93 EXPECT_FALSE(sock->IsConnected());
60 94
61 rv = callback.WaitForResult(); 95 rv = callback.WaitForResult();
62 EXPECT_EQ(net::OK, rv); 96 EXPECT_EQ(net::OK, rv);
63 } 97 }
64 98
65 EXPECT_TRUE(sock->IsConnected()); 99 EXPECT_TRUE(sock->IsConnected());
66 100
67 sock->Disconnect(); 101 sock->Disconnect();
68 EXPECT_FALSE(sock->IsConnected()); 102 EXPECT_FALSE(sock->IsConnected());
69 } 103 }
70 104
71 // bug 1354783 105 TEST_F(SSLClientSocketTest, MAYBE_ConnectExpired) {
72 TEST_F(SSLClientSocketTest, DISABLED_Read) { 106 StartExpiredServer();
107
73 net::AddressList addr; 108 net::AddressList addr;
74 net::HostResolver resolver; 109 net::HostResolver resolver;
75 TestCompletionCallback callback; 110 TestCompletionCallback callback;
76 111
77 std::string hostname = "bugs.webkit.org"; 112 int rv = resolver.Resolve(server_.kHostName, server_.kBadHTTPSPort,
78 int rv = resolver.Resolve(hostname, 443, &addr, &callback); 113 &addr, NULL);
114 EXPECT_EQ(net::OK, rv);
115
116 scoped_ptr<net::SSLClientSocket> sock(
117 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
118 server_.kHostName, kDefaultSSLConfig));
119
120 EXPECT_FALSE(sock->IsConnected());
121
122 rv = sock->Connect(&callback);
123 if (rv != net::OK) {
124 ASSERT_EQ(net::ERR_IO_PENDING, rv);
125 EXPECT_FALSE(sock->IsConnected());
126
127 rv = callback.WaitForResult();
128 EXPECT_EQ(net::ERR_CERT_DATE_INVALID, rv);
129 }
130
131 EXPECT_TRUE(sock->IsConnected());
132 }
133
134 TEST_F(SSLClientSocketTest, MAYBE_ConnectMismatched) {
135 StartMismatchedServer();
136
137 net::AddressList addr;
138 net::HostResolver resolver;
139 TestCompletionCallback callback;
140
141 int rv = resolver.Resolve(server_.kMismatchedHostName, server_.kOKHTTPSPort,
142 &addr, NULL);
143 EXPECT_EQ(net::OK, rv);
144
145 scoped_ptr<net::SSLClientSocket> sock(
146 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
147 server_.kMismatchedHostName, kDefaultSSLConfig));
148
149 EXPECT_FALSE(sock->IsConnected());
150
151 rv = sock->Connect(&callback);
152 if (rv != net::ERR_CERT_COMMON_NAME_INVALID) {
153 ASSERT_EQ(net::ERR_IO_PENDING, rv);
154 EXPECT_FALSE(sock->IsConnected());
155
156 rv = callback.WaitForResult();
157 EXPECT_EQ(net::ERR_CERT_COMMON_NAME_INVALID, rv);
158 }
159
160 // The Windows code happens to keep the connection
161 // open now in spite of an error. The designers of
162 // this API intended to also allow the connection
163 // to be closed on error, in which case the caller
164 // should call ReconnectIgnoringLastError, but
165 // that's currently unimplemented.
166 EXPECT_TRUE(sock->IsConnected());
167 }
168
169 TEST_F(SSLClientSocketTest, MAYBE_Read) {
170 StartOKServer();
171
172 net::AddressList addr;
173 net::HostResolver resolver;
174 TestCompletionCallback callback;
175
176 int rv = resolver.Resolve(server_.kHostName, server_.kOKHTTPSPort,
177 &addr, &callback);
79 EXPECT_EQ(net::ERR_IO_PENDING, rv); 178 EXPECT_EQ(net::ERR_IO_PENDING, rv);
80 179
81 rv = callback.WaitForResult(); 180 rv = callback.WaitForResult();
82 EXPECT_EQ(net::OK, rv); 181 EXPECT_EQ(net::OK, rv);
83 182
84 scoped_ptr<net::SSLClientSocket> sock( 183 scoped_ptr<net::SSLClientSocket> sock(
85 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr), 184 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
86 hostname, kDefaultSSLConfig)); 185 server_.kHostName,
186 kDefaultSSLConfig));
87 187
88 rv = sock->Connect(&callback); 188 rv = sock->Connect(&callback);
89 if (rv != net::OK) { 189 if (rv != net::OK) {
90 ASSERT_EQ(net::ERR_IO_PENDING, rv); 190 ASSERT_EQ(net::ERR_IO_PENDING, rv);
91 191
92 rv = callback.WaitForResult(); 192 rv = callback.WaitForResult();
93 EXPECT_EQ(net::OK, rv); 193 EXPECT_EQ(net::OK, rv);
94 } 194 }
95 EXPECT_TRUE(sock->IsConnected()); 195 EXPECT_TRUE(sock->IsConnected());
96 196
(...skipping 13 matching lines...) Expand all
110 210
111 if (rv == net::ERR_IO_PENDING) 211 if (rv == net::ERR_IO_PENDING)
112 rv = callback.WaitForResult(); 212 rv = callback.WaitForResult();
113 213
114 EXPECT_GE(rv, 0); 214 EXPECT_GE(rv, 0);
115 if (rv <= 0) 215 if (rv <= 0)
116 break; 216 break;
117 } 217 }
118 } 218 }
119 219
120 // bug 1354783 220 TEST_F(SSLClientSocketTest, MAYBE_Read_SmallChunks) {
121 TEST_F(SSLClientSocketTest, DISABLED_Read_SmallChunks) { 221 StartOKServer();
222
122 net::AddressList addr; 223 net::AddressList addr;
123 net::HostResolver resolver; 224 net::HostResolver resolver;
124 TestCompletionCallback callback; 225 TestCompletionCallback callback;
125 226
126 std::string hostname = "bugs.webkit.org"; 227 int rv = resolver.Resolve(server_.kHostName, server_.kOKHTTPSPort,
127 int rv = resolver.Resolve(hostname, 443, &addr, NULL); 228 &addr, NULL);
128 EXPECT_EQ(net::OK, rv); 229 EXPECT_EQ(net::OK, rv);
129 230
130 scoped_ptr<net::SSLClientSocket> sock( 231 scoped_ptr<net::SSLClientSocket> sock(
131 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr), 232 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
132 hostname, kDefaultSSLConfig)); 233 server_.kHostName, kDefaultSSLConfig));
133 234
134 rv = sock->Connect(&callback); 235 rv = sock->Connect(&callback);
135 if (rv != net::OK) { 236 if (rv != net::OK) {
136 ASSERT_EQ(net::ERR_IO_PENDING, rv); 237 ASSERT_EQ(net::ERR_IO_PENDING, rv);
137 238
138 rv = callback.WaitForResult(); 239 rv = callback.WaitForResult();
139 EXPECT_EQ(net::OK, rv); 240 EXPECT_EQ(net::OK, rv);
140 } 241 }
141 242
142 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 243 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
(...skipping 12 matching lines...) Expand all
155 256
156 if (rv == net::ERR_IO_PENDING) 257 if (rv == net::ERR_IO_PENDING)
157 rv = callback.WaitForResult(); 258 rv = callback.WaitForResult();
158 259
159 EXPECT_GE(rv, 0); 260 EXPECT_GE(rv, 0);
160 if (rv <= 0) 261 if (rv <= 0)
161 break; 262 break;
162 } 263 }
163 } 264 }
164 265
165 // bug 1354783 266 TEST_F(SSLClientSocketTest, MAYBE_Read_Interrupted) {
166 TEST_F(SSLClientSocketTest, DISABLED_Read_Interrupted) { 267 StartOKServer();
268
167 net::AddressList addr; 269 net::AddressList addr;
168 net::HostResolver resolver; 270 net::HostResolver resolver;
169 TestCompletionCallback callback; 271 TestCompletionCallback callback;
170 272
171 std::string hostname = "bugs.webkit.org"; 273 int rv = resolver.Resolve(server_.kHostName, server_.kOKHTTPSPort,
172 int rv = resolver.Resolve(hostname, 443, &addr, NULL); 274 &addr, NULL);
173 EXPECT_EQ(net::OK, rv); 275 EXPECT_EQ(net::OK, rv);
174 276
175 scoped_ptr<net::SSLClientSocket> sock( 277 scoped_ptr<net::SSLClientSocket> sock(
176 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr), 278 socket_factory_->CreateSSLClientSocket(new net::TCPClientSocket(addr),
177 hostname, kDefaultSSLConfig)); 279 server_.kHostName, kDefaultSSLConfig));
178 280
179 rv = sock->Connect(&callback); 281 rv = sock->Connect(&callback);
180 if (rv != net::OK) { 282 if (rv != net::OK) {
181 ASSERT_EQ(net::ERR_IO_PENDING, rv); 283 ASSERT_EQ(net::ERR_IO_PENDING, rv);
182 284
183 rv = callback.WaitForResult(); 285 rv = callback.WaitForResult();
184 EXPECT_EQ(net::OK, rv); 286 EXPECT_EQ(net::OK, rv);
185 } 287 }
186 288
187 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 289 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
188 rv = sock->Write(request_text, arraysize(request_text) - 1, &callback); 290 rv = sock->Write(request_text, arraysize(request_text) - 1, &callback);
189 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 291 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
190 292
191 if (rv == net::ERR_IO_PENDING) { 293 if (rv == net::ERR_IO_PENDING) {
192 rv = callback.WaitForResult(); 294 rv = callback.WaitForResult();
193 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); 295 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv);
194 } 296 }
195 297
196 // Do a partial read and then exit. This test should not crash! 298 // Do a partial read and then exit. This test should not crash!
197 char buf[512]; 299 char buf[512];
198 rv = sock->Read(buf, sizeof(buf), &callback); 300 rv = sock->Read(buf, sizeof(buf), &callback);
199 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 301 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
200 302
201 if (rv == net::ERR_IO_PENDING) 303 if (rv == net::ERR_IO_PENDING)
202 rv = callback.WaitForResult(); 304 rv = callback.WaitForResult();
203 305
204 EXPECT_NE(rv, 0); 306 EXPECT_NE(rv, 0);
205 } 307 }
206 308
OLDNEW
« no previous file with comments | « net/base/ssl_client_socket_nss.cc ('k') | net/base/ssl_test_util.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698