diff options
author | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-19 02:45:33 +0000 |
---|---|---|
committer | rsleevi@chromium.org <rsleevi@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2011-05-19 02:45:33 +0000 |
commit | 1d872d38c8ea8055dd4bf3b5546cf7dda8f1bc69 (patch) | |
tree | a8b03078ce274183d8a5c61767055a8ba7f4d899 /net/socket/ssl_client_socket_unittest.cc | |
parent | 4066907a4e24989a7b05ba95df75245709b6f30d (diff) | |
download | chromium_src-1d872d38c8ea8055dd4bf3b5546cf7dda8f1bc69.zip chromium_src-1d872d38c8ea8055dd4bf3b5546cf7dda8f1bc69.tar.gz chromium_src-1d872d38c8ea8055dd4bf3b5546cf7dda8f1bc69.tar.bz2 |
Include SSL plaintext traffic in addition to the ciphertext when logging raw bytes to a NetLog
R=eroman,mmenke
BUG=82562
TEST=net_unittests SSLClientSocketTest.Read_FullLogging
Review URL: http://codereview.chromium.org/7017007
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@85866 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/socket/ssl_client_socket_unittest.cc')
-rw-r--r-- | net/socket/ssl_client_socket_unittest.cc | 66 |
1 files changed, 65 insertions, 1 deletions
diff --git a/net/socket/ssl_client_socket_unittest.cc b/net/socket/ssl_client_socket_unittest.cc index f436512..49c9191 100644 --- a/net/socket/ssl_client_socket_unittest.cc +++ b/net/socket/ssl_client_socket_unittest.cc @@ -1,4 +1,4 @@ -// Copyright (c) 2010 The Chromium Authors. All rights reserved. +// Copyright (c) 2011 The Chromium Authors. All rights reserved. // Use of this source code is governed by a BSD-style license that can be // found in the LICENSE file. @@ -511,6 +511,70 @@ TEST_F(SSLClientSocketTest, Read_Interrupted) { EXPECT_GT(rv, 0); } +TEST_F(SSLClientSocketTest, Read_FullLogging) { + net::TestServer test_server(net::TestServer::TYPE_HTTPS, FilePath()); + ASSERT_TRUE(test_server.Start()); + + net::AddressList addr; + ASSERT_TRUE(test_server.GetAddressList(&addr)); + + TestCompletionCallback callback; + net::CapturingNetLog log(net::CapturingNetLog::kUnbounded); + log.SetLogLevel(net::NetLog::LOG_ALL); + net::StreamSocket* transport = new net::TCPClientSocket( + addr, &log, net::NetLog::Source()); + int rv = transport->Connect(&callback); + if (rv == net::ERR_IO_PENDING) + rv = callback.WaitForResult(); + EXPECT_EQ(net::OK, rv); + + scoped_ptr<net::SSLClientSocket> sock( + CreateSSLClientSocket(transport, test_server.host_port_pair(), + kDefaultSSLConfig)); + + rv = sock->Connect(&callback); + if (rv == net::ERR_IO_PENDING) + rv = callback.WaitForResult(); + EXPECT_EQ(net::OK, rv); + EXPECT_TRUE(sock->IsConnected()); + + const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; + scoped_refptr<net::IOBuffer> request_buffer( + new net::IOBuffer(arraysize(request_text) - 1)); + memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1); + + rv = sock->Write(request_buffer, arraysize(request_text) - 1, &callback); + EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); + + if (rv == net::ERR_IO_PENDING) + rv = callback.WaitForResult(); + EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); + + net::CapturingNetLog::EntryList entries; + log.GetEntries(&entries); + size_t last_index = net::ExpectLogContainsSomewhereAfter( + entries, 5, net::NetLog::TYPE_SSL_SOCKET_BYTES_SENT, + net::NetLog::PHASE_NONE); + + scoped_refptr<net::IOBuffer> buf(new net::IOBuffer(4096)); + for (;;) { + rv = sock->Read(buf, 4096, &callback); + EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); + + if (rv == net::ERR_IO_PENDING) + rv = callback.WaitForResult(); + + EXPECT_GE(rv, 0); + if (rv <= 0) + break; + + log.GetEntries(&entries); + last_index = net::ExpectLogContainsSomewhereAfter( + entries, last_index + 1, net::NetLog::TYPE_SSL_SOCKET_BYTES_RECEIVED, + net::NetLog::PHASE_NONE); + } +} + // Regression test for http://crbug.com/42538 TEST_F(SSLClientSocketTest, PrematureApplicationData) { net::TestServer test_server(net::TestServer::TYPE_HTTPS, FilePath()); |