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

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

Issue 344026: Add LoadLog to ClientSocket::Connect(). (Closed)
Patch Set: Minor build fixups and fixed mac bug. Created 11 years, 1 month 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/socket/ssl_client_socket_nss.cc ('k') | net/socket/ssl_client_socket_win.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 "net/socket/ssl_client_socket.h" 5 #include "net/socket/ssl_client_socket.h"
6 6
7 #include "net/base/address_list.h" 7 #include "net/base/address_list.h"
8 #include "net/base/host_resolver.h" 8 #include "net/base/host_resolver.h"
9 #include "net/base/io_buffer.h" 9 #include "net/base/io_buffer.h"
10 #include "net/base/load_log.h"
11 #include "net/base/load_log_unittest.h"
10 #include "net/base/net_errors.h" 12 #include "net/base/net_errors.h"
11 #include "net/base/ssl_config_service.h" 13 #include "net/base/ssl_config_service.h"
12 #include "net/base/test_completion_callback.h" 14 #include "net/base/test_completion_callback.h"
13 #include "net/socket/client_socket_factory.h" 15 #include "net/socket/client_socket_factory.h"
14 #include "net/socket/ssl_test_util.h" 16 #include "net/socket/ssl_test_util.h"
15 #include "net/socket/tcp_client_socket.h" 17 #include "net/socket/tcp_client_socket.h"
16 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
17 #include "testing/platform_test.h" 19 #include "testing/platform_test.h"
18 20
19 //----------------------------------------------------------------------------- 21 //-----------------------------------------------------------------------------
(...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after
60 StartOKServer(); 62 StartOKServer();
61 63
62 net::AddressList addr; 64 net::AddressList addr;
63 TestCompletionCallback callback; 65 TestCompletionCallback callback;
64 66
65 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort); 67 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort);
66 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL); 68 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL);
67 EXPECT_EQ(net::OK, rv); 69 EXPECT_EQ(net::OK, rv);
68 70
69 net::ClientSocket *transport = new net::TCPClientSocket(addr); 71 net::ClientSocket *transport = new net::TCPClientSocket(addr);
70 rv = transport->Connect(&callback); 72 rv = transport->Connect(&callback, NULL);
71 if (rv == net::ERR_IO_PENDING) 73 if (rv == net::ERR_IO_PENDING)
72 rv = callback.WaitForResult(); 74 rv = callback.WaitForResult();
73 EXPECT_EQ(net::OK, rv); 75 EXPECT_EQ(net::OK, rv);
74 76
75 scoped_ptr<net::SSLClientSocket> sock( 77 scoped_ptr<net::SSLClientSocket> sock(
76 socket_factory_->CreateSSLClientSocket(transport, 78 socket_factory_->CreateSSLClientSocket(transport,
77 server_.kHostName, kDefaultSSLConfig)); 79 server_.kHostName, kDefaultSSLConfig));
78 80
79 EXPECT_FALSE(sock->IsConnected()); 81 EXPECT_FALSE(sock->IsConnected());
80 82
81 rv = sock->Connect(&callback); 83 scoped_refptr<net::LoadLog> log(new net::LoadLog);
84 rv = sock->Connect(&callback, log);
85 EXPECT_TRUE(net::LogContains(
86 *log, 0, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_BEGIN));
82 if (rv != net::OK) { 87 if (rv != net::OK) {
83 ASSERT_EQ(net::ERR_IO_PENDING, rv); 88 ASSERT_EQ(net::ERR_IO_PENDING, rv);
84 EXPECT_FALSE(sock->IsConnected()); 89 EXPECT_FALSE(sock->IsConnected());
90 EXPECT_FALSE(net::LogContains(
91 *log, -1, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_END));
85 92
86 rv = callback.WaitForResult(); 93 rv = callback.WaitForResult();
87 EXPECT_EQ(net::OK, rv); 94 EXPECT_EQ(net::OK, rv);
88 } 95 }
89 96
90 EXPECT_TRUE(sock->IsConnected()); 97 EXPECT_TRUE(sock->IsConnected());
98 EXPECT_TRUE(net::LogContains(
99 *log, -1, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_END));
91 100
92 sock->Disconnect(); 101 sock->Disconnect();
93 EXPECT_FALSE(sock->IsConnected()); 102 EXPECT_FALSE(sock->IsConnected());
94 } 103 }
95 104
96 TEST_F(SSLClientSocketTest, ConnectExpired) { 105 TEST_F(SSLClientSocketTest, ConnectExpired) {
97 StartExpiredServer(); 106 StartExpiredServer();
98 107
99 net::AddressList addr; 108 net::AddressList addr;
100 TestCompletionCallback callback; 109 TestCompletionCallback callback;
101 110
102 net::HostResolver::RequestInfo info(server_.kHostName, server_.kBadHTTPSPort); 111 net::HostResolver::RequestInfo info(server_.kHostName, server_.kBadHTTPSPort);
103 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL); 112 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL);
104 EXPECT_EQ(net::OK, rv); 113 EXPECT_EQ(net::OK, rv);
105 114
106 net::ClientSocket *transport = new net::TCPClientSocket(addr); 115 net::ClientSocket *transport = new net::TCPClientSocket(addr);
107 rv = transport->Connect(&callback); 116 rv = transport->Connect(&callback, NULL);
108 if (rv == net::ERR_IO_PENDING) 117 if (rv == net::ERR_IO_PENDING)
109 rv = callback.WaitForResult(); 118 rv = callback.WaitForResult();
110 EXPECT_EQ(net::OK, rv); 119 EXPECT_EQ(net::OK, rv);
111 120
112 scoped_ptr<net::SSLClientSocket> sock( 121 scoped_ptr<net::SSLClientSocket> sock(
113 socket_factory_->CreateSSLClientSocket(transport, 122 socket_factory_->CreateSSLClientSocket(transport,
114 server_.kHostName, kDefaultSSLConfig)); 123 server_.kHostName, kDefaultSSLConfig));
115 124
116 EXPECT_FALSE(sock->IsConnected()); 125 EXPECT_FALSE(sock->IsConnected());
117 126
118 rv = sock->Connect(&callback); 127 scoped_refptr<net::LoadLog> log(new net::LoadLog);
128 rv = sock->Connect(&callback, log);
129 EXPECT_TRUE(net::LogContains(
130 *log, 0, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_BEGIN));
119 if (rv != net::OK) { 131 if (rv != net::OK) {
120 ASSERT_EQ(net::ERR_IO_PENDING, rv); 132 ASSERT_EQ(net::ERR_IO_PENDING, rv);
121 EXPECT_FALSE(sock->IsConnected()); 133 EXPECT_FALSE(sock->IsConnected());
134 EXPECT_FALSE(net::LogContains(
135 *log, -1, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_END));
122 136
123 rv = callback.WaitForResult(); 137 rv = callback.WaitForResult();
124 EXPECT_EQ(net::ERR_CERT_DATE_INVALID, rv); 138 EXPECT_EQ(net::ERR_CERT_DATE_INVALID, rv);
125 } 139 }
126 140
127 // We cannot test sock->IsConnected(), as the NSS implementation disconnects 141 // We cannot test sock->IsConnected(), as the NSS implementation disconnects
128 // the socket when it encounters an error, whereas other implementations 142 // the socket when it encounters an error, whereas other implementations
129 // leave it connected. 143 // leave it connected.
144
145 EXPECT_TRUE(net::LogContains(
146 *log, -1, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_END));
130 } 147 }
131 148
132 TEST_F(SSLClientSocketTest, ConnectMismatched) { 149 TEST_F(SSLClientSocketTest, ConnectMismatched) {
133 StartMismatchedServer(); 150 StartMismatchedServer();
134 151
135 net::AddressList addr; 152 net::AddressList addr;
136 TestCompletionCallback callback; 153 TestCompletionCallback callback;
137 154
138 net::HostResolver::RequestInfo info(server_.kMismatchedHostName, 155 net::HostResolver::RequestInfo info(server_.kMismatchedHostName,
139 server_.kOKHTTPSPort); 156 server_.kOKHTTPSPort);
140 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL); 157 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL);
141 EXPECT_EQ(net::OK, rv); 158 EXPECT_EQ(net::OK, rv);
142 159
143 net::ClientSocket *transport = new net::TCPClientSocket(addr); 160 net::ClientSocket *transport = new net::TCPClientSocket(addr);
144 rv = transport->Connect(&callback); 161 rv = transport->Connect(&callback, NULL);
145 if (rv == net::ERR_IO_PENDING) 162 if (rv == net::ERR_IO_PENDING)
146 rv = callback.WaitForResult(); 163 rv = callback.WaitForResult();
147 EXPECT_EQ(net::OK, rv); 164 EXPECT_EQ(net::OK, rv);
148 165
149 scoped_ptr<net::SSLClientSocket> sock( 166 scoped_ptr<net::SSLClientSocket> sock(
150 socket_factory_->CreateSSLClientSocket(transport, 167 socket_factory_->CreateSSLClientSocket(transport,
151 server_.kMismatchedHostName, kDefaultSSLConfig)); 168 server_.kMismatchedHostName, kDefaultSSLConfig));
152 169
153 EXPECT_FALSE(sock->IsConnected()); 170 EXPECT_FALSE(sock->IsConnected());
154 171
155 rv = sock->Connect(&callback); 172 scoped_refptr<net::LoadLog> log(new net::LoadLog);
173 rv = sock->Connect(&callback, log);
174 EXPECT_TRUE(net::LogContains(
175 *log, 0, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_BEGIN));
156 if (rv != net::ERR_CERT_COMMON_NAME_INVALID) { 176 if (rv != net::ERR_CERT_COMMON_NAME_INVALID) {
157 ASSERT_EQ(net::ERR_IO_PENDING, rv); 177 ASSERT_EQ(net::ERR_IO_PENDING, rv);
158 EXPECT_FALSE(sock->IsConnected()); 178 EXPECT_FALSE(sock->IsConnected());
179 EXPECT_FALSE(net::LogContains(
180 *log, -1, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_END));
159 181
160 rv = callback.WaitForResult(); 182 rv = callback.WaitForResult();
161 EXPECT_EQ(net::ERR_CERT_COMMON_NAME_INVALID, rv); 183 EXPECT_EQ(net::ERR_CERT_COMMON_NAME_INVALID, rv);
162 } 184 }
163 185
164 // We cannot test sock->IsConnected(), as the NSS implementation disconnects 186 // We cannot test sock->IsConnected(), as the NSS implementation disconnects
165 // the socket when it encounters an error, whereas other implementations 187 // the socket when it encounters an error, whereas other implementations
166 // leave it connected. 188 // leave it connected.
189
190 EXPECT_TRUE(net::LogContains(
191 *log, -1, net::LoadLog::TYPE_SSL_CONNECT, net::LoadLog::PHASE_END));
167 } 192 }
168 193
169 // TODO(wtc): Add unit tests for IsConnectedAndIdle: 194 // TODO(wtc): Add unit tests for IsConnectedAndIdle:
170 // - Server closes an SSL connection (with a close_notify alert message). 195 // - Server closes an SSL connection (with a close_notify alert message).
171 // - Server closes the underlying TCP connection directly. 196 // - Server closes the underlying TCP connection directly.
172 // - Server sends data unexpectedly. 197 // - Server sends data unexpectedly.
173 198
174 TEST_F(SSLClientSocketTest, Read) { 199 TEST_F(SSLClientSocketTest, Read) {
175 StartOKServer(); 200 StartOKServer();
176 201
177 net::AddressList addr; 202 net::AddressList addr;
178 TestCompletionCallback callback; 203 TestCompletionCallback callback;
179 204
180 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort); 205 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort);
181 int rv = resolver_->Resolve(info, &addr, &callback, NULL, NULL); 206 int rv = resolver_->Resolve(info, &addr, &callback, NULL, NULL);
182 EXPECT_EQ(net::ERR_IO_PENDING, rv); 207 EXPECT_EQ(net::ERR_IO_PENDING, rv);
183 208
184 rv = callback.WaitForResult(); 209 rv = callback.WaitForResult();
185 EXPECT_EQ(net::OK, rv); 210 EXPECT_EQ(net::OK, rv);
186 211
187 net::ClientSocket *transport = new net::TCPClientSocket(addr); 212 net::ClientSocket *transport = new net::TCPClientSocket(addr);
188 rv = transport->Connect(&callback); 213 rv = transport->Connect(&callback, NULL);
189 if (rv == net::ERR_IO_PENDING) 214 if (rv == net::ERR_IO_PENDING)
190 rv = callback.WaitForResult(); 215 rv = callback.WaitForResult();
191 EXPECT_EQ(net::OK, rv); 216 EXPECT_EQ(net::OK, rv);
192 217
193 scoped_ptr<net::SSLClientSocket> sock( 218 scoped_ptr<net::SSLClientSocket> sock(
194 socket_factory_->CreateSSLClientSocket(transport, 219 socket_factory_->CreateSSLClientSocket(transport,
195 server_.kHostName, 220 server_.kHostName,
196 kDefaultSSLConfig)); 221 kDefaultSSLConfig));
197 222
198 rv = sock->Connect(&callback); 223 rv = sock->Connect(&callback, NULL);
199 if (rv != net::OK) { 224 if (rv != net::OK) {
200 ASSERT_EQ(net::ERR_IO_PENDING, rv); 225 ASSERT_EQ(net::ERR_IO_PENDING, rv);
201 226
202 rv = callback.WaitForResult(); 227 rv = callback.WaitForResult();
203 EXPECT_EQ(net::OK, rv); 228 EXPECT_EQ(net::OK, rv);
204 } 229 }
205 EXPECT_TRUE(sock->IsConnected()); 230 EXPECT_TRUE(sock->IsConnected());
206 231
207 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 232 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
208 scoped_refptr<net::IOBuffer> request_buffer = 233 scoped_refptr<net::IOBuffer> request_buffer =
(...skipping 26 matching lines...) Expand all
235 StartOKServer(); 260 StartOKServer();
236 261
237 net::AddressList addr; 262 net::AddressList addr;
238 TestCompletionCallback callback; 263 TestCompletionCallback callback;
239 264
240 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort); 265 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort);
241 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL); 266 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL);
242 EXPECT_EQ(net::OK, rv); 267 EXPECT_EQ(net::OK, rv);
243 268
244 net::ClientSocket *transport = new net::TCPClientSocket(addr); 269 net::ClientSocket *transport = new net::TCPClientSocket(addr);
245 rv = transport->Connect(&callback); 270 rv = transport->Connect(&callback, NULL);
246 if (rv == net::ERR_IO_PENDING) 271 if (rv == net::ERR_IO_PENDING)
247 rv = callback.WaitForResult(); 272 rv = callback.WaitForResult();
248 EXPECT_EQ(net::OK, rv); 273 EXPECT_EQ(net::OK, rv);
249 274
250 scoped_ptr<net::SSLClientSocket> sock( 275 scoped_ptr<net::SSLClientSocket> sock(
251 socket_factory_->CreateSSLClientSocket(transport, 276 socket_factory_->CreateSSLClientSocket(transport,
252 server_.kHostName, kDefaultSSLConfig)); 277 server_.kHostName, kDefaultSSLConfig));
253 278
254 rv = sock->Connect(&callback); 279 rv = sock->Connect(&callback, NULL);
255 if (rv != net::OK) { 280 if (rv != net::OK) {
256 ASSERT_EQ(net::ERR_IO_PENDING, rv); 281 ASSERT_EQ(net::ERR_IO_PENDING, rv);
257 282
258 rv = callback.WaitForResult(); 283 rv = callback.WaitForResult();
259 EXPECT_EQ(net::OK, rv); 284 EXPECT_EQ(net::OK, rv);
260 } 285 }
261 286
262 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 287 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
263 scoped_refptr<net::IOBuffer> request_buffer = 288 scoped_refptr<net::IOBuffer> request_buffer =
264 new net::IOBuffer(arraysize(request_text) - 1); 289 new net::IOBuffer(arraysize(request_text) - 1);
(...skipping 25 matching lines...) Expand all
290 StartOKServer(); 315 StartOKServer();
291 316
292 net::AddressList addr; 317 net::AddressList addr;
293 TestCompletionCallback callback; 318 TestCompletionCallback callback;
294 319
295 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort); 320 net::HostResolver::RequestInfo info(server_.kHostName, server_.kOKHTTPSPort);
296 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL); 321 int rv = resolver_->Resolve(info, &addr, NULL, NULL, NULL);
297 EXPECT_EQ(net::OK, rv); 322 EXPECT_EQ(net::OK, rv);
298 323
299 net::ClientSocket *transport = new net::TCPClientSocket(addr); 324 net::ClientSocket *transport = new net::TCPClientSocket(addr);
300 rv = transport->Connect(&callback); 325 rv = transport->Connect(&callback, NULL);
301 if (rv == net::ERR_IO_PENDING) 326 if (rv == net::ERR_IO_PENDING)
302 rv = callback.WaitForResult(); 327 rv = callback.WaitForResult();
303 EXPECT_EQ(net::OK, rv); 328 EXPECT_EQ(net::OK, rv);
304 329
305 scoped_ptr<net::SSLClientSocket> sock( 330 scoped_ptr<net::SSLClientSocket> sock(
306 socket_factory_->CreateSSLClientSocket(transport, 331 socket_factory_->CreateSSLClientSocket(transport,
307 server_.kHostName, kDefaultSSLConfig)); 332 server_.kHostName, kDefaultSSLConfig));
308 333
309 rv = sock->Connect(&callback); 334 rv = sock->Connect(&callback, NULL);
310 if (rv != net::OK) { 335 if (rv != net::OK) {
311 ASSERT_EQ(net::ERR_IO_PENDING, rv); 336 ASSERT_EQ(net::ERR_IO_PENDING, rv);
312 337
313 rv = callback.WaitForResult(); 338 rv = callback.WaitForResult();
314 EXPECT_EQ(net::OK, rv); 339 EXPECT_EQ(net::OK, rv);
315 } 340 }
316 341
317 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 342 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
318 scoped_refptr<net::IOBuffer> request_buffer = 343 scoped_refptr<net::IOBuffer> request_buffer =
319 new net::IOBuffer(arraysize(request_text) - 1); 344 new net::IOBuffer(arraysize(request_text) - 1);
(...skipping 10 matching lines...) Expand all
330 // Do a partial read and then exit. This test should not crash! 355 // Do a partial read and then exit. This test should not crash!
331 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(512); 356 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(512);
332 rv = sock->Read(buf, 512, &callback); 357 rv = sock->Read(buf, 512, &callback);
333 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 358 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
334 359
335 if (rv == net::ERR_IO_PENDING) 360 if (rv == net::ERR_IO_PENDING)
336 rv = callback.WaitForResult(); 361 rv = callback.WaitForResult();
337 362
338 EXPECT_NE(rv, 0); 363 EXPECT_NE(rv, 0);
339 } 364 }
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_nss.cc ('k') | net/socket/ssl_client_socket_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698