| OLD | NEW |
| 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 249 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 260 FakeSocket client(&channel_1, &channel_2); | 260 FakeSocket client(&channel_1, &channel_2); |
| 261 FakeSocket server(&channel_2, &channel_1); | 261 FakeSocket server(&channel_2, &channel_1); |
| 262 | 262 |
| 263 const char kTestData[] = "testing123"; | 263 const char kTestData[] = "testing123"; |
| 264 const int kTestDataSize = strlen(kTestData); | 264 const int kTestDataSize = strlen(kTestData); |
| 265 const int kReadBufSize = 1024; | 265 const int kReadBufSize = 1024; |
| 266 scoped_refptr<net::IOBuffer> write_buf = new net::StringIOBuffer(kTestData); | 266 scoped_refptr<net::IOBuffer> write_buf = new net::StringIOBuffer(kTestData); |
| 267 scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); | 267 scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); |
| 268 | 268 |
| 269 // Write then read. | 269 // Write then read. |
| 270 int written = server.Write(write_buf, kTestDataSize, CompletionCallback()); | 270 int written = |
| 271 server.Write(write_buf.get(), kTestDataSize, CompletionCallback()); |
| 271 EXPECT_GT(written, 0); | 272 EXPECT_GT(written, 0); |
| 272 EXPECT_LE(written, kTestDataSize); | 273 EXPECT_LE(written, kTestDataSize); |
| 273 | 274 |
| 274 int read = client.Read(read_buf, kReadBufSize, CompletionCallback()); | 275 int read = client.Read(read_buf.get(), kReadBufSize, CompletionCallback()); |
| 275 EXPECT_GT(read, 0); | 276 EXPECT_GT(read, 0); |
| 276 EXPECT_LE(read, written); | 277 EXPECT_LE(read, written); |
| 277 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); | 278 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
| 278 | 279 |
| 279 // Read then write. | 280 // Read then write. |
| 280 TestCompletionCallback callback; | 281 TestCompletionCallback callback; |
| 281 EXPECT_EQ(net::ERR_IO_PENDING, | 282 EXPECT_EQ(net::ERR_IO_PENDING, |
| 282 server.Read(read_buf, kReadBufSize, callback.callback())); | 283 server.Read(read_buf.get(), kReadBufSize, callback.callback())); |
| 283 | 284 |
| 284 written = client.Write(write_buf, kTestDataSize, CompletionCallback()); | 285 written = client.Write(write_buf.get(), kTestDataSize, CompletionCallback()); |
| 285 EXPECT_GT(written, 0); | 286 EXPECT_GT(written, 0); |
| 286 EXPECT_LE(written, kTestDataSize); | 287 EXPECT_LE(written, kTestDataSize); |
| 287 | 288 |
| 288 read = callback.WaitForResult(); | 289 read = callback.WaitForResult(); |
| 289 EXPECT_GT(read, 0); | 290 EXPECT_GT(read, 0); |
| 290 EXPECT_LE(read, written); | 291 EXPECT_LE(read, written); |
| 291 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); | 292 EXPECT_EQ(0, memcmp(kTestData, read_buf->data(), read)); |
| 292 } | 293 } |
| 293 | 294 |
| 294 class SSLServerSocketTest : public PlatformTest { | 295 class SSLServerSocketTest : public PlatformTest { |
| (...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 336 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; | 337 cert_and_status.cert_status = CERT_STATUS_AUTHORITY_INVALID; |
| 337 cert_and_status.der_cert = cert_der; | 338 cert_and_status.der_cert = cert_der; |
| 338 ssl_config.allowed_bad_certs.push_back(cert_and_status); | 339 ssl_config.allowed_bad_certs.push_back(cert_and_status); |
| 339 | 340 |
| 340 net::HostPortPair host_and_pair("unittest", 0); | 341 net::HostPortPair host_and_pair("unittest", 0); |
| 341 net::SSLClientSocketContext context; | 342 net::SSLClientSocketContext context; |
| 342 context.cert_verifier = cert_verifier_.get(); | 343 context.cert_verifier = cert_verifier_.get(); |
| 343 client_socket_.reset( | 344 client_socket_.reset( |
| 344 socket_factory_->CreateSSLClientSocket( | 345 socket_factory_->CreateSSLClientSocket( |
| 345 fake_client_socket, host_and_pair, ssl_config, context)); | 346 fake_client_socket, host_and_pair, ssl_config, context)); |
| 346 server_socket_.reset(net::CreateSSLServerSocket(fake_server_socket, | 347 server_socket_.reset(net::CreateSSLServerSocket( |
| 347 cert, private_key.get(), | 348 fake_server_socket, cert.get(), private_key.get(), net::SSLConfig())); |
| 348 net::SSLConfig())); | |
| 349 } | 349 } |
| 350 | 350 |
| 351 FakeDataChannel channel_1_; | 351 FakeDataChannel channel_1_; |
| 352 FakeDataChannel channel_2_; | 352 FakeDataChannel channel_2_; |
| 353 scoped_ptr<net::SSLClientSocket> client_socket_; | 353 scoped_ptr<net::SSLClientSocket> client_socket_; |
| 354 scoped_ptr<net::SSLServerSocket> server_socket_; | 354 scoped_ptr<net::SSLServerSocket> server_socket_; |
| 355 net::ClientSocketFactory* socket_factory_; | 355 net::ClientSocketFactory* socket_factory_; |
| 356 scoped_ptr<net::MockCertVerifier> cert_verifier_; | 356 scoped_ptr<net::MockCertVerifier> cert_verifier_; |
| 357 }; | 357 }; |
| 358 | 358 |
| (...skipping 56 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 415 const int kReadBufSize = 1024; | 415 const int kReadBufSize = 1024; |
| 416 scoped_refptr<net::StringIOBuffer> write_buf = | 416 scoped_refptr<net::StringIOBuffer> write_buf = |
| 417 new net::StringIOBuffer("testing123"); | 417 new net::StringIOBuffer("testing123"); |
| 418 scoped_refptr<net::DrainableIOBuffer> read_buf = | 418 scoped_refptr<net::DrainableIOBuffer> read_buf = |
| 419 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), | 419 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), |
| 420 kReadBufSize); | 420 kReadBufSize); |
| 421 | 421 |
| 422 // Write then read. | 422 // Write then read. |
| 423 TestCompletionCallback write_callback; | 423 TestCompletionCallback write_callback; |
| 424 TestCompletionCallback read_callback; | 424 TestCompletionCallback read_callback; |
| 425 server_ret = server_socket_->Write(write_buf, write_buf->size(), | 425 server_ret = server_socket_->Write( |
| 426 write_callback.callback()); | 426 write_buf.get(), write_buf->size(), write_callback.callback()); |
| 427 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 427 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 428 client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(), | 428 client_ret = client_socket_->Read( |
| 429 read_callback.callback()); | 429 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
| 430 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 430 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 431 | 431 |
| 432 server_ret = write_callback.GetResult(server_ret); | 432 server_ret = write_callback.GetResult(server_ret); |
| 433 EXPECT_GT(server_ret, 0); | 433 EXPECT_GT(server_ret, 0); |
| 434 client_ret = read_callback.GetResult(client_ret); | 434 client_ret = read_callback.GetResult(client_ret); |
| 435 ASSERT_GT(client_ret, 0); | 435 ASSERT_GT(client_ret, 0); |
| 436 | 436 |
| 437 read_buf->DidConsume(client_ret); | 437 read_buf->DidConsume(client_ret); |
| 438 while (read_buf->BytesConsumed() < write_buf->size()) { | 438 while (read_buf->BytesConsumed() < write_buf->size()) { |
| 439 client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(), | 439 client_ret = client_socket_->Read( |
| 440 read_callback.callback()); | 440 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
| 441 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 441 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 442 client_ret = read_callback.GetResult(client_ret); | 442 client_ret = read_callback.GetResult(client_ret); |
| 443 ASSERT_GT(client_ret, 0); | 443 ASSERT_GT(client_ret, 0); |
| 444 read_buf->DidConsume(client_ret); | 444 read_buf->DidConsume(client_ret); |
| 445 } | 445 } |
| 446 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); | 446 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); |
| 447 read_buf->SetOffset(0); | 447 read_buf->SetOffset(0); |
| 448 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); | 448 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); |
| 449 | 449 |
| 450 // Read then write. | 450 // Read then write. |
| 451 write_buf = new net::StringIOBuffer("hello123"); | 451 write_buf = new net::StringIOBuffer("hello123"); |
| 452 server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(), | 452 server_ret = server_socket_->Read( |
| 453 read_callback.callback()); | 453 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
| 454 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 454 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 455 client_ret = client_socket_->Write(write_buf, write_buf->size(), | 455 client_ret = client_socket_->Write( |
| 456 write_callback.callback()); | 456 write_buf.get(), write_buf->size(), write_callback.callback()); |
| 457 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 457 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 458 | 458 |
| 459 server_ret = read_callback.GetResult(server_ret); | 459 server_ret = read_callback.GetResult(server_ret); |
| 460 ASSERT_GT(server_ret, 0); | 460 ASSERT_GT(server_ret, 0); |
| 461 client_ret = write_callback.GetResult(client_ret); | 461 client_ret = write_callback.GetResult(client_ret); |
| 462 EXPECT_GT(client_ret, 0); | 462 EXPECT_GT(client_ret, 0); |
| 463 | 463 |
| 464 read_buf->DidConsume(server_ret); | 464 read_buf->DidConsume(server_ret); |
| 465 while (read_buf->BytesConsumed() < write_buf->size()) { | 465 while (read_buf->BytesConsumed() < write_buf->size()) { |
| 466 server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(), | 466 server_ret = server_socket_->Read( |
| 467 read_callback.callback()); | 467 read_buf.get(), read_buf->BytesRemaining(), read_callback.callback()); |
| 468 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 468 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 469 server_ret = read_callback.GetResult(server_ret); | 469 server_ret = read_callback.GetResult(server_ret); |
| 470 ASSERT_GT(server_ret, 0); | 470 ASSERT_GT(server_ret, 0); |
| 471 read_buf->DidConsume(server_ret); | 471 read_buf->DidConsume(server_ret); |
| 472 } | 472 } |
| 473 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); | 473 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); |
| 474 read_buf->SetOffset(0); | 474 read_buf->SetOffset(0); |
| 475 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); | 475 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); |
| 476 } | 476 } |
| 477 | 477 |
| (...skipping 21 matching lines...) Expand all Loading... |
| 499 | 499 |
| 500 scoped_refptr<net::StringIOBuffer> write_buf = | 500 scoped_refptr<net::StringIOBuffer> write_buf = |
| 501 new net::StringIOBuffer("testing123"); | 501 new net::StringIOBuffer("testing123"); |
| 502 | 502 |
| 503 // The server closes the connection. The server needs to write some | 503 // The server closes the connection. The server needs to write some |
| 504 // data first so that the client's Read() calls from the transport | 504 // data first so that the client's Read() calls from the transport |
| 505 // socket won't return ERR_IO_PENDING. This ensures that the client | 505 // socket won't return ERR_IO_PENDING. This ensures that the client |
| 506 // will call Read() on the transport socket again. | 506 // will call Read() on the transport socket again. |
| 507 TestCompletionCallback write_callback; | 507 TestCompletionCallback write_callback; |
| 508 | 508 |
| 509 server_ret = server_socket_->Write(write_buf, write_buf->size(), | 509 server_ret = server_socket_->Write( |
| 510 write_callback.callback()); | 510 write_buf.get(), write_buf->size(), write_callback.callback()); |
| 511 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 511 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 512 | 512 |
| 513 server_ret = write_callback.GetResult(server_ret); | 513 server_ret = write_callback.GetResult(server_ret); |
| 514 EXPECT_GT(server_ret, 0); | 514 EXPECT_GT(server_ret, 0); |
| 515 | 515 |
| 516 server_socket_->Disconnect(); | 516 server_socket_->Disconnect(); |
| 517 | 517 |
| 518 // The client writes some data. This should not cause an infinite loop. | 518 // The client writes some data. This should not cause an infinite loop. |
| 519 client_ret = client_socket_->Write(write_buf, write_buf->size(), | 519 client_ret = client_socket_->Write( |
| 520 write_callback.callback()); | 520 write_buf.get(), write_buf->size(), write_callback.callback()); |
| 521 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 521 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 522 | 522 |
| 523 client_ret = write_callback.GetResult(client_ret); | 523 client_ret = write_callback.GetResult(client_ret); |
| 524 EXPECT_GT(client_ret, 0); | 524 EXPECT_GT(client_ret, 0); |
| 525 | 525 |
| 526 base::MessageLoop::current()->PostDelayedTask( | 526 base::MessageLoop::current()->PostDelayedTask( |
| 527 FROM_HERE, base::MessageLoop::QuitClosure(), | 527 FROM_HERE, base::MessageLoop::QuitClosure(), |
| 528 base::TimeDelta::FromMilliseconds(10)); | 528 base::TimeDelta::FromMilliseconds(10)); |
| 529 base::MessageLoop::current()->Run(); | 529 base::MessageLoop::current()->Run(); |
| 530 } | 530 } |
| (...skipping 40 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 571 unsigned char client_bad[kKeyingMaterialSize]; | 571 unsigned char client_bad[kKeyingMaterialSize]; |
| 572 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, | 572 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, |
| 573 false, kKeyingContext, | 573 false, kKeyingContext, |
| 574 client_bad, sizeof(client_bad)); | 574 client_bad, sizeof(client_bad)); |
| 575 ASSERT_EQ(rv, net::OK); | 575 ASSERT_EQ(rv, net::OK); |
| 576 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); | 576 EXPECT_NE(0, memcmp(server_out, client_bad, sizeof(server_out))); |
| 577 } | 577 } |
| 578 #endif | 578 #endif |
| 579 | 579 |
| 580 } // namespace net | 580 } // namespace net |
| OLD | NEW |