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

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

Issue 395303003: Fix a few stray net::'s in net/socket/ (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 6 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 | Annotate | Revision Log
OLDNEW
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 // This test suite uses SSLClientSocket to test the implementation of 5 // This test suite uses SSLClientSocket to test the implementation of
6 // SSLServerSocket. In order to establish connections between the sockets 6 // SSLServerSocket. In order to establish connections between the sockets
7 // we need two additional classes: 7 // we need two additional classes:
8 // 1. FakeSocket 8 // 1. FakeSocket
9 // Connects SSL socket to FakeDataChannel. This class is just a stub. 9 // Connects SSL socket to FakeDataChannel. This class is just a stub.
10 // 10 //
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
63 63
64 int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { 64 int Read(IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
65 DCHECK(read_callback_.is_null()); 65 DCHECK(read_callback_.is_null());
66 DCHECK(!read_buf_); 66 DCHECK(!read_buf_);
67 if (closed_) 67 if (closed_)
68 return 0; 68 return 0;
69 if (data_.empty()) { 69 if (data_.empty()) {
70 read_callback_ = callback; 70 read_callback_ = callback;
71 read_buf_ = buf; 71 read_buf_ = buf;
72 read_buf_len_ = buf_len; 72 read_buf_len_ = buf_len;
73 return net::ERR_IO_PENDING; 73 return ERR_IO_PENDING;
74 } 74 }
75 return PropogateData(buf, buf_len); 75 return PropogateData(buf, buf_len);
76 } 76 }
77 77
78 int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback) { 78 int Write(IOBuffer* buf, int buf_len, const CompletionCallback& callback) {
79 DCHECK(write_callback_.is_null()); 79 DCHECK(write_callback_.is_null());
80 if (closed_) { 80 if (closed_) {
81 if (write_called_after_close_) 81 if (write_called_after_close_)
82 return net::ERR_CONNECTION_RESET; 82 return ERR_CONNECTION_RESET;
83 write_called_after_close_ = true; 83 write_called_after_close_ = true;
84 write_callback_ = callback; 84 write_callback_ = callback;
85 base::MessageLoop::current()->PostTask( 85 base::MessageLoop::current()->PostTask(
86 FROM_HERE, base::Bind(&FakeDataChannel::DoWriteCallback, 86 FROM_HERE, base::Bind(&FakeDataChannel::DoWriteCallback,
87 weak_factory_.GetWeakPtr())); 87 weak_factory_.GetWeakPtr()));
88 return net::ERR_IO_PENDING; 88 return ERR_IO_PENDING;
89 } 89 }
90 // This function returns synchronously, so make a copy of the buffer. 90 // This function returns synchronously, so make a copy of the buffer.
91 data_.push(new net::DrainableIOBuffer( 91 data_.push(new DrainableIOBuffer(
92 new net::StringIOBuffer(std::string(buf->data(), buf_len)), 92 new StringIOBuffer(std::string(buf->data(), buf_len)),
93 buf_len)); 93 buf_len));
94 base::MessageLoop::current()->PostTask( 94 base::MessageLoop::current()->PostTask(
95 FROM_HERE, base::Bind(&FakeDataChannel::DoReadCallback, 95 FROM_HERE, base::Bind(&FakeDataChannel::DoReadCallback,
96 weak_factory_.GetWeakPtr())); 96 weak_factory_.GetWeakPtr()));
97 return buf_len; 97 return buf_len;
98 } 98 }
99 99
100 // Closes the FakeDataChannel. After Close() is called, Read() returns 0, 100 // Closes the FakeDataChannel. After Close() is called, Read() returns 0,
101 // indicating EOF, and Write() fails with ERR_CONNECTION_RESET. Note that 101 // indicating EOF, and Write() fails with ERR_CONNECTION_RESET. Note that
102 // after the FakeDataChannel is closed, the first Write() call completes 102 // after the FakeDataChannel is closed, the first Write() call completes
(...skipping 14 matching lines...) Expand all
117 read_buf_len_ = 0; 117 read_buf_len_ = 0;
118 callback.Run(copied); 118 callback.Run(copied);
119 } 119 }
120 120
121 void DoWriteCallback() { 121 void DoWriteCallback() {
122 if (write_callback_.is_null()) 122 if (write_callback_.is_null())
123 return; 123 return;
124 124
125 CompletionCallback callback = write_callback_; 125 CompletionCallback callback = write_callback_;
126 write_callback_.Reset(); 126 write_callback_.Reset();
127 callback.Run(net::ERR_CONNECTION_RESET); 127 callback.Run(ERR_CONNECTION_RESET);
128 } 128 }
129 129
130 int PropogateData(scoped_refptr<net::IOBuffer> read_buf, int read_buf_len) { 130 int PropogateData(scoped_refptr<IOBuffer> read_buf, int read_buf_len) {
131 scoped_refptr<net::DrainableIOBuffer> buf = data_.front(); 131 scoped_refptr<DrainableIOBuffer> buf = data_.front();
132 int copied = std::min(buf->BytesRemaining(), read_buf_len); 132 int copied = std::min(buf->BytesRemaining(), read_buf_len);
133 memcpy(read_buf->data(), buf->data(), copied); 133 memcpy(read_buf->data(), buf->data(), copied);
134 buf->DidConsume(copied); 134 buf->DidConsume(copied);
135 135
136 if (!buf->BytesRemaining()) 136 if (!buf->BytesRemaining())
137 data_.pop(); 137 data_.pop();
138 return copied; 138 return copied;
139 } 139 }
140 140
141 CompletionCallback read_callback_; 141 CompletionCallback read_callback_;
142 scoped_refptr<net::IOBuffer> read_buf_; 142 scoped_refptr<IOBuffer> read_buf_;
143 int read_buf_len_; 143 int read_buf_len_;
144 144
145 CompletionCallback write_callback_; 145 CompletionCallback write_callback_;
146 146
147 std::queue<scoped_refptr<net::DrainableIOBuffer> > data_; 147 std::queue<scoped_refptr<DrainableIOBuffer> > data_;
148 148
149 // True if Close() has been called. 149 // True if Close() has been called.
150 bool closed_; 150 bool closed_;
151 151
152 // Controls the completion of Write() after the FakeDataChannel is closed. 152 // Controls the completion of Write() after the FakeDataChannel is closed.
153 // After the FakeDataChannel is closed, the first Write() call completes 153 // After the FakeDataChannel is closed, the first Write() call completes
154 // asynchronously. 154 // asynchronously.
155 bool write_called_after_close_; 155 bool write_called_after_close_;
156 156
157 base::WeakPtrFactory<FakeDataChannel> weak_factory_; 157 base::WeakPtrFactory<FakeDataChannel> weak_factory_;
(...skipping 20 matching lines...) Expand all
178 } 178 }
179 179
180 virtual int Write(IOBuffer* buf, int buf_len, 180 virtual int Write(IOBuffer* buf, int buf_len,
181 const CompletionCallback& callback) OVERRIDE { 181 const CompletionCallback& callback) OVERRIDE {
182 // Write random number of bytes. 182 // Write random number of bytes.
183 buf_len = rand() % buf_len + 1; 183 buf_len = rand() % buf_len + 1;
184 return outgoing_->Write(buf, buf_len, callback); 184 return outgoing_->Write(buf, buf_len, callback);
185 } 185 }
186 186
187 virtual int SetReceiveBufferSize(int32 size) OVERRIDE { 187 virtual int SetReceiveBufferSize(int32 size) OVERRIDE {
188 return net::OK; 188 return OK;
189 } 189 }
190 190
191 virtual int SetSendBufferSize(int32 size) OVERRIDE { 191 virtual int SetSendBufferSize(int32 size) OVERRIDE {
192 return net::OK; 192 return OK;
193 } 193 }
194 194
195 virtual int Connect(const CompletionCallback& callback) OVERRIDE { 195 virtual int Connect(const CompletionCallback& callback) OVERRIDE {
196 return net::OK; 196 return OK;
197 } 197 }
198 198
199 virtual void Disconnect() OVERRIDE { 199 virtual void Disconnect() OVERRIDE {
200 incoming_->Close(); 200 incoming_->Close();
201 outgoing_->Close(); 201 outgoing_->Close();
202 } 202 }
203 203
204 virtual bool IsConnected() const OVERRIDE { 204 virtual bool IsConnected() const OVERRIDE {
205 return true; 205 return true;
206 } 206 }
207 207
208 virtual bool IsConnectedAndIdle() const OVERRIDE { 208 virtual bool IsConnectedAndIdle() const OVERRIDE {
209 return true; 209 return true;
210 } 210 }
211 211
212 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE { 212 virtual int GetPeerAddress(IPEndPoint* address) const OVERRIDE {
213 net::IPAddressNumber ip_address(net::kIPv4AddressSize); 213 IPAddressNumber ip_address(kIPv4AddressSize);
214 *address = net::IPEndPoint(ip_address, 0 /*port*/); 214 *address = IPEndPoint(ip_address, 0 /*port*/);
215 return net::OK; 215 return OK;
216 } 216 }
217 217
218 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE { 218 virtual int GetLocalAddress(IPEndPoint* address) const OVERRIDE {
219 net::IPAddressNumber ip_address(4); 219 IPAddressNumber ip_address(4);
220 *address = net::IPEndPoint(ip_address, 0); 220 *address = IPEndPoint(ip_address, 0);
221 return net::OK; 221 return OK;
222 } 222 }
223 223
224 virtual const BoundNetLog& NetLog() const OVERRIDE { 224 virtual const BoundNetLog& NetLog() const OVERRIDE {
225 return net_log_; 225 return net_log_;
226 } 226 }
227 227
228 virtual void SetSubresourceSpeculation() OVERRIDE {} 228 virtual void SetSubresourceSpeculation() OVERRIDE {}
229 virtual void SetOmniboxSpeculation() OVERRIDE {} 229 virtual void SetOmniboxSpeculation() OVERRIDE {}
230 230
231 virtual bool WasEverUsed() const OVERRIDE { 231 virtual bool WasEverUsed() const OVERRIDE {
(...skipping 11 matching lines...) Expand all
243 243
244 virtual NextProto GetNegotiatedProtocol() const OVERRIDE { 244 virtual NextProto GetNegotiatedProtocol() const OVERRIDE {
245 return kProtoUnknown; 245 return kProtoUnknown;
246 } 246 }
247 247
248 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE { 248 virtual bool GetSSLInfo(SSLInfo* ssl_info) OVERRIDE {
249 return false; 249 return false;
250 } 250 }
251 251
252 private: 252 private:
253 net::BoundNetLog net_log_; 253 BoundNetLog net_log_;
254 FakeDataChannel* incoming_; 254 FakeDataChannel* incoming_;
255 FakeDataChannel* outgoing_; 255 FakeDataChannel* outgoing_;
256 256
257 DISALLOW_COPY_AND_ASSIGN(FakeSocket); 257 DISALLOW_COPY_AND_ASSIGN(FakeSocket);
258 }; 258 };
259 259
260 } // namespace 260 } // namespace
261 261
262 // Verify the correctness of the test helper classes first. 262 // Verify the correctness of the test helper classes first.
263 TEST(FakeSocketTest, DataTransfer) { 263 TEST(FakeSocketTest, DataTransfer) {
264 // Establish channels between two sockets. 264 // Establish channels between two sockets.
265 FakeDataChannel channel_1; 265 FakeDataChannel channel_1;
266 FakeDataChannel channel_2; 266 FakeDataChannel channel_2;
267 FakeSocket client(&channel_1, &channel_2); 267 FakeSocket client(&channel_1, &channel_2);
268 FakeSocket server(&channel_2, &channel_1); 268 FakeSocket server(&channel_2, &channel_1);
269 269
270 const char kTestData[] = "testing123"; 270 const char kTestData[] = "testing123";
271 const int kTestDataSize = strlen(kTestData); 271 const int kTestDataSize = strlen(kTestData);
272 const int kReadBufSize = 1024; 272 const int kReadBufSize = 1024;
273 scoped_refptr<net::IOBuffer> write_buf = new net::StringIOBuffer(kTestData); 273 scoped_refptr<IOBuffer> write_buf = new StringIOBuffer(kTestData);
274 scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); 274 scoped_refptr<IOBuffer> read_buf = new IOBuffer(kReadBufSize);
275 275
276 // Write then read. 276 // Write then read.
277 int written = 277 int written =
278 server.Write(write_buf.get(), kTestDataSize, CompletionCallback()); 278 server.Write(write_buf.get(), kTestDataSize, CompletionCallback());
279 EXPECT_GT(written, 0); 279 EXPECT_GT(written, 0);
280 EXPECT_LE(written, kTestDataSize); 280 EXPECT_LE(written, kTestDataSize);
281 281
282 int read = client.Read(read_buf.get(), kReadBufSize, CompletionCallback()); 282 int read = client.Read(read_buf.get(), kReadBufSize, CompletionCallback());
283 EXPECT_GT(read, 0); 283 EXPECT_GT(read, 0);
284 EXPECT_LE(read, written); 284 EXPECT_LE(read, written);
285 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); 285 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read));
286 286
287 // Read then write. 287 // Read then write.
288 TestCompletionCallback callback; 288 TestCompletionCallback callback;
289 EXPECT_EQ(net::ERR_IO_PENDING, 289 EXPECT_EQ(ERR_IO_PENDING,
290 server.Read(read_buf.get(), kReadBufSize, callback.callback())); 290 server.Read(read_buf.get(), kReadBufSize, callback.callback()));
291 291
292 written = client.Write(write_buf.get(), kTestDataSize, CompletionCallback()); 292 written = client.Write(write_buf.get(), kTestDataSize, CompletionCallback());
293 EXPECT_GT(written, 0); 293 EXPECT_GT(written, 0);
294 EXPECT_LE(written, kTestDataSize); 294 EXPECT_LE(written, kTestDataSize);
295 295
296 read = callback.WaitForResult(); 296 read = callback.WaitForResult();
297 EXPECT_GT(read, 0); 297 EXPECT_GT(read, 0);
298 EXPECT_LE(read, written); 298 EXPECT_LE(read, written);
299 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); 299 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read));
300 } 300 }
301 301
302 class SSLServerSocketTest : public PlatformTest { 302 class SSLServerSocketTest : public PlatformTest {
303 public: 303 public:
304 SSLServerSocketTest() 304 SSLServerSocketTest()
305 : socket_factory_(net::ClientSocketFactory::GetDefaultFactory()), 305 : socket_factory_(ClientSocketFactory::GetDefaultFactory()),
306 cert_verifier_(new MockCertVerifier()), 306 cert_verifier_(new MockCertVerifier()),
307 transport_security_state_(new TransportSecurityState) { 307 transport_security_state_(new TransportSecurityState) {
308 cert_verifier_->set_default_result(net::CERT_STATUS_AUTHORITY_INVALID); 308 cert_verifier_->set_default_result(CERT_STATUS_AUTHORITY_INVALID);
309 } 309 }
310 310
311 protected: 311 protected:
312 void Initialize() { 312 void Initialize() {
313 scoped_ptr<ClientSocketHandle> client_connection(new ClientSocketHandle); 313 scoped_ptr<ClientSocketHandle> client_connection(new ClientSocketHandle);
314 client_connection->SetSocket( 314 client_connection->SetSocket(
315 scoped_ptr<StreamSocket>(new FakeSocket(&channel_1_, &channel_2_))); 315 scoped_ptr<StreamSocket>(new FakeSocket(&channel_1_, &channel_2_)));
316 scoped_ptr<StreamSocket> server_socket( 316 scoped_ptr<StreamSocket> server_socket(
317 new FakeSocket(&channel_2_, &channel_1_)); 317 new FakeSocket(&channel_2_, &channel_1_));
318 318
319 base::FilePath certs_dir(GetTestCertsDirectory()); 319 base::FilePath certs_dir(GetTestCertsDirectory());
320 320
321 base::FilePath cert_path = certs_dir.AppendASCII("unittest.selfsigned.der"); 321 base::FilePath cert_path = certs_dir.AppendASCII("unittest.selfsigned.der");
322 std::string cert_der; 322 std::string cert_der;
323 ASSERT_TRUE(base::ReadFileToString(cert_path, &cert_der)); 323 ASSERT_TRUE(base::ReadFileToString(cert_path, &cert_der));
324 324
325 scoped_refptr<net::X509Certificate> cert = 325 scoped_refptr<X509Certificate> cert =
326 X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size()); 326 X509Certificate::CreateFromBytes(cert_der.data(), cert_der.size());
327 327
328 base::FilePath key_path = certs_dir.AppendASCII("unittest.key.bin"); 328 base::FilePath key_path = certs_dir.AppendASCII("unittest.key.bin");
329 std::string key_string; 329 std::string key_string;
330 ASSERT_TRUE(base::ReadFileToString(key_path, &key_string)); 330 ASSERT_TRUE(base::ReadFileToString(key_path, &key_string));
331 std::vector<uint8> key_vector( 331 std::vector<uint8> key_vector(
332 reinterpret_cast<const uint8*>(key_string.data()), 332 reinterpret_cast<const uint8*>(key_string.data()),
333 reinterpret_cast<const uint8*>(key_string.data() + 333 reinterpret_cast<const uint8*>(key_string.data() +
334 key_string.length())); 334 key_string.length()));
335 335
336 scoped_ptr<crypto::RSAPrivateKey> private_key( 336 scoped_ptr<crypto::RSAPrivateKey> private_key(
337 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector)); 337 crypto::RSAPrivateKey::CreateFromPrivateKeyInfo(key_vector));
338 338
339 net::SSLConfig ssl_config; 339 SSLConfig ssl_config;
340 ssl_config.false_start_enabled = false; 340 ssl_config.false_start_enabled = false;
341 ssl_config.channel_id_enabled = false; 341 ssl_config.channel_id_enabled = false;
342 342
343 // Certificate provided by the host doesn't need authority. 343 // Certificate provided by the host doesn't need authority.
344 net::SSLConfig::CertAndStatus cert_and_status; 344 SSLConfig::CertAndStatus cert_and_status;
345 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; 345 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID;
346 cert_and_status.der_cert = cert_der; 346 cert_and_status.der_cert = cert_der;
347 ssl_config.allowed_bad_certs.push_back(cert_and_status); 347 ssl_config.allowed_bad_certs.push_back(cert_and_status);
348 348
349 net::HostPortPair host_and_pair("unittest", 0); 349 HostPortPair host_and_pair("unittest", 0);
350 net::SSLClientSocketContext context; 350 SSLClientSocketContext context;
351 context.cert_verifier = cert_verifier_.get(); 351 context.cert_verifier = cert_verifier_.get();
352 context.transport_security_state = transport_security_state_.get(); 352 context.transport_security_state = transport_security_state_.get();
353 client_socket_ = 353 client_socket_ =
354 socket_factory_->CreateSSLClientSocket( 354 socket_factory_->CreateSSLClientSocket(
355 client_connection.Pass(), host_and_pair, ssl_config, context); 355 client_connection.Pass(), host_and_pair, ssl_config, context);
356 server_socket_ = net::CreateSSLServerSocket( 356 server_socket_ = CreateSSLServerSocket(
357 server_socket.Pass(), 357 server_socket.Pass(),
358 cert.get(), private_key.get(), net::SSLConfig()); 358 cert.get(), private_key.get(), SSLConfig());
359 } 359 }
360 360
361 FakeDataChannel channel_1_; 361 FakeDataChannel channel_1_;
362 FakeDataChannel channel_2_; 362 FakeDataChannel channel_2_;
363 scoped_ptr<net::SSLClientSocket> client_socket_; 363 scoped_ptr<SSLClientSocket> client_socket_;
364 scoped_ptr<net::SSLServerSocket> server_socket_; 364 scoped_ptr<SSLServerSocket> server_socket_;
365 net::ClientSocketFactory* socket_factory_; 365 ClientSocketFactory* socket_factory_;
366 scoped_ptr<net::MockCertVerifier> cert_verifier_; 366 scoped_ptr<MockCertVerifier> cert_verifier_;
367 scoped_ptr<net::TransportSecurityState> transport_security_state_; 367 scoped_ptr<TransportSecurityState> transport_security_state_;
368 }; 368 };
369 369
370 // This test only executes creation of client and server sockets. This is to 370 // This test only executes creation of client and server sockets. This is to
371 // test that creation of sockets doesn't crash and have minimal code to run 371 // test that creation of sockets doesn't crash and have minimal code to run
372 // under valgrind in order to help debugging memory problems. 372 // under valgrind in order to help debugging memory problems.
373 TEST_F(SSLServerSocketTest, Initialize) { 373 TEST_F(SSLServerSocketTest, Initialize) {
374 Initialize(); 374 Initialize();
375 } 375 }
376 376
377 // This test executes Connect() on SSLClientSocket and Handshake() on 377 // This test executes Connect() on SSLClientSocket and Handshake() on
378 // SSLServerSocket to make sure handshaking between the two sockets is 378 // SSLServerSocket to make sure handshaking between the two sockets is
379 // completed successfully. 379 // completed successfully.
380 TEST_F(SSLServerSocketTest, Handshake) { 380 TEST_F(SSLServerSocketTest, Handshake) {
381 Initialize(); 381 Initialize();
382 382
383 TestCompletionCallback connect_callback; 383 TestCompletionCallback connect_callback;
384 TestCompletionCallback handshake_callback; 384 TestCompletionCallback handshake_callback;
385 385
386 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 386 int server_ret = server_socket_->Handshake(handshake_callback.callback());
387 EXPECT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING); 387 EXPECT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
388 388
389 int client_ret = client_socket_->Connect(connect_callback.callback()); 389 int client_ret = client_socket_->Connect(connect_callback.callback());
390 EXPECT_TRUE(client_ret == net::OK || client_ret == net::ERR_IO_PENDING); 390 EXPECT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
391 391
392 if (client_ret == net::ERR_IO_PENDING) { 392 if (client_ret == ERR_IO_PENDING) {
393 EXPECT_EQ(net::OK, connect_callback.WaitForResult()); 393 EXPECT_EQ(OK, connect_callback.WaitForResult());
394 } 394 }
395 if (server_ret == net::ERR_IO_PENDING) { 395 if (server_ret == ERR_IO_PENDING) {
396 EXPECT_EQ(net::OK, handshake_callback.WaitForResult()); 396 EXPECT_EQ(OK, handshake_callback.WaitForResult());
397 } 397 }
398 398
399 // Make sure the cert status is expected. 399 // Make sure the cert status is expected.
400 SSLInfo ssl_info; 400 SSLInfo ssl_info;
401 client_socket_->GetSSLInfo(&ssl_info); 401 client_socket_->GetSSLInfo(&ssl_info);
402 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status); 402 EXPECT_EQ(CERT_STATUS_AUTHORITY_INVALID, ssl_info.cert_status);
403 } 403 }
404 404
405 TEST_F(SSLServerSocketTest, DataTransfer) { 405 TEST_F(SSLServerSocketTest, DataTransfer) {
406 Initialize(); 406 Initialize();
407 407
408 TestCompletionCallback connect_callback; 408 TestCompletionCallback connect_callback;
409 TestCompletionCallback handshake_callback; 409 TestCompletionCallback handshake_callback;
410 410
411 // Establish connection. 411 // Establish connection.
412 int client_ret = client_socket_->Connect(connect_callback.callback()); 412 int client_ret = client_socket_->Connect(connect_callback.callback());
413 ASSERT_TRUE(client_ret == net::OK || client_ret == net::ERR_IO_PENDING); 413 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
414 414
415 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 415 int server_ret = server_socket_->Handshake(handshake_callback.callback());
416 ASSERT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING); 416 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
417 417
418 client_ret = connect_callback.GetResult(client_ret); 418 client_ret = connect_callback.GetResult(client_ret);
419 ASSERT_EQ(net::OK, client_ret); 419 ASSERT_EQ(OK, client_ret);
420 server_ret = handshake_callback.GetResult(server_ret); 420 server_ret = handshake_callback.GetResult(server_ret);
421 ASSERT_EQ(net::OK, server_ret); 421 ASSERT_EQ(OK, server_ret);
422 422
423 const int kReadBufSize = 1024; 423 const int kReadBufSize = 1024;
424 scoped_refptr<net::StringIOBuffer> write_buf = 424 scoped_refptr<StringIOBuffer> write_buf =
425 new net::StringIOBuffer("testing123"); 425 new StringIOBuffer("testing123");
426 scoped_refptr<net::DrainableIOBuffer> read_buf = 426 scoped_refptr<DrainableIOBuffer> read_buf =
427 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), 427 new DrainableIOBuffer(new IOBuffer(kReadBufSize), kReadBufSize);
428 kReadBufSize);
429 428
430 // Write then read. 429 // Write then read.
431 TestCompletionCallback write_callback; 430 TestCompletionCallback write_callback;
432 TestCompletionCallback read_callback; 431 TestCompletionCallback read_callback;
433 server_ret = server_socket_->Write( 432 server_ret = server_socket_->Write(
434 write_buf.get(), write_buf->size(), write_callback.callback()); 433 write_buf.get(), write_buf->size(), write_callback.callback());
435 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); 434 EXPECT_TRUE(server_ret > 0 || server_ret == ERR_IO_PENDING);
436 client_ret = client_socket_->Read( 435 client_ret = client_socket_->Read(
437 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); 436 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback());
438 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); 437 EXPECT_TRUE(client_ret > 0 || client_ret == ERR_IO_PENDING);
439 438
440 server_ret = write_callback.GetResult(server_ret); 439 server_ret = write_callback.GetResult(server_ret);
441 EXPECT_GT(server_ret, 0); 440 EXPECT_GT(server_ret, 0);
442 client_ret = read_callback.GetResult(client_ret); 441 client_ret = read_callback.GetResult(client_ret);
443 ASSERT_GT(client_ret, 0); 442 ASSERT_GT(client_ret, 0);
444 443
445 read_buf->DidConsume(client_ret); 444 read_buf->DidConsume(client_ret);
446 while (read_buf->BytesConsumed() < write_buf->size()) { 445 while (read_buf->BytesConsumed() < write_buf->size()) {
447 client_ret = client_socket_->Read( 446 client_ret = client_socket_->Read(
448 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); 447 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback());
449 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); 448 EXPECT_TRUE(client_ret > 0 || client_ret == ERR_IO_PENDING);
450 client_ret = read_callback.GetResult(client_ret); 449 client_ret = read_callback.GetResult(client_ret);
451 ASSERT_GT(client_ret, 0); 450 ASSERT_GT(client_ret, 0);
452 read_buf->DidConsume(client_ret); 451 read_buf->DidConsume(client_ret);
453 } 452 }
454 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); 453 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed());
455 read_buf->SetOffset(0); 454 read_buf->SetOffset(0);
456 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); 455 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size()));
457 456
458 // Read then write. 457 // Read then write.
459 write_buf = new net::StringIOBuffer("hello123"); 458 write_buf = new StringIOBuffer("hello123");
460 server_ret = server_socket_->Read( 459 server_ret = server_socket_->Read(
461 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); 460 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback());
462 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); 461 EXPECT_TRUE(server_ret > 0 || server_ret == ERR_IO_PENDING);
463 client_ret = client_socket_->Write( 462 client_ret = client_socket_->Write(
464 write_buf.get(), write_buf->size(), write_callback.callback()); 463 write_buf.get(), write_buf->size(), write_callback.callback());
465 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); 464 EXPECT_TRUE(client_ret > 0 || client_ret == ERR_IO_PENDING);
466 465
467 server_ret = read_callback.GetResult(server_ret); 466 server_ret = read_callback.GetResult(server_ret);
468 ASSERT_GT(server_ret, 0); 467 ASSERT_GT(server_ret, 0);
469 client_ret = write_callback.GetResult(client_ret); 468 client_ret = write_callback.GetResult(client_ret);
470 EXPECT_GT(client_ret, 0); 469 EXPECT_GT(client_ret, 0);
471 470
472 read_buf->DidConsume(server_ret); 471 read_buf->DidConsume(server_ret);
473 while (read_buf->BytesConsumed() < write_buf->size()) { 472 while (read_buf->BytesConsumed() < write_buf->size()) {
474 server_ret = server_socket_->Read( 473 server_ret = server_socket_->Read(
475 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); 474 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback());
476 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); 475 EXPECT_TRUE(server_ret > 0 || server_ret == ERR_IO_PENDING);
477 server_ret = read_callback.GetResult(server_ret); 476 server_ret = read_callback.GetResult(server_ret);
478 ASSERT_GT(server_ret, 0); 477 ASSERT_GT(server_ret, 0);
479 read_buf->DidConsume(server_ret); 478 read_buf->DidConsume(server_ret);
480 } 479 }
481 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); 480 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed());
482 read_buf->SetOffset(0); 481 read_buf->SetOffset(0);
483 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); 482 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size()));
484 } 483 }
485 484
486 // A regression test for bug 127822 (http://crbug.com/127822). 485 // A regression test for bug 127822 (http://crbug.com/127822).
487 // If the server closes the connection after the handshake is finished, 486 // If the server closes the connection after the handshake is finished,
488 // the client's Write() call should not cause an infinite loop. 487 // the client's Write() call should not cause an infinite loop.
489 // NOTE: this is a test for SSLClientSocket rather than SSLServerSocket. 488 // NOTE: this is a test for SSLClientSocket rather than SSLServerSocket.
490 TEST_F(SSLServerSocketTest, ClientWriteAfterServerClose) { 489 TEST_F(SSLServerSocketTest, ClientWriteAfterServerClose) {
491 Initialize(); 490 Initialize();
492 491
493 TestCompletionCallback connect_callback; 492 TestCompletionCallback connect_callback;
494 TestCompletionCallback handshake_callback; 493 TestCompletionCallback handshake_callback;
495 494
496 // Establish connection. 495 // Establish connection.
497 int client_ret = client_socket_->Connect(connect_callback.callback()); 496 int client_ret = client_socket_->Connect(connect_callback.callback());
498 ASSERT_TRUE(client_ret == net::OK || client_ret == net::ERR_IO_PENDING); 497 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
499 498
500 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 499 int server_ret = server_socket_->Handshake(handshake_callback.callback());
501 ASSERT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING); 500 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
502 501
503 client_ret = connect_callback.GetResult(client_ret); 502 client_ret = connect_callback.GetResult(client_ret);
504 ASSERT_EQ(net::OK, client_ret); 503 ASSERT_EQ(OK, client_ret);
505 server_ret = handshake_callback.GetResult(server_ret); 504 server_ret = handshake_callback.GetResult(server_ret);
506 ASSERT_EQ(net::OK, server_ret); 505 ASSERT_EQ(OK, server_ret);
507 506
508 scoped_refptr<net::StringIOBuffer> write_buf = 507 scoped_refptr<StringIOBuffer> write_buf = new StringIOBuffer("testing123");
509 new net::StringIOBuffer("testing123");
510 508
511 // The server closes the connection. The server needs to write some 509 // The server closes the connection. The server needs to write some
512 // data first so that the client's Read() calls from the transport 510 // data first so that the client's Read() calls from the transport
513 // socket won't return ERR_IO_PENDING. This ensures that the client 511 // socket won't return ERR_IO_PENDING. This ensures that the client
514 // will call Read() on the transport socket again. 512 // will call Read() on the transport socket again.
515 TestCompletionCallback write_callback; 513 TestCompletionCallback write_callback;
516 514
517 server_ret = server_socket_->Write( 515 server_ret = server_socket_->Write(
518 write_buf.get(), write_buf->size(), write_callback.callback()); 516 write_buf.get(), write_buf->size(), write_callback.callback());
519 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); 517 EXPECT_TRUE(server_ret > 0 || server_ret == ERR_IO_PENDING);
520 518
521 server_ret = write_callback.GetResult(server_ret); 519 server_ret = write_callback.GetResult(server_ret);
522 EXPECT_GT(server_ret, 0); 520 EXPECT_GT(server_ret, 0);
523 521
524 server_socket_->Disconnect(); 522 server_socket_->Disconnect();
525 523
526 // The client writes some data. This should not cause an infinite loop. 524 // The client writes some data. This should not cause an infinite loop.
527 client_ret = client_socket_->Write( 525 client_ret = client_socket_->Write(
528 write_buf.get(), write_buf->size(), write_callback.callback()); 526 write_buf.get(), write_buf->size(), write_callback.callback());
529 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); 527 EXPECT_TRUE(client_ret > 0 || client_ret == ERR_IO_PENDING);
530 528
531 client_ret = write_callback.GetResult(client_ret); 529 client_ret = write_callback.GetResult(client_ret);
532 EXPECT_GT(client_ret, 0); 530 EXPECT_GT(client_ret, 0);
533 531
534 base::MessageLoop::current()->PostDelayedTask( 532 base::MessageLoop::current()->PostDelayedTask(
535 FROM_HERE, base::MessageLoop::QuitClosure(), 533 FROM_HERE, base::MessageLoop::QuitClosure(),
536 base::TimeDelta::FromMilliseconds(10)); 534 base::TimeDelta::FromMilliseconds(10));
537 base::MessageLoop::current()->Run(); 535 base::MessageLoop::current()->Run();
538 } 536 }
539 537
540 // This test executes ExportKeyingMaterial() on the client and server sockets, 538 // This test executes ExportKeyingMaterial() on the client and server sockets,
541 // after connecting them, and verifies that the results match. 539 // after connecting them, and verifies that the results match.
542 // This test will fail if False Start is enabled (see crbug.com/90208). 540 // This test will fail if False Start is enabled (see crbug.com/90208).
543 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) { 541 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) {
544 Initialize(); 542 Initialize();
545 543
546 TestCompletionCallback connect_callback; 544 TestCompletionCallback connect_callback;
547 TestCompletionCallback handshake_callback; 545 TestCompletionCallback handshake_callback;
548 546
549 int client_ret = client_socket_->Connect(connect_callback.callback()); 547 int client_ret = client_socket_->Connect(connect_callback.callback());
550 ASSERT_TRUE(client_ret == net::OK || client_ret == net::ERR_IO_PENDING); 548 ASSERT_TRUE(client_ret == OK || client_ret == ERR_IO_PENDING);
551 549
552 int server_ret = server_socket_->Handshake(handshake_callback.callback()); 550 int server_ret = server_socket_->Handshake(handshake_callback.callback());
553 ASSERT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING); 551 ASSERT_TRUE(server_ret == OK || server_ret == ERR_IO_PENDING);
554 552
555 if (client_ret == net::ERR_IO_PENDING) { 553 if (client_ret == ERR_IO_PENDING) {
556 ASSERT_EQ(net::OK, connect_callback.WaitForResult()); 554 ASSERT_EQ(OK, connect_callback.WaitForResult());
557 } 555 }
558 if (server_ret == net::ERR_IO_PENDING) { 556 if (server_ret == ERR_IO_PENDING) {
559 ASSERT_EQ(net::OK, handshake_callback.WaitForResult()); 557 ASSERT_EQ(OK, handshake_callback.WaitForResult());
560 } 558 }
561 559
562 const int kKeyingMaterialSize = 32; 560 const int kKeyingMaterialSize = 32;
563 const char* kKeyingLabel = "EXPERIMENTAL-server-socket-test"; 561 const char* kKeyingLabel = "EXPERIMENTAL-server-socket-test";
564 const char* kKeyingContext = ""; 562 const char* kKeyingContext = "";
565 unsigned char server_out[kKeyingMaterialSize]; 563 unsigned char server_out[kKeyingMaterialSize];
566 int rv = server_socket_->ExportKeyingMaterial(kKeyingLabel, 564 int rv = server_socket_->ExportKeyingMaterial(kKeyingLabel,
567 false, kKeyingContext, 565 false, kKeyingContext,
568 server_out, sizeof(server_out)); 566 server_out, sizeof(server_out));
569 ASSERT_EQ(net::OK, rv); 567 ASSERT_EQ(OK, rv);
570 568
571 unsigned char client_out[kKeyingMaterialSize]; 569 unsigned char client_out[kKeyingMaterialSize];
572 rv = client_socket_->ExportKeyingMaterial(kKeyingLabel, 570 rv = client_socket_->ExportKeyingMaterial(kKeyingLabel,
573 false, kKeyingContext, 571 false, kKeyingContext,
574 client_out, sizeof(client_out)); 572 client_out, sizeof(client_out));
575 ASSERT_EQ(net::OK, rv); 573 ASSERT_EQ(OK, rv);
576 EXPECT_EQ(0, memcmp(server_out, client_out, sizeof(server_out))); 574 EXPECT_EQ(0, memcmp(server_out, client_out, sizeof(server_out)));
577 575
578 const char* kKeyingLabelBad = "EXPERIMENTAL-server-socket-test-bad"; 576 const char* kKeyingLabelBad = "EXPERIMENTAL-server-socket-test-bad";
579 unsigned char client_bad[kKeyingMaterialSize]; 577 unsigned char client_bad[kKeyingMaterialSize];
580 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, 578 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad,
581 false, kKeyingContext, 579 false, kKeyingContext,
582 client_bad, sizeof(client_bad)); 580 client_bad, sizeof(client_bad));
583 ASSERT_EQ(rv, net::OK); 581 ASSERT_EQ(rv, OK);
584 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); 582 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out)));
585 } 583 }
586 584
587 } // namespace net 585 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/ssl_client_socket_openssl_unittest.cc ('k') | net/socket/tcp_server_socket_unittest.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698