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

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

Issue 87073: Extend the use of IOBuffers to the code underneath... (Closed) Base URL: svn://chrome-svn/chrome/trunk/src/
Patch Set: '' Created 11 years, 7 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 | Annotate | Revision Log
« no previous file with comments | « net/base/tcp_client_socket_libevent.cc ('k') | net/base/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) 2006-2009 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/base/address_list.h" 5 #include "net/base/address_list.h"
6 #include "net/base/host_resolver.h" 6 #include "net/base/host_resolver.h"
7 #include "net/base/listen_socket.h" 7 #include "net/base/listen_socket.h"
8 #include "net/base/net_errors.h" 8 #include "net/base/net_errors.h"
9 #include "net/base/tcp_client_socket.h" 9 #include "net/base/tcp_client_socket.h"
10 #include "net/base/test_completion_callback.h" 10 #include "net/base/test_completion_callback.h"
(...skipping 85 matching lines...) Expand 10 before | Expand all | Expand 10 after
96 TestCompletionCallback callback; 96 TestCompletionCallback callback;
97 int rv = sock_->Connect(&callback); 97 int rv = sock_->Connect(&callback);
98 if (rv != net::OK) { 98 if (rv != net::OK) {
99 ASSERT_EQ(rv, net::ERR_IO_PENDING); 99 ASSERT_EQ(rv, net::ERR_IO_PENDING);
100 100
101 rv = callback.WaitForResult(); 101 rv = callback.WaitForResult();
102 EXPECT_EQ(rv, net::OK); 102 EXPECT_EQ(rv, net::OK);
103 } 103 }
104 104
105 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 105 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
106 rv = sock_->Write(request_text, arraysize(request_text) - 1, &callback); 106 scoped_refptr<net::IOBuffer> request_buffer =
107 new net::IOBuffer(arraysize(request_text) - 1);
108 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1);
109
110 rv = sock_->Write(request_buffer, arraysize(request_text) - 1, &callback);
107 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 111 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
108 112
109 if (rv == net::ERR_IO_PENDING) { 113 if (rv == net::ERR_IO_PENDING) {
110 rv = callback.WaitForResult(); 114 rv = callback.WaitForResult();
111 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1)); 115 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1));
112 } 116 }
113 117
114 char buf[4096]; 118 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(4096);
115 for (;;) { 119 for (;;) {
116 rv = sock_->Read(buf, sizeof(buf), &callback); 120 rv = sock_->Read(buf, 4096, &callback);
117 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 121 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
118 122
119 if (rv == net::ERR_IO_PENDING) 123 if (rv == net::ERR_IO_PENDING)
120 rv = callback.WaitForResult(); 124 rv = callback.WaitForResult();
121 125
122 EXPECT_GE(rv, 0); 126 EXPECT_GE(rv, 0);
123 if (rv <= 0) 127 if (rv <= 0)
124 break; 128 break;
125 } 129 }
126 } 130 }
127 131
128 TEST_F(TCPClientSocketTest, Read_SmallChunks) { 132 TEST_F(TCPClientSocketTest, Read_SmallChunks) {
129 TestCompletionCallback callback; 133 TestCompletionCallback callback;
130 int rv = sock_->Connect(&callback); 134 int rv = sock_->Connect(&callback);
131 if (rv != net::OK) { 135 if (rv != net::OK) {
132 ASSERT_EQ(rv, net::ERR_IO_PENDING); 136 ASSERT_EQ(rv, net::ERR_IO_PENDING);
133 137
134 rv = callback.WaitForResult(); 138 rv = callback.WaitForResult();
135 EXPECT_EQ(rv, net::OK); 139 EXPECT_EQ(rv, net::OK);
136 } 140 }
137 141
138 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 142 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
139 rv = sock_->Write(request_text, arraysize(request_text) - 1, &callback); 143 scoped_refptr<net::IOBuffer> request_buffer =
144 new net::IOBuffer(arraysize(request_text) - 1);
145 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1);
146
147 rv = sock_->Write(request_buffer, arraysize(request_text) - 1, &callback);
140 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 148 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
141 149
142 if (rv == net::ERR_IO_PENDING) { 150 if (rv == net::ERR_IO_PENDING) {
143 rv = callback.WaitForResult(); 151 rv = callback.WaitForResult();
144 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1)); 152 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1));
145 } 153 }
146 154
147 char buf[1]; 155 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(1);
148 for (;;) { 156 for (;;) {
149 rv = sock_->Read(buf, sizeof(buf), &callback); 157 rv = sock_->Read(buf, 1, &callback);
150 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 158 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
151 159
152 if (rv == net::ERR_IO_PENDING) 160 if (rv == net::ERR_IO_PENDING)
153 rv = callback.WaitForResult(); 161 rv = callback.WaitForResult();
154 162
155 EXPECT_GE(rv, 0); 163 EXPECT_GE(rv, 0);
156 if (rv <= 0) 164 if (rv <= 0)
157 break; 165 break;
158 } 166 }
159 } 167 }
160 168
161 TEST_F(TCPClientSocketTest, Read_Interrupted) { 169 TEST_F(TCPClientSocketTest, Read_Interrupted) {
162 TestCompletionCallback callback; 170 TestCompletionCallback callback;
163 int rv = sock_->Connect(&callback); 171 int rv = sock_->Connect(&callback);
164 if (rv != net::OK) { 172 if (rv != net::OK) {
165 ASSERT_EQ(rv, net::ERR_IO_PENDING); 173 ASSERT_EQ(rv, net::ERR_IO_PENDING);
166 174
167 rv = callback.WaitForResult(); 175 rv = callback.WaitForResult();
168 EXPECT_EQ(rv, net::OK); 176 EXPECT_EQ(rv, net::OK);
169 } 177 }
170 178
171 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 179 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
172 rv = sock_->Write(request_text, arraysize(request_text) - 1, &callback); 180 scoped_refptr<net::IOBuffer> request_buffer =
181 new net::IOBuffer(arraysize(request_text) - 1);
182 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1);
183
184 rv = sock_->Write(request_buffer, arraysize(request_text) - 1, &callback);
173 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 185 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
174 186
175 if (rv == net::ERR_IO_PENDING) { 187 if (rv == net::ERR_IO_PENDING) {
176 rv = callback.WaitForResult(); 188 rv = callback.WaitForResult();
177 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1)); 189 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1));
178 } 190 }
179 191
180 // Do a partial read and then exit. This test should not crash! 192 // Do a partial read and then exit. This test should not crash!
181 char buf[512]; 193 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(512);
182 rv = sock_->Read(buf, sizeof(buf), &callback); 194 rv = sock_->Read(buf, 512, &callback);
183 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 195 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
184 196
185 if (rv == net::ERR_IO_PENDING) 197 if (rv == net::ERR_IO_PENDING)
186 rv = callback.WaitForResult(); 198 rv = callback.WaitForResult();
187 199
188 EXPECT_NE(rv, 0); 200 EXPECT_NE(rv, 0);
189 } 201 }
190 202
191 TEST_F(TCPClientSocketTest, FullDuplex_ReadFirst) { 203 TEST_F(TCPClientSocketTest, FullDuplex_ReadFirst) {
192 TestCompletionCallback callback; 204 TestCompletionCallback callback;
193 int rv = sock_->Connect(&callback); 205 int rv = sock_->Connect(&callback);
194 if (rv != net::OK) { 206 if (rv != net::OK) {
195 ASSERT_EQ(rv, net::ERR_IO_PENDING); 207 ASSERT_EQ(rv, net::ERR_IO_PENDING);
196 208
197 rv = callback.WaitForResult(); 209 rv = callback.WaitForResult();
198 EXPECT_EQ(rv, net::OK); 210 EXPECT_EQ(rv, net::OK);
199 } 211 }
200 212
201 char buf[4096]; 213 const int kBufLen = 4096;
202 rv = sock_->Read(buf, sizeof(buf), &callback); 214 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(kBufLen);
215 rv = sock_->Read(buf, kBufLen, &callback);
203 EXPECT_EQ(net::ERR_IO_PENDING, rv); 216 EXPECT_EQ(net::ERR_IO_PENDING, rv);
204 217
205 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 218 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
219 scoped_refptr<net::IOBuffer> request_buffer =
220 new net::IOBuffer(arraysize(request_text) - 1);
221 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1);
206 TestCompletionCallback write_callback; 222 TestCompletionCallback write_callback;
207 rv = sock_->Write(request_text, arraysize(request_text) - 1, &write_callback); 223
224 rv = sock_->Write(request_buffer, arraysize(request_text) - 1,
225 &write_callback);
208 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 226 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
209 227
210 if (rv == net::ERR_IO_PENDING) { 228 if (rv == net::ERR_IO_PENDING) {
211 rv = write_callback.WaitForResult(); 229 rv = write_callback.WaitForResult();
212 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1)); 230 EXPECT_EQ(rv, static_cast<int>(arraysize(request_text) - 1));
213 } 231 }
214 232
215 rv = callback.WaitForResult(); 233 rv = callback.WaitForResult();
216 EXPECT_GE(rv, 0); 234 EXPECT_GE(rv, 0);
217 while (rv > 0) { 235 while (rv > 0) {
218 rv = sock_->Read(buf, sizeof(buf), &callback); 236 rv = sock_->Read(buf, kBufLen, &callback);
219 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 237 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
220 238
221 if (rv == net::ERR_IO_PENDING) 239 if (rv == net::ERR_IO_PENDING)
222 rv = callback.WaitForResult(); 240 rv = callback.WaitForResult();
223 241
224 EXPECT_GE(rv, 0); 242 EXPECT_GE(rv, 0);
225 if (rv <= 0) 243 if (rv <= 0)
226 break; 244 break;
227 } 245 }
228 } 246 }
229 247
230 TEST_F(TCPClientSocketTest, FullDuplex_WriteFirst) { 248 TEST_F(TCPClientSocketTest, FullDuplex_WriteFirst) {
231 TestCompletionCallback callback; 249 TestCompletionCallback callback;
232 int rv = sock_->Connect(&callback); 250 int rv = sock_->Connect(&callback);
233 if (rv != net::OK) { 251 if (rv != net::OK) {
234 ASSERT_EQ(rv, net::ERR_IO_PENDING); 252 ASSERT_EQ(rv, net::ERR_IO_PENDING);
235 253
236 rv = callback.WaitForResult(); 254 rv = callback.WaitForResult();
237 EXPECT_EQ(rv, net::OK); 255 EXPECT_EQ(rv, net::OK);
238 } 256 }
239 257
240 const char request_text[] = "GET / HTTP/1.0\r\n\r\n"; 258 const char request_text[] = "GET / HTTP/1.0\r\n\r\n";
259 scoped_refptr<net::IOBuffer> request_buffer =
260 new net::IOBuffer(arraysize(request_text) - 1);
261 memcpy(request_buffer->data(), request_text, arraysize(request_text) - 1);
241 TestCompletionCallback write_callback; 262 TestCompletionCallback write_callback;
242 rv = sock_->Write(request_text, arraysize(request_text) - 1, &write_callback); 263
264 rv = sock_->Write(request_buffer, arraysize(request_text) - 1,
265 &write_callback);
243 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 266 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
244 267
245 char buf[4096]; 268 const int kBufLen = 4096;
246 int read_rv = sock_->Read(buf, sizeof(buf), &callback); 269 scoped_refptr<net::IOBuffer> buf = new net::IOBuffer(kBufLen);
270 int read_rv = sock_->Read(buf, kBufLen, &callback);
247 EXPECT_TRUE(read_rv >= 0 || read_rv == net::ERR_IO_PENDING); 271 EXPECT_TRUE(read_rv >= 0 || read_rv == net::ERR_IO_PENDING);
248 272
249 if (rv == net::ERR_IO_PENDING) { 273 if (rv == net::ERR_IO_PENDING) {
250 rv = write_callback.WaitForResult(); 274 rv = write_callback.WaitForResult();
251 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv); 275 EXPECT_EQ(static_cast<int>(arraysize(request_text) - 1), rv);
252 } 276 }
253 277
254 rv = callback.WaitForResult(); 278 rv = callback.WaitForResult();
255 EXPECT_GE(rv, 0); 279 EXPECT_GE(rv, 0);
256 while (rv > 0) { 280 while (rv > 0) {
257 rv = sock_->Read(buf, sizeof(buf), &callback); 281 rv = sock_->Read(buf, kBufLen, &callback);
258 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING); 282 EXPECT_TRUE(rv >= 0 || rv == net::ERR_IO_PENDING);
259 283
260 if (rv == net::ERR_IO_PENDING) 284 if (rv == net::ERR_IO_PENDING)
261 rv = callback.WaitForResult(); 285 rv = callback.WaitForResult();
262 286
263 EXPECT_GE(rv, 0); 287 EXPECT_GE(rv, 0);
264 if (rv <= 0) 288 if (rv <= 0)
265 break; 289 break;
266 } 290 }
267 } 291 }
OLDNEW
« no previous file with comments | « net/base/tcp_client_socket_libevent.cc ('k') | net/base/tcp_client_socket_win.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698