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

Side by Side Diff: net/socket/tcp_client_socket_unittest.cc

Issue 1696005: Add net log entries that summarize transmit and receive byte counts. (Closed)
Patch Set: More tests and address comments Created 10 years, 8 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 unified diff | Download patch
« no previous file with comments | « net/socket/tcp_client_socket_pool_unittest.cc ('k') | net/socket/tcp_client_socket_win.h » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
1 // Copyright (c) 2006-2009 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2010 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "net/socket/tcp_client_socket.h" 5 #include "net/socket/tcp_client_socket.h"
6 6
7 #include "base/basictypes.h" 7 #include "base/basictypes.h"
8 #include "net/base/address_list.h" 8 #include "net/base/address_list.h"
9 #include "net/base/host_resolver.h" 9 #include "net/base/host_resolver.h"
10 #include "net/base/io_buffer.h" 10 #include "net/base/io_buffer.h"
11 #include "net/base/listen_socket.h" 11 #include "net/base/listen_socket.h"
12 #include "net/base/net_log.h" 12 #include "net/base/net_log.h"
13 #include "net/base/net_log_unittest.h" 13 #include "net/base/net_log_unittest.h"
14 #include "net/base/net_errors.h" 14 #include "net/base/net_errors.h"
15 #include "net/base/test_completion_callback.h" 15 #include "net/base/test_completion_callback.h"
16 #include "net/base/winsock_init.h" 16 #include "net/base/winsock_init.h"
17 #include "testing/gtest/include/gtest/gtest.h" 17 #include "testing/gtest/include/gtest/gtest.h"
18 #include "testing/platform_test.h" 18 #include "testing/platform_test.h"
19 19
20 namespace net { 20 namespace net {
21 21
22 namespace { 22 namespace {
23 23
24 const char kServerReply[] = "HTTP/1.1 404 Not Found"; 24 const char kServerReply[] = "HTTP/1.1 404 Not Found";
25 25
26 class TCPClientSocketTest 26 class TCPClientSocketTest
27 : public PlatformTest, public ListenSocket::ListenSocketDelegate { 27 : public PlatformTest, public ListenSocket::ListenSocketDelegate {
28 public: 28 public:
29 TCPClientSocketTest() { 29 TCPClientSocketTest() : net_log_(CapturingNetLog::kUnbounded) {
30 } 30 }
31 31
32 // Implement ListenSocketDelegate methods 32 // Implement ListenSocketDelegate methods
33 virtual void DidAccept(ListenSocket* server, ListenSocket* connection) { 33 virtual void DidAccept(ListenSocket* server, ListenSocket* connection) {
34 connected_sock_ = connection; 34 connected_sock_ = connection;
35 } 35 }
36 virtual void DidRead(ListenSocket*, const std::string& s) { 36 virtual void DidRead(ListenSocket*, const std::string& s) {
37 // TODO(dkegel): this might not be long enough to tickle some bugs. 37 // TODO(dkegel): this might not be long enough to tickle some bugs.
38 connected_sock_->Send(kServerReply, 38 connected_sock_->Send(kServerReply,
39 arraysize(kServerReply) - 1, 39 arraysize(kServerReply) - 1,
(...skipping 12 matching lines...) Expand all
52 void PauseServerReads() { 52 void PauseServerReads() {
53 connected_sock_->PauseReads(); 53 connected_sock_->PauseReads();
54 } 54 }
55 55
56 void ResumeServerReads() { 56 void ResumeServerReads() {
57 connected_sock_->ResumeReads(); 57 connected_sock_->ResumeReads();
58 } 58 }
59 59
60 protected: 60 protected:
61 int listen_port_; 61 int listen_port_;
62 CapturingNetLog net_log_;
62 scoped_ptr<TCPClientSocket> sock_; 63 scoped_ptr<TCPClientSocket> sock_;
63 64
64 private: 65 private:
65 scoped_refptr<ListenSocket> listen_sock_; 66 scoped_refptr<ListenSocket> listen_sock_;
66 scoped_refptr<ListenSocket> connected_sock_; 67 scoped_refptr<ListenSocket> connected_sock_;
67 }; 68 };
68 69
69 void TCPClientSocketTest::SetUp() { 70 void TCPClientSocketTest::SetUp() {
70 PlatformTest::SetUp(); 71 PlatformTest::SetUp();
71 72
(...skipping 13 matching lines...) Expand all
85 } 86 }
86 ASSERT_TRUE(sock != NULL); 87 ASSERT_TRUE(sock != NULL);
87 listen_sock_ = sock; 88 listen_sock_ = sock;
88 listen_port_ = port; 89 listen_port_ = port;
89 90
90 AddressList addr; 91 AddressList addr;
91 scoped_refptr<HostResolver> resolver(CreateSystemHostResolver(NULL)); 92 scoped_refptr<HostResolver> resolver(CreateSystemHostResolver(NULL));
92 HostResolver::RequestInfo info("localhost", listen_port_); 93 HostResolver::RequestInfo info("localhost", listen_port_);
93 int rv = resolver->Resolve(info, &addr, NULL, NULL, NULL); 94 int rv = resolver->Resolve(info, &addr, NULL, NULL, NULL);
94 CHECK_EQ(rv, OK); 95 CHECK_EQ(rv, OK);
95 sock_.reset(new TCPClientSocket(addr)); 96 sock_.reset(new TCPClientSocket(addr, &net_log_));
96 } 97 }
97 98
98 TEST_F(TCPClientSocketTest, Connect) { 99 TEST_F(TCPClientSocketTest, Connect) {
99 TestCompletionCallback callback; 100 TestCompletionCallback callback;
100 EXPECT_FALSE(sock_->IsConnected()); 101 EXPECT_FALSE(sock_->IsConnected());
101 102
102 CapturingBoundNetLog log(CapturingNetLog::kUnbounded); 103 int rv = sock_->Connect(&callback);
103 int rv = sock_->Connect(&callback, log.bound());
104 EXPECT_TRUE(net::LogContainsBeginEvent( 104 EXPECT_TRUE(net::LogContainsBeginEvent(
105 log.entries(), 0, net::NetLog::TYPE_TCP_CONNECT)); 105 net_log_.entries(), 0, net::NetLog::TYPE_TCP_CONNECT));
106 if (rv != OK) { 106 if (rv != OK) {
107 ASSERT_EQ(rv, ERR_IO_PENDING); 107 ASSERT_EQ(rv, ERR_IO_PENDING);
108 EXPECT_FALSE(net::LogContainsEndEvent( 108 EXPECT_FALSE(net::LogContainsEndEvent(
109 log.entries(), -1, net::NetLog::TYPE_TCP_CONNECT)); 109 net_log_.entries(), -1, net::NetLog::TYPE_TCP_CONNECT));
110 110
111 rv = callback.WaitForResult(); 111 rv = callback.WaitForResult();
112 EXPECT_EQ(rv, OK); 112 EXPECT_EQ(rv, OK);
113 } 113 }
114 114
115 EXPECT_TRUE(sock_->IsConnected()); 115 EXPECT_TRUE(sock_->IsConnected());
116 EXPECT_TRUE(net::LogContainsEndEvent( 116 EXPECT_TRUE(net::LogContainsEndEvent(
117 log.entries(), -1, net::NetLog::TYPE_TCP_CONNECT)); 117 net_log_.entries(), -1, net::NetLog::TYPE_TCP_CONNECT));
118 118
119 sock_->Disconnect(); 119 sock_->Disconnect();
120 EXPECT_FALSE(sock_->IsConnected()); 120 EXPECT_FALSE(sock_->IsConnected());
121 } 121 }
122 122
123 // TODO(wtc): Add unit tests for IsConnectedAndIdle: 123 // TODO(wtc): Add unit tests for IsConnectedAndIdle:
124 // - Server closes a connection. 124 // - Server closes a connection.
125 // - Server sends data unexpectedly. 125 // - Server sends data unexpectedly.
126 126
127 TEST_F(TCPClientSocketTest, Read) { 127 TEST_F(TCPClientSocketTest, Read) {
128 TestCompletionCallback callback; 128 TestCompletionCallback callback;
129 int rv = sock_->Connect(&callback, NULL); 129 int rv = sock_->Connect(&callback);
130 if (rv != OK) { 130 if (rv != OK) {
131 ASSERT_EQ(rv, ERR_IO_PENDING); 131 ASSERT_EQ(rv, ERR_IO_PENDING);
132 132
133 rv = callback.WaitForResult(); 133 rv = callback.WaitForResult();
134 EXPECT_EQ(rv, OK); 134 EXPECT_EQ(rv, OK);
135 } 135 }
136 136
137 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 137 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
138 scoped_refptr<IOBuffer> request_buffer = 138 scoped_refptr<IOBuffer> request_buffer =
139 new IOBuffer(arraysize(request_text) - 1); 139 new IOBuffer(arraysize(request_text) - 1);
(...skipping 24 matching lines...) Expand all
164 // then close the server socket, and note the close. 164 // then close the server socket, and note the close.
165 165
166 rv = sock_->Read(buf, 4096, &callback); 166 rv = sock_->Read(buf, 4096, &callback);
167 ASSERT_EQ(ERR_IO_PENDING, rv); 167 ASSERT_EQ(ERR_IO_PENDING, rv);
168 CloseServerSocket(); 168 CloseServerSocket();
169 EXPECT_EQ(0, callback.WaitForResult()); 169 EXPECT_EQ(0, callback.WaitForResult());
170 } 170 }
171 171
172 TEST_F(TCPClientSocketTest, Read_SmallChunks) { 172 TEST_F(TCPClientSocketTest, Read_SmallChunks) {
173 TestCompletionCallback callback; 173 TestCompletionCallback callback;
174 int rv = sock_->Connect(&callback, NULL); 174 int rv = sock_->Connect(&callback);
175 if (rv != OK) { 175 if (rv != OK) {
176 ASSERT_EQ(rv, ERR_IO_PENDING); 176 ASSERT_EQ(rv, ERR_IO_PENDING);
177 177
178 rv = callback.WaitForResult(); 178 rv = callback.WaitForResult();
179 EXPECT_EQ(rv, OK); 179 EXPECT_EQ(rv, OK);
180 } 180 }
181 181
182 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 182 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
183 scoped_refptr<IOBuffer> request_buffer = 183 scoped_refptr<IOBuffer> request_buffer =
184 new IOBuffer(arraysize(request_text) - 1); 184 new IOBuffer(arraysize(request_text) - 1);
(...skipping 24 matching lines...) Expand all
209 // then close the server socket, and note the close. 209 // then close the server socket, and note the close.
210 210
211 rv = sock_->Read(buf, 1, &callback); 211 rv = sock_->Read(buf, 1, &callback);
212 ASSERT_EQ(ERR_IO_PENDING, rv); 212 ASSERT_EQ(ERR_IO_PENDING, rv);
213 CloseServerSocket(); 213 CloseServerSocket();
214 EXPECT_EQ(0, callback.WaitForResult()); 214 EXPECT_EQ(0, callback.WaitForResult());
215 } 215 }
216 216
217 TEST_F(TCPClientSocketTest, Read_Interrupted) { 217 TEST_F(TCPClientSocketTest, Read_Interrupted) {
218 TestCompletionCallback callback; 218 TestCompletionCallback callback;
219 int rv = sock_->Connect(&callback, NULL); 219 int rv = sock_->Connect(&callback);
220 if (rv != OK) { 220 if (rv != OK) {
221 ASSERT_EQ(ERR_IO_PENDING, rv); 221 ASSERT_EQ(ERR_IO_PENDING, rv);
222 222
223 rv = callback.WaitForResult(); 223 rv = callback.WaitForResult();
224 EXPECT_EQ(rv, OK); 224 EXPECT_EQ(rv, OK);
225 } 225 }
226 226
227 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 227 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
228 scoped_refptr<IOBuffer> request_buffer = 228 scoped_refptr<IOBuffer> request_buffer =
229 new IOBuffer(arraysize(request_text) - 1); 229 new IOBuffer(arraysize(request_text) - 1);
(...skipping 13 matching lines...) Expand all
243 EXPECT_TRUE(rv >= 0 || rv == ERR_IO_PENDING); 243 EXPECT_TRUE(rv >= 0 || rv == ERR_IO_PENDING);
244 244
245 if (rv == ERR_IO_PENDING) 245 if (rv == ERR_IO_PENDING)
246 rv = callback.WaitForResult(); 246 rv = callback.WaitForResult();
247 247
248 EXPECT_NE(0, rv); 248 EXPECT_NE(0, rv);
249 } 249 }
250 250
251 TEST_F(TCPClientSocketTest, DISABLED_FullDuplex_ReadFirst) { 251 TEST_F(TCPClientSocketTest, DISABLED_FullDuplex_ReadFirst) {
252 TestCompletionCallback callback; 252 TestCompletionCallback callback;
253 int rv = sock_->Connect(&callback, NULL); 253 int rv = sock_->Connect(&callback);
254 if (rv != OK) { 254 if (rv != OK) {
255 ASSERT_EQ(rv, ERR_IO_PENDING); 255 ASSERT_EQ(rv, ERR_IO_PENDING);
256 256
257 rv = callback.WaitForResult(); 257 rv = callback.WaitForResult();
258 EXPECT_EQ(rv, OK); 258 EXPECT_EQ(rv, OK);
259 } 259 }
260 260
261 // Read first. There's no data, so it should return ERR_IO_PENDING. 261 // Read first. There's no data, so it should return ERR_IO_PENDING.
262 const int kBufLen = 4096; 262 const int kBufLen = 4096;
263 scoped_refptr<IOBuffer> buf = new IOBuffer(kBufLen); 263 scoped_refptr<IOBuffer> buf = new IOBuffer(kBufLen);
(...skipping 21 matching lines...) Expand all
285 // At this point, both read and write have returned ERR_IO_PENDING, and the 285 // At this point, both read and write have returned ERR_IO_PENDING, and the
286 // write callback has executed. We wait for the read callback to run now to 286 // write callback has executed. We wait for the read callback to run now to
287 // make sure that the socket can handle full duplex communications. 287 // make sure that the socket can handle full duplex communications.
288 288
289 rv = callback.WaitForResult(); 289 rv = callback.WaitForResult();
290 EXPECT_GE(rv, 0); 290 EXPECT_GE(rv, 0);
291 } 291 }
292 292
293 TEST_F(TCPClientSocketTest, DISABLED_FullDuplex_WriteFirst) { 293 TEST_F(TCPClientSocketTest, DISABLED_FullDuplex_WriteFirst) {
294 TestCompletionCallback callback; 294 TestCompletionCallback callback;
295 int rv = sock_->Connect(&callback, NULL); 295 int rv = sock_->Connect(&callback);
296 if (rv != OK) { 296 if (rv != OK) {
297 ASSERT_EQ(ERR_IO_PENDING, rv); 297 ASSERT_EQ(ERR_IO_PENDING, rv);
298 298
299 rv = callback.WaitForResult(); 299 rv = callback.WaitForResult();
300 EXPECT_EQ(OK, rv); 300 EXPECT_EQ(OK, rv);
301 } 301 }
302 302
303 PauseServerReads(); 303 PauseServerReads();
304 const int kWriteBufLen = 64 * 1024; 304 const int kWriteBufLen = 64 * 1024;
305 scoped_refptr<IOBuffer> request_buffer = new IOBuffer(kWriteBufLen); 305 scoped_refptr<IOBuffer> request_buffer = new IOBuffer(kWriteBufLen);
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
339 // Close the server socket, so there will at least be a 0-byte read. 339 // Close the server socket, so there will at least be a 0-byte read.
340 CloseServerSocket(); 340 CloseServerSocket();
341 341
342 rv = callback.WaitForResult(); 342 rv = callback.WaitForResult();
343 EXPECT_GE(rv, 0); 343 EXPECT_GE(rv, 0);
344 } 344 }
345 345
346 } // namespace 346 } // namespace
347 347
348 } // namespace net 348 } // namespace net
OLDNEW
« no previous file with comments | « net/socket/tcp_client_socket_pool_unittest.cc ('k') | net/socket/tcp_client_socket_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698