Index: net/socket/socket_test_util.h |
diff --git a/net/socket/socket_test_util.h b/net/socket/socket_test_util.h |
index 171e3c3d2e536d4cbc3878e9c57d2de837c7d72a..70876400d4a26eaec2cbcbb84422ac1bd5b0d211 100644 |
--- a/net/socket/socket_test_util.h |
+++ b/net/socket/socket_test_util.h |
@@ -72,48 +72,65 @@ struct MockConnect { |
IPEndPoint peer_addr; |
}; |
-struct MockRead { |
+// MockRead and MockWrite shares the same interface and members, but we'd like |
+// to have distinct types because we don't want to have them used |
+// interchangably. To do this, a struct template is defined, and MockRead and |
+// MockWrite are instantiated by using this template. Template parameter |type| |
+// is not used in the struct definition (it purely exists for creating a new |
+// type). |
+// |
+// |data| in MockRead and MockWrite has different meanings: |data| in MockRead |
+// is the data returned from the socket when MockTCPClientSocket::Read() is |
+// attempted, while |data| in MockWrite is the expected data that should be |
+// given in MockTCPClientSocket::Write(). |
+enum MockReadWriteType { |
+ MOCK_READ, |
+ MOCK_WRITE |
+}; |
+ |
+template <MockReadWriteType type> |
+struct MockReadWrite { |
// Flag to indicate that the message loop should be terminated. |
enum { |
STOPLOOP = 1 << 31 |
}; |
// Default |
- MockRead() : mode(SYNCHRONOUS), result(0), data(NULL), data_len(0), |
+ MockReadWrite() : mode(SYNCHRONOUS), result(0), data(NULL), data_len(0), |
sequence_number(0), time_stamp(base::Time::Now()) {} |
- // Read failure (no data). |
- MockRead(IoMode io_mode, int result) : mode(io_mode), result(result), |
+ // Read/write failure (no data). |
+ MockReadWrite(IoMode io_mode, int result) : mode(io_mode), result(result), |
data(NULL), data_len(0), sequence_number(0), |
time_stamp(base::Time::Now()) { } |
- // Read failure (no data), with sequence information. |
- MockRead(IoMode io_mode, int result, int seq) : mode(io_mode), |
+ // Read/write failure (no data), with sequence information. |
+ MockReadWrite(IoMode io_mode, int result, int seq) : mode(io_mode), |
result(result), data(NULL), data_len(0), sequence_number(seq), |
time_stamp(base::Time::Now()) { } |
- // Asynchronous read success (inferred data length). |
- explicit MockRead(const char* data) : mode(ASYNC), result(0), data(data), |
- data_len(strlen(data)), sequence_number(0), |
+ // Asynchronous read/write success (inferred data length). |
+ explicit MockReadWrite(const char* data) : mode(ASYNC), result(0), |
+ data(data), data_len(strlen(data)), sequence_number(0), |
time_stamp(base::Time::Now()) { } |
- // Read success (inferred data length). |
- MockRead(IoMode io_mode, const char* data) : mode(io_mode), result(0), |
+ // Read/write success (inferred data length). |
+ MockReadWrite(IoMode io_mode, const char* data) : mode(io_mode), result(0), |
data(data), data_len(strlen(data)), sequence_number(0), |
time_stamp(base::Time::Now()) { } |
- // Read success. |
- MockRead(IoMode io_mode, const char* data, int data_len) : mode(io_mode), |
+ // Read/write success. |
+ MockReadWrite(IoMode io_mode, const char* data, int data_len) : mode(io_mode), |
result(0), data(data), data_len(data_len), sequence_number(0), |
time_stamp(base::Time::Now()) { } |
- // Read success (inferred data length) with sequence information. |
- MockRead(IoMode io_mode, int seq, const char* data) : mode(io_mode), |
+ // Read/write success (inferred data length) with sequence information. |
+ MockReadWrite(IoMode io_mode, int seq, const char* data) : mode(io_mode), |
result(0), data(data), data_len(strlen(data)), sequence_number(seq), |
time_stamp(base::Time::Now()) { } |
- // Read success with sequence information. |
- MockRead(IoMode io_mode, const char* data, int data_len, int seq) : |
+ // Read/write success with sequence information. |
+ MockReadWrite(IoMode io_mode, const char* data, int data_len, int seq) : |
mode(io_mode), result(0), data(data), data_len(data_len), |
sequence_number(seq), time_stamp(base::Time::Now()) { } |
@@ -130,11 +147,8 @@ struct MockRead { |
base::Time time_stamp; // The time stamp at which the operation occurred. |
}; |
-// 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; |
+typedef MockReadWrite<MOCK_READ> MockRead; |
+typedef MockReadWrite<MOCK_WRITE> MockWrite; |
struct MockWriteResult { |
MockWriteResult(IoMode io_mode, int result) |
@@ -461,7 +475,7 @@ class DeterministicSocketData |
bool stopped() const { return stopped_; } |
void SetStopped(bool val) { stopped_ = val; } |
MockRead& current_read() { return current_read_; } |
- MockRead& current_write() { return current_write_; } |
+ MockWrite& current_write() { return current_write_; } |
int sequence_number() const { return sequence_number_; } |
void set_socket(base::WeakPtr<DeterministicMockTCPClientSocket> socket) { |
socket_ = socket; |