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

Unified Diff: jingle/notifier/base/fake_ssl_client_socket_unittest.cc

Issue 10817013: Move ChromeAsyncSocket to jingle/glue (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Created 8 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 side-by-side diff with in-line comments
Download patch
Index: jingle/notifier/base/fake_ssl_client_socket_unittest.cc
diff --git a/jingle/notifier/base/fake_ssl_client_socket_unittest.cc b/jingle/notifier/base/fake_ssl_client_socket_unittest.cc
deleted file mode 100644
index 617e4d161b9117a8c515277a59a07079b3203236..0000000000000000000000000000000000000000
--- a/jingle/notifier/base/fake_ssl_client_socket_unittest.cc
+++ /dev/null
@@ -1,348 +0,0 @@
-// Copyright (c) 2012 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.
-
-#include "jingle/notifier/base/fake_ssl_client_socket.h"
-
-#include <algorithm>
-#include <vector>
-
-#include "base/basictypes.h"
-#include "base/memory/ref_counted.h"
-#include "base/memory/scoped_ptr.h"
-#include "base/message_loop.h"
-#include "net/base/io_buffer.h"
-#include "net/base/net_log.h"
-#include "net/base/test_completion_callback.h"
-#include "net/socket/socket_test_util.h"
-#include "net/socket/stream_socket.h"
-#include "testing/gmock/include/gmock/gmock.h"
-#include "testing/gtest/include/gtest/gtest.h"
-
-namespace notifier {
-
-namespace {
-
-using ::testing::Return;
-using ::testing::ReturnRef;
-
-// Used by RunUnsuccessfulHandshakeTestHelper. Represents where in
-// the handshake step an error should be inserted.
-enum HandshakeErrorLocation {
- CONNECT_ERROR,
- SEND_CLIENT_HELLO_ERROR,
- VERIFY_SERVER_HELLO_ERROR,
-};
-
-// Private error codes appended to the net::Error set.
-enum {
- // An error representing a server hello that has been corrupted in
- // transit.
- ERR_MALFORMED_SERVER_HELLO = -15000,
-};
-
-// Used by PassThroughMethods test.
-class MockClientSocket : public net::StreamSocket {
- public:
- virtual ~MockClientSocket() {}
-
- MOCK_METHOD3(Read, int(net::IOBuffer*, int,
- const net::CompletionCallback&));
- MOCK_METHOD3(Write, int(net::IOBuffer*, int,
- const net::CompletionCallback&));
- MOCK_METHOD1(SetReceiveBufferSize, bool(int32));
- MOCK_METHOD1(SetSendBufferSize, bool(int32));
- MOCK_METHOD1(Connect, int(const net::CompletionCallback&));
- MOCK_METHOD0(Disconnect, void());
- MOCK_CONST_METHOD0(IsConnected, bool());
- MOCK_CONST_METHOD0(IsConnectedAndIdle, bool());
- MOCK_CONST_METHOD1(GetPeerAddress, int(net::IPEndPoint*));
- MOCK_CONST_METHOD1(GetLocalAddress, int(net::IPEndPoint*));
- MOCK_CONST_METHOD0(NetLog, const net::BoundNetLog&());
- MOCK_METHOD0(SetSubresourceSpeculation, void());
- MOCK_METHOD0(SetOmniboxSpeculation, void());
- MOCK_CONST_METHOD0(WasEverUsed, bool());
- MOCK_CONST_METHOD0(UsingTCPFastOpen, bool());
- MOCK_CONST_METHOD0(NumBytesRead, int64());
- MOCK_CONST_METHOD0(GetConnectTimeMicros, base::TimeDelta());
- MOCK_CONST_METHOD0(WasNpnNegotiated, bool());
- MOCK_CONST_METHOD0(GetNegotiatedProtocol, net::NextProto());
- MOCK_METHOD1(GetSSLInfo, bool(net::SSLInfo*));
-};
-
-// Break up |data| into a bunch of chunked MockReads/Writes and push
-// them onto |ops|.
-void AddChunkedOps(base::StringPiece data, size_t chunk_size, net::IoMode mode,
- std::vector<net::MockRead>* ops) {
- DCHECK_GT(chunk_size, 0U);
- size_t offset = 0;
- while (offset < data.size()) {
- size_t bounded_chunk_size = std::min(data.size() - offset, chunk_size);
- // We take advantage of the fact that MockWrite is typedefed to
- // MockRead.
- ops->push_back(net::MockRead(mode, data.data() + offset,
- bounded_chunk_size));
- offset += bounded_chunk_size;
- }
-}
-
-class FakeSSLClientSocketTest : public testing::Test {
- protected:
- FakeSSLClientSocketTest() {}
-
- virtual ~FakeSSLClientSocketTest() {}
-
- net::StreamSocket* MakeClientSocket() {
- return mock_client_socket_factory_.CreateTransportClientSocket(
- net::AddressList(), NULL, net::NetLog::Source());
- }
-
- void SetData(const net::MockConnect& mock_connect,
- std::vector<net::MockRead>* reads,
- std::vector<net::MockWrite>* writes) {
- static_socket_data_provider_.reset(
- new net::StaticSocketDataProvider(
- reads->empty() ? NULL : &*reads->begin(), reads->size(),
- writes->empty() ? NULL : &*writes->begin(), writes->size()));
- static_socket_data_provider_->set_connect_data(mock_connect);
- mock_client_socket_factory_.AddSocketDataProvider(
- static_socket_data_provider_.get());
- }
-
- void ExpectStatus(
- net::IoMode mode, int expected_status, int immediate_status,
- net::TestCompletionCallback* test_completion_callback) {
- if (mode == net::ASYNC) {
- EXPECT_EQ(net::ERR_IO_PENDING, immediate_status);
- int status = test_completion_callback->WaitForResult();
- EXPECT_EQ(expected_status, status);
- } else {
- EXPECT_EQ(expected_status, immediate_status);
- }
- }
-
- // Sets up the mock socket to generate a successful handshake
- // (sliced up according to the parameters) and makes sure the
- // FakeSSLClientSocket behaves as expected.
- void RunSuccessfulHandshakeTest(
- net::IoMode mode, size_t read_chunk_size, size_t write_chunk_size,
- int num_resets) {
- base::StringPiece ssl_client_hello =
- FakeSSLClientSocket::GetSslClientHello();
- base::StringPiece ssl_server_hello =
- FakeSSLClientSocket::GetSslServerHello();
-
- net::MockConnect mock_connect(mode, net::OK);
- std::vector<net::MockRead> reads;
- std::vector<net::MockWrite> writes;
- static const char kReadTestData[] = "read test data";
- static const char kWriteTestData[] = "write test data";
- for (int i = 0; i < num_resets + 1; ++i) {
- SCOPED_TRACE(i);
- AddChunkedOps(ssl_server_hello, read_chunk_size, mode, &reads);
- AddChunkedOps(ssl_client_hello, write_chunk_size, mode, &writes);
- reads.push_back(
- net::MockRead(mode, kReadTestData, arraysize(kReadTestData)));
- writes.push_back(
- net::MockWrite(mode, kWriteTestData, arraysize(kWriteTestData)));
- }
- SetData(mock_connect, &reads, &writes);
-
- FakeSSLClientSocket fake_ssl_client_socket(MakeClientSocket());
-
- for (int i = 0; i < num_resets + 1; ++i) {
- SCOPED_TRACE(i);
- net::TestCompletionCallback test_completion_callback;
- int status = fake_ssl_client_socket.Connect(
- test_completion_callback.callback());
- if (mode == net::ASYNC) {
- EXPECT_FALSE(fake_ssl_client_socket.IsConnected());
- }
- ExpectStatus(mode, net::OK, status, &test_completion_callback);
- if (fake_ssl_client_socket.IsConnected()) {
- int read_len = arraysize(kReadTestData);
- int read_buf_len = 2 * read_len;
- scoped_refptr<net::IOBuffer> read_buf(
- new net::IOBuffer(read_buf_len));
- int read_status = fake_ssl_client_socket.Read(
- read_buf, read_buf_len, test_completion_callback.callback());
- ExpectStatus(mode, read_len, read_status, &test_completion_callback);
-
- scoped_refptr<net::IOBuffer> write_buf(
- new net::StringIOBuffer(kWriteTestData));
- int write_status = fake_ssl_client_socket.Write(
- write_buf, arraysize(kWriteTestData),
- test_completion_callback.callback());
- ExpectStatus(mode, arraysize(kWriteTestData), write_status,
- &test_completion_callback);
- } else {
- ADD_FAILURE();
- }
- fake_ssl_client_socket.Disconnect();
- EXPECT_FALSE(fake_ssl_client_socket.IsConnected());
- }
- }
-
- // Sets up the mock socket to generate an unsuccessful handshake
- // FakeSSLClientSocket fails as expected.
- void RunUnsuccessfulHandshakeTestHelper(
- net::IoMode mode, int error, HandshakeErrorLocation location) {
- DCHECK_NE(error, net::OK);
- base::StringPiece ssl_client_hello =
- FakeSSLClientSocket::GetSslClientHello();
- base::StringPiece ssl_server_hello =
- FakeSSLClientSocket::GetSslServerHello();
-
- net::MockConnect mock_connect(mode, net::OK);
- std::vector<net::MockRead> reads;
- std::vector<net::MockWrite> writes;
- const size_t kChunkSize = 1;
- AddChunkedOps(ssl_server_hello, kChunkSize, mode, &reads);
- AddChunkedOps(ssl_client_hello, kChunkSize, mode, &writes);
- switch (location) {
- case CONNECT_ERROR:
- mock_connect.result = error;
- writes.clear();
- reads.clear();
- break;
- case SEND_CLIENT_HELLO_ERROR: {
- // Use a fixed index for repeatability.
- size_t index = 100 % writes.size();
- writes[index].result = error;
- writes[index].data = NULL;
- writes[index].data_len = 0;
- writes.resize(index + 1);
- reads.clear();
- break;
- }
- case VERIFY_SERVER_HELLO_ERROR: {
- // Use a fixed index for repeatability.
- size_t index = 50 % reads.size();
- if (error == ERR_MALFORMED_SERVER_HELLO) {
- static const char kBadData[] = "BAD_DATA";
- reads[index].data = kBadData;
- reads[index].data_len = arraysize(kBadData);
- } else {
- reads[index].result = error;
- reads[index].data = NULL;
- reads[index].data_len = 0;
- }
- reads.resize(index + 1);
- if (error ==
- net::ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ) {
- static const char kDummyData[] = "DUMMY";
- reads.push_back(net::MockRead(mode, kDummyData));
- }
- break;
- }
- }
- SetData(mock_connect, &reads, &writes);
-
- FakeSSLClientSocket fake_ssl_client_socket(MakeClientSocket());
-
- // The two errors below are interpreted by FakeSSLClientSocket as
- // an unexpected event.
- int expected_status =
- ((error == net::ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ) ||
- (error == ERR_MALFORMED_SERVER_HELLO)) ?
- net::ERR_UNEXPECTED : error;
-
- net::TestCompletionCallback test_completion_callback;
- int status = fake_ssl_client_socket.Connect(
- test_completion_callback.callback());
- EXPECT_FALSE(fake_ssl_client_socket.IsConnected());
- ExpectStatus(mode, expected_status, status, &test_completion_callback);
- EXPECT_FALSE(fake_ssl_client_socket.IsConnected());
- }
-
- void RunUnsuccessfulHandshakeTest(
- int error, HandshakeErrorLocation location) {
- RunUnsuccessfulHandshakeTestHelper(net::SYNCHRONOUS, error, location);
- RunUnsuccessfulHandshakeTestHelper(net::ASYNC, error, location);
- }
-
- // MockTCPClientSocket needs a message loop.
- MessageLoop message_loop_;
-
- net::MockClientSocketFactory mock_client_socket_factory_;
- scoped_ptr<net::StaticSocketDataProvider> static_socket_data_provider_;
-};
-
-TEST_F(FakeSSLClientSocketTest, PassThroughMethods) {
- MockClientSocket* mock_client_socket = new MockClientSocket();
- const int kReceiveBufferSize = 10;
- const int kSendBufferSize = 20;
- net::IPEndPoint ip_endpoint(net::IPAddressNumber(net::kIPv4AddressSize), 80);
- const int kPeerAddress = 30;
- net::BoundNetLog net_log;
- EXPECT_CALL(*mock_client_socket, SetReceiveBufferSize(kReceiveBufferSize));
- EXPECT_CALL(*mock_client_socket, SetSendBufferSize(kSendBufferSize));
- EXPECT_CALL(*mock_client_socket, GetPeerAddress(&ip_endpoint)).
- WillOnce(Return(kPeerAddress));
- EXPECT_CALL(*mock_client_socket, NetLog()).WillOnce(ReturnRef(net_log));
- EXPECT_CALL(*mock_client_socket, SetSubresourceSpeculation());
- EXPECT_CALL(*mock_client_socket, SetOmniboxSpeculation());
-
- // Takes ownership of |mock_client_socket|.
- FakeSSLClientSocket fake_ssl_client_socket(mock_client_socket);
- fake_ssl_client_socket.SetReceiveBufferSize(kReceiveBufferSize);
- fake_ssl_client_socket.SetSendBufferSize(kSendBufferSize);
- EXPECT_EQ(kPeerAddress,
- fake_ssl_client_socket.GetPeerAddress(&ip_endpoint));
- EXPECT_EQ(&net_log, &fake_ssl_client_socket.NetLog());
- fake_ssl_client_socket.SetSubresourceSpeculation();
- fake_ssl_client_socket.SetOmniboxSpeculation();
-}
-
-TEST_F(FakeSSLClientSocketTest, SuccessfulHandshakeSync) {
- for (size_t i = 1; i < 100; i += 3) {
- SCOPED_TRACE(i);
- for (size_t j = 1; j < 100; j += 5) {
- SCOPED_TRACE(j);
- RunSuccessfulHandshakeTest(net::SYNCHRONOUS, i, j, 0);
- }
- }
-}
-
-TEST_F(FakeSSLClientSocketTest, SuccessfulHandshakeAsync) {
- for (size_t i = 1; i < 100; i += 7) {
- SCOPED_TRACE(i);
- for (size_t j = 1; j < 100; j += 9) {
- SCOPED_TRACE(j);
- RunSuccessfulHandshakeTest(net::ASYNC, i, j, 0);
- }
- }
-}
-
-TEST_F(FakeSSLClientSocketTest, ResetSocket) {
- RunSuccessfulHandshakeTest(net::ASYNC, 1, 2, 3);
-}
-
-TEST_F(FakeSSLClientSocketTest, UnsuccessfulHandshakeConnectError) {
- RunUnsuccessfulHandshakeTest(net::ERR_ACCESS_DENIED, CONNECT_ERROR);
-}
-
-TEST_F(FakeSSLClientSocketTest, UnsuccessfulHandshakeWriteError) {
- RunUnsuccessfulHandshakeTest(net::ERR_OUT_OF_MEMORY,
- SEND_CLIENT_HELLO_ERROR);
-}
-
-TEST_F(FakeSSLClientSocketTest, UnsuccessfulHandshakeReadError) {
- RunUnsuccessfulHandshakeTest(net::ERR_CONNECTION_CLOSED,
- VERIFY_SERVER_HELLO_ERROR);
-}
-
-TEST_F(FakeSSLClientSocketTest, PeerClosedDuringHandshake) {
- RunUnsuccessfulHandshakeTest(
- net::ERR_TEST_PEER_CLOSE_AFTER_NEXT_MOCK_READ,
- VERIFY_SERVER_HELLO_ERROR);
-}
-
-TEST_F(FakeSSLClientSocketTest, MalformedServerHello) {
- RunUnsuccessfulHandshakeTest(ERR_MALFORMED_SERVER_HELLO,
- VERIFY_SERVER_HELLO_ERROR);
-}
-
-} // namespace
-
-} // namespace notifier
« no previous file with comments | « jingle/notifier/base/fake_ssl_client_socket.cc ('k') | jingle/notifier/base/proxy_resolving_client_socket.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698