| Index: net/socket/socks5_client_socket_unittest.cc
|
| ===================================================================
|
| --- net/socket/socks5_client_socket_unittest.cc (revision 34990)
|
| +++ net/socket/socks5_client_socket_unittest.cc (working copy)
|
| @@ -4,6 +4,7 @@
|
|
|
| #include "net/socket/socks5_client_socket.h"
|
|
|
| +#include <algorithm>
|
| #include <map>
|
|
|
| #include "net/base/address_list.h"
|
| @@ -153,9 +154,8 @@
|
| EXPECT_FALSE(user_sock_->IsConnected());
|
| }
|
|
|
| -// Connect to a domain, making sure to defer the host resolving to the proxy
|
| -// server.
|
| -TEST_F(SOCKS5ClientSocketTest, ResolveHostsProxySide) {
|
| +// Test that you can call Connect() again after having called Disconnect().
|
| +TEST_F(SOCKS5ClientSocketTest, ConnectAndDisconnectTwice) {
|
| const std::string hostname = "my-host-name";
|
| const char kSOCKS5DomainRequest[] = {
|
| 0x05, // VER
|
| @@ -164,28 +164,51 @@
|
| 0x03, // ATYPE
|
| };
|
|
|
| - std::string request(kSOCKS5DomainRequest,
|
| - arraysize(kSOCKS5DomainRequest));
|
| + std::string request(kSOCKS5DomainRequest, arraysize(kSOCKS5DomainRequest));
|
| request.push_back(hostname.size());
|
| request.append(hostname);
|
| request.append(reinterpret_cast<const char*>(&kNwPort), sizeof(kNwPort));
|
|
|
| - MockWrite data_writes[] = {
|
| - MockWrite(false, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)),
|
| - MockWrite(false, request.data(), request.size())
|
| - };
|
| - MockRead data_reads[] = {
|
| - MockRead(false, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)),
|
| - MockRead(false, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse))
|
| - };
|
| + for (int i = 0; i < 2; ++i) {
|
| + MockWrite data_writes[] = {
|
| + MockWrite(false, kSOCKS5GreetRequest, arraysize(kSOCKS5GreetRequest)),
|
| + MockWrite(false, request.data(), request.size())
|
| + };
|
| + MockRead data_reads[] = {
|
| + MockRead(false, kSOCKS5GreetResponse, arraysize(kSOCKS5GreetResponse)),
|
| + MockRead(false, kSOCKS5OkResponse, arraysize(kSOCKS5OkResponse))
|
| + };
|
|
|
| - user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80));
|
| + user_sock_.reset(BuildMockSocket(data_reads, data_writes, hostname, 80));
|
|
|
| - int rv = user_sock_->Connect(&callback_, NULL);
|
| - EXPECT_EQ(OK, rv);
|
| - EXPECT_TRUE(user_sock_->IsConnected());
|
| + int rv = user_sock_->Connect(&callback_, NULL);
|
| + EXPECT_EQ(OK, rv);
|
| + EXPECT_TRUE(user_sock_->IsConnected());
|
| +
|
| + user_sock_->Disconnect();
|
| + EXPECT_FALSE(user_sock_->IsConnected());
|
| + }
|
| }
|
|
|
| +// Test that we fail trying to connect to a hosname longer than 255 bytes.
|
| +TEST_F(SOCKS5ClientSocketTest, LargeHostNameFails) {
|
| + // Create a string of length 256, where each character is 'x'.
|
| + std::string large_host_name;
|
| + std::fill_n(std::back_inserter(large_host_name), 256, 'x');
|
| +
|
| + // Create a SOCKS socket, with mock transport socket.
|
| + MockWrite data_writes[] = {MockWrite()};
|
| + MockRead data_reads[] = {MockRead()};
|
| + user_sock_.reset(BuildMockSocket(data_reads, data_writes,
|
| + large_host_name, 80));
|
| +
|
| + // Try to connect -- should fail (without having read/written anything to
|
| + // the transport socket first) because the hostname is too long.
|
| + TestCompletionCallback callback;
|
| + int rv = user_sock_->Connect(&callback, NULL);
|
| + EXPECT_EQ(ERR_INVALID_URL, rv);
|
| +}
|
| +
|
| TEST_F(SOCKS5ClientSocketTest, PartialReadWrites) {
|
| const std::string hostname = "www.google.com";
|
|
|
|
|