| Index: net/base/socket_test_util.h
 | 
| ===================================================================
 | 
| --- net/base/socket_test_util.h	(revision 18948)
 | 
| +++ net/base/socket_test_util.h	(working copy)
 | 
| @@ -1,204 +0,0 @@
 | 
| -// Copyright (c) 2009 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.
 | 
| -
 | 
| -#ifndef NET_BASE_SOCKET_TEST_UTIL_H_
 | 
| -#define NET_BASE_SOCKET_TEST_UTIL_H_
 | 
| -
 | 
| -#include <string>
 | 
| -#include <vector>
 | 
| -
 | 
| -#include "base/basictypes.h"
 | 
| -#include "base/logging.h"
 | 
| -#include "net/base/address_list.h"
 | 
| -#include "net/base/client_socket_factory.h"
 | 
| -#include "net/base/net_errors.h"
 | 
| -#include "net/base/ssl_config_service.h"
 | 
| -
 | 
| -namespace net {
 | 
| -
 | 
| -class ClientSocket;
 | 
| -class SSLClientSocket;
 | 
| -
 | 
| -struct MockConnect {
 | 
| -  // Asynchronous connection success.
 | 
| -  MockConnect() : async(true), result(OK) { }
 | 
| -  MockConnect(bool a, int r) : async(a), result(r) { }
 | 
| -
 | 
| -  bool async;
 | 
| -  int result;
 | 
| -};
 | 
| -
 | 
| -struct MockRead {
 | 
| -  // Read failure (no data).
 | 
| -  MockRead(bool async, int result) : async(async) , result(result), data(NULL),
 | 
| -      data_len(0) { }
 | 
| -
 | 
| -  // Asynchronous read success (inferred data length).
 | 
| -  explicit MockRead(const char* data) : async(true),  result(0), data(data),
 | 
| -      data_len(strlen(data)) { }
 | 
| -
 | 
| -  // Read success (inferred data length).
 | 
| -  MockRead(bool async, const char* data) : async(async), result(0), data(data),
 | 
| -      data_len(strlen(data)) { }
 | 
| -
 | 
| -  // Read success.
 | 
| -  MockRead(bool async, const char* data, int data_len) : async(async),
 | 
| -      result(0), data(data), data_len(data_len) { }
 | 
| -
 | 
| -  bool async;
 | 
| -  int result;
 | 
| -  const char* data;
 | 
| -  int data_len;
 | 
| -};
 | 
| -
 | 
| -// MockWrite uses the same member fields as MockRead, but with different
 | 
| -// meanings. The expected input to MockTCPClientSocket::Write() is given
 | 
| -// by {data, data_len}, and the return value of Write() is controlled by
 | 
| -// {async, result}.
 | 
| -typedef MockRead MockWrite;
 | 
| -
 | 
| -struct MockWriteResult {
 | 
| -  MockWriteResult(bool async, int result) : async(async), result(result) {}
 | 
| -
 | 
| -  bool async;
 | 
| -  int result;
 | 
| -};
 | 
| -
 | 
| -class MockSocket {
 | 
| - public:
 | 
| -  MockSocket() : unexpected_read_(true, ERR_UNEXPECTED) {
 | 
| -  }
 | 
| -
 | 
| -  virtual ~MockSocket() {}
 | 
| -  virtual MockRead* GetNextRead() = 0;
 | 
| -  virtual MockWriteResult OnWrite(const std::string& data) = 0;
 | 
| -  virtual void Reset() = 0;
 | 
| -
 | 
| -  MockConnect connect_data() const { return connect_; }
 | 
| -
 | 
| - protected:
 | 
| -  MockRead* unexpected_read() { return &unexpected_read_; }
 | 
| -
 | 
| - private:
 | 
| -  MockRead unexpected_read_;
 | 
| -  MockConnect connect_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(MockSocket);
 | 
| -};
 | 
| -
 | 
| -// MockSocket which responds based on static tables of mock reads and writes.
 | 
| -class StaticMockSocket : public MockSocket {
 | 
| - public:
 | 
| -  StaticMockSocket() : reads_(NULL), read_index_(0),
 | 
| -      writes_(NULL), write_index_(0) {}
 | 
| -  StaticMockSocket(MockRead* r, MockWrite* w) : reads_(r), read_index_(0),
 | 
| -      writes_(w), write_index_(0) {}
 | 
| -
 | 
| -  // MockSocket methods:
 | 
| -  virtual MockRead* GetNextRead();
 | 
| -  virtual MockWriteResult OnWrite(const std::string& data);
 | 
| -  virtual void Reset();
 | 
| -
 | 
| - private:
 | 
| -  MockRead* reads_;
 | 
| -  int read_index_;
 | 
| -  MockWrite* writes_;
 | 
| -  int write_index_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(StaticMockSocket);
 | 
| -};
 | 
| -
 | 
| -// MockSocket which can make decisions about next mock reads based on
 | 
| -// received writes. It can also be used to enforce order of operations,
 | 
| -// for example that tested code must send the "Hello!" message before
 | 
| -// receiving response. This is useful for testing conversation-like
 | 
| -// protocols like FTP.
 | 
| -class DynamicMockSocket : public MockSocket {
 | 
| - public:
 | 
| -  DynamicMockSocket();
 | 
| -
 | 
| -  // MockSocket methods:
 | 
| -  virtual MockRead* GetNextRead();
 | 
| -  virtual MockWriteResult OnWrite(const std::string& data) = 0;
 | 
| -  virtual void Reset();
 | 
| -
 | 
| - protected:
 | 
| -  // The next time there is a read from this socket, it will return |data|.
 | 
| -  // Before calling SimulateRead next time, the previous data must be consumed.
 | 
| -  void SimulateRead(const char* data);
 | 
| -
 | 
| - private:
 | 
| -  MockRead read_;
 | 
| -  bool has_read_;
 | 
| -  bool consumed_read_;
 | 
| -
 | 
| -  DISALLOW_COPY_AND_ASSIGN(DynamicMockSocket);
 | 
| -};
 | 
| -
 | 
| -// MockSSLSockets only need to keep track of the return code from calls to
 | 
| -// Connect().
 | 
| -struct  MockSSLSocket {
 | 
| -  MockSSLSocket(bool async, int result) : connect(async, result) { }
 | 
| -
 | 
| -  MockConnect connect;
 | 
| -};
 | 
| -
 | 
| -// Holds an array of Mock{SSL,}Socket elements.  As Mock{TCP,SSL}ClientSocket
 | 
| -// objects get instantiated, they take their data from the i'th element of this
 | 
| -// array.
 | 
| -template<typename T>
 | 
| -class MockSocketArray {
 | 
| - public:
 | 
| -  MockSocketArray() : next_index_(0) {
 | 
| -  }
 | 
| -
 | 
| -  T* GetNext() {
 | 
| -    DCHECK(next_index_ < sockets_.size());
 | 
| -    return sockets_[next_index_++];
 | 
| -  }
 | 
| -
 | 
| -  void Add(T* socket) {
 | 
| -    DCHECK(socket);
 | 
| -    sockets_.push_back(socket);
 | 
| -  }
 | 
| -
 | 
| -  void ResetNextIndex() {
 | 
| -    next_index_ = 0;
 | 
| -  }
 | 
| -
 | 
| - private:
 | 
| -  // Index of the next |sockets| element to use. Not an iterator because those
 | 
| -  // are invalidated on vector reallocation.
 | 
| -  size_t next_index_;
 | 
| -
 | 
| -  // Mock sockets to be returned.
 | 
| -  std::vector<T*> sockets_;
 | 
| -};
 | 
| -
 | 
| -// ClientSocketFactory which contains arrays of sockets of each type.
 | 
| -// You should first fill the arrays using AddMock{SSL,}Socket. When the factory
 | 
| -// is asked to create a socket, it takes next entry from appropriate array.
 | 
| -// You can use ResetNextMockIndexes to reset that next entry index for all mock
 | 
| -// socket types.
 | 
| -class MockClientSocketFactory : public ClientSocketFactory {
 | 
| - public:
 | 
| -  void AddMockSocket(MockSocket* socket);
 | 
| -  void AddMockSSLSocket(MockSSLSocket* socket);
 | 
| -  void ResetNextMockIndexes();
 | 
| -
 | 
| -  // ClientSocketFactory
 | 
| -  virtual ClientSocket* CreateTCPClientSocket(const AddressList& addresses);
 | 
| -  virtual SSLClientSocket* CreateSSLClientSocket(
 | 
| -      ClientSocket* transport_socket,
 | 
| -      const std::string& hostname,
 | 
| -      const SSLConfig& ssl_config);
 | 
| -
 | 
| - private:
 | 
| -  MockSocketArray<MockSocket> mock_sockets_;
 | 
| -  MockSocketArray<MockSSLSocket> mock_ssl_sockets_;
 | 
| -};
 | 
| -
 | 
| -}  // namespace net
 | 
| -
 | 
| -#endif  // NET_BASE_SOCKET_TEST_UTIL_H_
 | 
| 
 |