| OLD | NEW |
| 1 // Copyright (c) 2011 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2011 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 343 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 354 TestCompletionCallback connect_callback; | 354 TestCompletionCallback connect_callback; |
| 355 TestCompletionCallback handshake_callback; | 355 TestCompletionCallback handshake_callback; |
| 356 | 356 |
| 357 // Establish connection. | 357 // Establish connection. |
| 358 int client_ret = client_socket_->Connect(&connect_callback); | 358 int client_ret = client_socket_->Connect(&connect_callback); |
| 359 ASSERT_TRUE(client_ret == net::OK || client_ret == net::ERR_IO_PENDING); | 359 ASSERT_TRUE(client_ret == net::OK || client_ret == net::ERR_IO_PENDING); |
| 360 | 360 |
| 361 int server_ret = server_socket_->Handshake(&handshake_callback); | 361 int server_ret = server_socket_->Handshake(&handshake_callback); |
| 362 ASSERT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING); | 362 ASSERT_TRUE(server_ret == net::OK || server_ret == net::ERR_IO_PENDING); |
| 363 | 363 |
| 364 if (client_ret == net::ERR_IO_PENDING) { | 364 client_ret = connect_callback.GetResult(client_ret); |
| 365 ASSERT_EQ(net::OK, connect_callback.WaitForResult()); | 365 ASSERT_EQ(net::OK, client_ret); |
| 366 } | 366 server_ret = handshake_callback.GetResult(server_ret); |
| 367 if (server_ret == net::ERR_IO_PENDING) { | 367 ASSERT_EQ(net::OK, server_ret); |
| 368 ASSERT_EQ(net::OK, handshake_callback.WaitForResult()); | |
| 369 } | |
| 370 | 368 |
| 371 const int kReadBufSize = 1024; | 369 const int kReadBufSize = 1024; |
| 372 scoped_refptr<net::StringIOBuffer> write_buf = | 370 scoped_refptr<net::StringIOBuffer> write_buf = |
| 373 new net::StringIOBuffer("testing123"); | 371 new net::StringIOBuffer("testing123"); |
| 374 scoped_refptr<net::IOBuffer> read_buf = new net::IOBuffer(kReadBufSize); | 372 scoped_refptr<net::DrainableIOBuffer> read_buf = |
| 373 new net::DrainableIOBuffer(new net::IOBuffer(kReadBufSize), |
| 374 kReadBufSize); |
| 375 | 375 |
| 376 // Write then read. | 376 // Write then read. |
| 377 TestCompletionCallback write_callback; | 377 TestCompletionCallback write_callback; |
| 378 TestCompletionCallback read_callback; | 378 TestCompletionCallback read_callback; |
| 379 server_ret = server_socket_->Write(write_buf, write_buf->size(), | 379 server_ret = server_socket_->Write(write_buf, write_buf->size(), |
| 380 &write_callback); | 380 &write_callback); |
| 381 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 381 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 382 client_ret = client_socket_->Read(read_buf, kReadBufSize, &read_callback); | 382 client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(), |
| 383 &read_callback); |
| 383 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 384 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 384 | 385 |
| 385 if (server_ret == net::ERR_IO_PENDING) { | 386 server_ret = write_callback.GetResult(server_ret); |
| 386 EXPECT_GT(write_callback.WaitForResult(), 0); | 387 EXPECT_GT(server_ret, 0); |
| 388 client_ret = read_callback.GetResult(client_ret); |
| 389 ASSERT_GT(client_ret, 0); |
| 390 |
| 391 read_buf->DidConsume(client_ret); |
| 392 while (read_buf->BytesConsumed() < write_buf->size()) { |
| 393 client_ret = client_socket_->Read(read_buf, read_buf->BytesRemaining(), |
| 394 &read_callback); |
| 395 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 396 client_ret = read_callback.GetResult(client_ret); |
| 397 ASSERT_GT(client_ret, 0); |
| 398 read_buf->DidConsume(client_ret); |
| 387 } | 399 } |
| 388 if (client_ret == net::ERR_IO_PENDING) { | 400 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); |
| 389 EXPECT_GT(read_callback.WaitForResult(), 0); | 401 read_buf->SetOffset(0); |
| 390 } | |
| 391 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); | 402 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); |
| 392 | 403 |
| 393 // Read then write. | 404 // Read then write. |
| 394 write_buf = new net::StringIOBuffer("hello123"); | 405 write_buf = new net::StringIOBuffer("hello123"); |
| 395 server_ret = server_socket_->Read(read_buf, kReadBufSize, &read_callback); | 406 server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(), |
| 407 &read_callback); |
| 396 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); | 408 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 397 client_ret = client_socket_->Write(write_buf, write_buf->size(), | 409 client_ret = client_socket_->Write(write_buf, write_buf->size(), |
| 398 &write_callback); | 410 &write_callback); |
| 399 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); | 411 EXPECT_TRUE(client_ret > 0 || client_ret == net::ERR_IO_PENDING); |
| 400 | 412 |
| 401 if (server_ret == net::ERR_IO_PENDING) { | 413 server_ret = read_callback.GetResult(server_ret); |
| 402 EXPECT_GT(read_callback.WaitForResult(), 0); | 414 ASSERT_GT(server_ret, 0); |
| 415 client_ret = write_callback.GetResult(client_ret); |
| 416 EXPECT_GT(client_ret, 0); |
| 417 |
| 418 read_buf->DidConsume(server_ret); |
| 419 while (read_buf->BytesConsumed() < write_buf->size()) { |
| 420 server_ret = server_socket_->Read(read_buf, read_buf->BytesRemaining(), |
| 421 &read_callback); |
| 422 EXPECT_TRUE(server_ret > 0 || server_ret == net::ERR_IO_PENDING); |
| 423 server_ret = read_callback.GetResult(server_ret); |
| 424 ASSERT_GT(server_ret, 0); |
| 425 read_buf->DidConsume(server_ret); |
| 403 } | 426 } |
| 404 if (client_ret == net::ERR_IO_PENDING) { | 427 EXPECT_EQ(write_buf->size(), read_buf->BytesConsumed()); |
| 405 EXPECT_GT(write_callback.WaitForResult(), 0); | 428 read_buf->SetOffset(0); |
| 406 } | |
| 407 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); | 429 EXPECT_EQ(0, memcmp(write_buf->data(), read_buf->data(), write_buf->size())); |
| 408 } | 430 } |
| 409 | 431 |
| 410 // This test executes ExportKeyingMaterial() on the client and server sockets, | 432 // This test executes ExportKeyingMaterial() on the client and server sockets, |
| 411 // after connecting them, and verifies that the results match. | 433 // after connecting them, and verifies that the results match. |
| 412 // This test will fail if False Start is enabled (see crbug.com/90208). | 434 // This test will fail if False Start is enabled (see crbug.com/90208). |
| 413 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) { | 435 TEST_F(SSLServerSocketTest, ExportKeyingMaterial) { |
| 414 Initialize(); | 436 Initialize(); |
| 415 | 437 |
| 416 TestCompletionCallback connect_callback; | 438 TestCompletionCallback connect_callback; |
| (...skipping 29 matching lines...) Expand all Loading... |
| 446 const char* kKeyingLabelBad = "EXPERIMENTAL-server-socket-test-bad"; | 468 const char* kKeyingLabelBad = "EXPERIMENTAL-server-socket-test-bad"; |
| 447 unsigned char client_bad[kKeyingMaterialSize]; | 469 unsigned char client_bad[kKeyingMaterialSize]; |
| 448 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, kKeyingContext, | 470 rv = client_socket_->ExportKeyingMaterial(kKeyingLabelBad, kKeyingContext, |
| 449 client_bad, sizeof(client_bad)); | 471 client_bad, sizeof(client_bad)); |
| 450 ASSERT_EQ(rv, net::OK); | 472 ASSERT_EQ(rv, net::OK); |
| 451 EXPECT_TRUE(memcmp(server_out, client_bad, sizeof(server_out)) != 0); | 473 EXPECT_TRUE(memcmp(server_out, client_bad, sizeof(server_out)) != 0); |
| 452 } | 474 } |
| 453 #endif | 475 #endif |
| 454 | 476 |
| 455 } // namespace net | 477 } // namespace net |
| OLD | NEW |