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

Side by Side Diff: net/dns/async_host_resolver_unittest.cc

Issue 8549004: base::Bind: Convert HostResolver::Resolve. (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase. Created 9 years, 1 month 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/dns/async_host_resolver.cc ('k') | net/ftp/ftp_network_transaction.cc » ('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) 2011 The Chromium Authors. All rights reserved. 1 // Copyright (c) 2011 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/dns/async_host_resolver.h" 5 #include "net/dns/async_host_resolver.h"
6 6
7 #include "base/bind.h" 7 #include "base/bind.h"
8 #include "base/memory/scoped_ptr.h" 8 #include "base/memory/scoped_ptr.h"
9 #include "net/base/host_cache.h" 9 #include "net/base/host_cache.h"
10 #include "net/base/net_log.h" 10 #include "net/base/net_log.h"
(...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after
140 HostResolver::RequestInfo info0_, info1_, info2_, info3_; 140 HostResolver::RequestInfo info0_, info1_, info2_, info3_;
141 std::vector<MockWrite> writes0_, writes1_, writes2_, writes3_; 141 std::vector<MockWrite> writes0_, writes1_, writes2_, writes3_;
142 std::vector<MockRead> reads0_, reads1_, reads2_, reads3_; 142 std::vector<MockRead> reads0_, reads1_, reads2_, reads3_;
143 scoped_ptr<StaticSocketDataProvider> data0_, data1_, data2_, data3_; 143 scoped_ptr<StaticSocketDataProvider> data0_, data1_, data2_, data3_;
144 std::vector<const char*> ip_addresses0_, ip_addresses1_, 144 std::vector<const char*> ip_addresses0_, ip_addresses1_,
145 ip_addresses2_, ip_addresses3_; 145 ip_addresses2_, ip_addresses3_;
146 MockClientSocketFactory factory_; 146 MockClientSocketFactory factory_;
147 TestPrng test_prng_; 147 TestPrng test_prng_;
148 RandIntCallback rand_int_cb_; 148 RandIntCallback rand_int_cb_;
149 scoped_ptr<HostResolver> resolver_; 149 scoped_ptr<HostResolver> resolver_;
150 TestOldCompletionCallback callback0_, callback1_, callback2_, callback3_; 150 TestCompletionCallback callback0_, callback1_, callback2_, callback3_;
151 }; 151 };
152 152
153 TEST_F(AsyncHostResolverTest, EmptyHostLookup) { 153 TEST_F(AsyncHostResolverTest, EmptyHostLookup) {
154 info0_.set_host_port_pair(HostPortPair("", kPortNum)); 154 info0_.set_host_port_pair(HostPortPair("", kPortNum));
155 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 155 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
156 BoundNetLog()); 156 BoundNetLog());
157 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 157 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
158 } 158 }
159 159
160 TEST_F(AsyncHostResolverTest, IPv4LiteralLookup) { 160 TEST_F(AsyncHostResolverTest, IPv4LiteralLookup) {
161 const char* kIPLiteral = "192.168.1.2"; 161 const char* kIPLiteral = "192.168.1.2";
162 info0_.set_host_port_pair(HostPortPair(kIPLiteral, kPortNum)); 162 info0_.set_host_port_pair(HostPortPair(kIPLiteral, kPortNum));
163 info0_.set_host_resolver_flags(HOST_RESOLVER_CANONNAME); 163 info0_.set_host_resolver_flags(HOST_RESOLVER_CANONNAME);
164 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 164 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
165 BoundNetLog()); 165 BoundNetLog());
166 EXPECT_EQ(OK, rv); 166 EXPECT_EQ(OK, rv);
167 std::vector<const char*> ip_addresses(1, kIPLiteral); 167 std::vector<const char*> ip_addresses(1, kIPLiteral);
168 VerifyAddressList(ip_addresses, kPortNum, addrlist0_); 168 VerifyAddressList(ip_addresses, kPortNum, addrlist0_);
169 EXPECT_STREQ(kIPLiteral, addrlist0_.head()->ai_canonname); 169 EXPECT_STREQ(kIPLiteral, addrlist0_.head()->ai_canonname);
170 } 170 }
171 171
172 TEST_F(AsyncHostResolverTest, IPv6LiteralLookup) { 172 TEST_F(AsyncHostResolverTest, IPv6LiteralLookup) {
173 info0_.set_host_port_pair(HostPortPair("2001:db8:0::42", kPortNum)); 173 info0_.set_host_port_pair(HostPortPair("2001:db8:0::42", kPortNum));
174 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 174 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
175 BoundNetLog()); 175 BoundNetLog());
176 // When support for IPv6 is added, this should succeed. 176 // When support for IPv6 is added, this should succeed.
177 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 177 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
178 } 178 }
179 179
180 TEST_F(AsyncHostResolverTest, CachedLookup) { 180 TEST_F(AsyncHostResolverTest, CachedLookup) {
181 int rv = resolver_->ResolveFromCache(info0_, &addrlist0_, BoundNetLog()); 181 int rv = resolver_->ResolveFromCache(info0_, &addrlist0_, BoundNetLog());
182 EXPECT_EQ(ERR_DNS_CACHE_MISS, rv); 182 EXPECT_EQ(ERR_DNS_CACHE_MISS, rv);
183 183
184 // Cache the result of |info0_| lookup. 184 // Cache the result of |info0_| lookup.
185 rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 185 rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
186 BoundNetLog()); 186 BoundNetLog());
187 EXPECT_EQ(ERR_IO_PENDING, rv); 187 EXPECT_EQ(ERR_IO_PENDING, rv);
188 rv = callback0_.WaitForResult(); 188 rv = callback0_.WaitForResult();
189 EXPECT_EQ(OK, rv); 189 EXPECT_EQ(OK, rv);
190 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 190 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
191 191
192 // Now lookup |info0_| from cache only, store results in |addrlist1_|, 192 // Now lookup |info0_| from cache only, store results in |addrlist1_|,
193 // should succeed synchronously. 193 // should succeed synchronously.
194 rv = resolver_->ResolveFromCache(info0_, &addrlist1_, BoundNetLog()); 194 rv = resolver_->ResolveFromCache(info0_, &addrlist1_, BoundNetLog());
195 EXPECT_EQ(OK, rv); 195 EXPECT_EQ(OK, rv);
196 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_); 196 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_);
197 } 197 }
198 198
199 TEST_F(AsyncHostResolverTest, InvalidHostNameLookup) { 199 TEST_F(AsyncHostResolverTest, InvalidHostNameLookup) {
200 const std::string kHostName1(64, 'a'); 200 const std::string kHostName1(64, 'a');
201 info0_.set_host_port_pair(HostPortPair(kHostName1, kPortNum)); 201 info0_.set_host_port_pair(HostPortPair(kHostName1, kPortNum));
202 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 202 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
203 BoundNetLog()); 203 BoundNetLog());
204 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 204 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
205 205
206 const std::string kHostName2(4097, 'b'); 206 const std::string kHostName2(4097, 'b');
207 info0_.set_host_port_pair(HostPortPair(kHostName2, kPortNum)); 207 info0_.set_host_port_pair(HostPortPair(kHostName2, kPortNum));
208 rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 208 rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
209 BoundNetLog()); 209 BoundNetLog());
210 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 210 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
211 } 211 }
212 212
213 TEST_F(AsyncHostResolverTest, Lookup) { 213 TEST_F(AsyncHostResolverTest, Lookup) {
214 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 214 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
215 BoundNetLog()); 215 BoundNetLog());
216 EXPECT_EQ(ERR_IO_PENDING, rv); 216 EXPECT_EQ(ERR_IO_PENDING, rv);
217 rv = callback0_.WaitForResult(); 217 rv = callback0_.WaitForResult();
218 EXPECT_EQ(OK, rv); 218 EXPECT_EQ(OK, rv);
219 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 219 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
220 } 220 }
221 221
222 TEST_F(AsyncHostResolverTest, ConcurrentLookup) { 222 TEST_F(AsyncHostResolverTest, ConcurrentLookup) {
223 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 223 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
224 BoundNetLog()); 224 BoundNetLog());
225 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 225 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
226 BoundNetLog()); 226 BoundNetLog());
227 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 227 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
228 BoundNetLog()); 228 BoundNetLog());
229 EXPECT_EQ(ERR_IO_PENDING, rv0); 229 EXPECT_EQ(ERR_IO_PENDING, rv0);
230 EXPECT_EQ(ERR_IO_PENDING, rv1); 230 EXPECT_EQ(ERR_IO_PENDING, rv1);
231 EXPECT_EQ(ERR_IO_PENDING, rv2); 231 EXPECT_EQ(ERR_IO_PENDING, rv2);
232 232
233 rv0 = callback0_.WaitForResult(); 233 rv0 = callback0_.WaitForResult();
234 EXPECT_EQ(OK, rv0); 234 EXPECT_EQ(OK, rv0);
235 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 235 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
236 236
237 rv1 = callback1_.WaitForResult(); 237 rv1 = callback1_.WaitForResult();
238 EXPECT_EQ(OK, rv1); 238 EXPECT_EQ(OK, rv1);
239 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 239 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
240 240
241 rv2 = callback2_.WaitForResult(); 241 rv2 = callback2_.WaitForResult();
242 EXPECT_EQ(OK, rv2); 242 EXPECT_EQ(OK, rv2);
243 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 243 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
244 244
245 EXPECT_EQ(3u, factory_.udp_client_sockets().size()); 245 EXPECT_EQ(3u, factory_.udp_client_sockets().size());
246 } 246 }
247 247
248 TEST_F(AsyncHostResolverTest, SameHostLookupsConsumeSingleTransaction) { 248 TEST_F(AsyncHostResolverTest, SameHostLookupsConsumeSingleTransaction) {
249 // We pass the info0_ to all requests. 249 // We pass the info0_ to all requests.
250 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 250 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
251 BoundNetLog()); 251 BoundNetLog());
252 int rv1 = resolver_->Resolve(info0_, &addrlist1_, &callback1_, NULL, 252 int rv1 = resolver_->Resolve(info0_, &addrlist1_, callback1_.callback(), NULL,
253 BoundNetLog()); 253 BoundNetLog());
254 int rv2 = resolver_->Resolve(info0_, &addrlist2_, &callback2_, NULL, 254 int rv2 = resolver_->Resolve(info0_, &addrlist2_, callback2_.callback(), NULL,
255 BoundNetLog()); 255 BoundNetLog());
256 EXPECT_EQ(ERR_IO_PENDING, rv0); 256 EXPECT_EQ(ERR_IO_PENDING, rv0);
257 EXPECT_EQ(ERR_IO_PENDING, rv1); 257 EXPECT_EQ(ERR_IO_PENDING, rv1);
258 EXPECT_EQ(ERR_IO_PENDING, rv2); 258 EXPECT_EQ(ERR_IO_PENDING, rv2);
259 259
260 rv0 = callback0_.WaitForResult(); 260 rv0 = callback0_.WaitForResult();
261 EXPECT_EQ(OK, rv0); 261 EXPECT_EQ(OK, rv0);
262 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 262 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
263 263
264 rv1 = callback1_.WaitForResult(); 264 rv1 = callback1_.WaitForResult();
265 EXPECT_EQ(OK, rv1); 265 EXPECT_EQ(OK, rv1);
266 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_); 266 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_);
267 267
268 rv2 = callback2_.WaitForResult(); 268 rv2 = callback2_.WaitForResult();
269 EXPECT_EQ(OK, rv2); 269 EXPECT_EQ(OK, rv2);
270 VerifyAddressList(ip_addresses0_, kPortNum, addrlist2_); 270 VerifyAddressList(ip_addresses0_, kPortNum, addrlist2_);
271 271
272 // Although we have three lookups, a single UDP socket was used. 272 // Although we have three lookups, a single UDP socket was used.
273 EXPECT_EQ(1u, factory_.udp_client_sockets().size()); 273 EXPECT_EQ(1u, factory_.udp_client_sockets().size());
274 } 274 }
275 275
276 TEST_F(AsyncHostResolverTest, CancelLookup) { 276 TEST_F(AsyncHostResolverTest, CancelLookup) {
277 HostResolver::RequestHandle req0 = NULL, req2 = NULL; 277 HostResolver::RequestHandle req0 = NULL, req2 = NULL;
278 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, &req0, 278 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(),
279 &req0, BoundNetLog());
280 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
279 BoundNetLog()); 281 BoundNetLog());
280 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 282 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(),
281 BoundNetLog()); 283 &req2, BoundNetLog());
282 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, &req2,
283 BoundNetLog());
284 EXPECT_EQ(ERR_IO_PENDING, rv0); 284 EXPECT_EQ(ERR_IO_PENDING, rv0);
285 EXPECT_EQ(ERR_IO_PENDING, rv1); 285 EXPECT_EQ(ERR_IO_PENDING, rv1);
286 EXPECT_EQ(ERR_IO_PENDING, rv2); 286 EXPECT_EQ(ERR_IO_PENDING, rv2);
287 287
288 resolver_->CancelRequest(req0); 288 resolver_->CancelRequest(req0);
289 resolver_->CancelRequest(req2); 289 resolver_->CancelRequest(req2);
290 290
291 MessageLoop::current()->RunAllPending(); 291 MessageLoop::current()->RunAllPending();
292 292
293 EXPECT_FALSE(callback0_.have_result()); 293 EXPECT_FALSE(callback0_.have_result());
294 EXPECT_FALSE(callback2_.have_result()); 294 EXPECT_FALSE(callback2_.have_result());
295 295
296 rv1 = callback1_.WaitForResult(); 296 rv1 = callback1_.WaitForResult();
297 EXPECT_EQ(OK, rv1); 297 EXPECT_EQ(OK, rv1);
298 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 298 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
299 } 299 }
300 300
301 // Tests the following scenario: start two resolutions for the same host, 301 // Tests the following scenario: start two resolutions for the same host,
302 // cancel one of them, make sure that the other one completes. 302 // cancel one of them, make sure that the other one completes.
303 TEST_F(AsyncHostResolverTest, CancelSameHostLookup) { 303 TEST_F(AsyncHostResolverTest, CancelSameHostLookup) {
304 HostResolver::RequestHandle req0 = NULL; 304 HostResolver::RequestHandle req0 = NULL;
305 305
306 // Pass the info0_ to both requests. 306 // Pass the info0_ to both requests.
307 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, &req0, 307 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(),
308 BoundNetLog()); 308 &req0, BoundNetLog());
309 int rv1 = resolver_->Resolve(info0_, &addrlist1_, &callback1_, NULL, 309 int rv1 = resolver_->Resolve(info0_, &addrlist1_, callback1_.callback(), NULL,
310 BoundNetLog()); 310 BoundNetLog());
311 EXPECT_EQ(ERR_IO_PENDING, rv0); 311 EXPECT_EQ(ERR_IO_PENDING, rv0);
312 EXPECT_EQ(ERR_IO_PENDING, rv1); 312 EXPECT_EQ(ERR_IO_PENDING, rv1);
313 313
314 resolver_->CancelRequest(req0); 314 resolver_->CancelRequest(req0);
315 MessageLoop::current()->RunAllPending(); 315 MessageLoop::current()->RunAllPending();
316 EXPECT_FALSE(callback0_.have_result()); 316 EXPECT_FALSE(callback0_.have_result());
317 317
318 rv1 = callback1_.WaitForResult(); 318 rv1 = callback1_.WaitForResult();
319 EXPECT_EQ(OK, rv1); 319 EXPECT_EQ(OK, rv1);
320 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_); 320 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_);
321 321
322 EXPECT_EQ(1u, factory_.udp_client_sockets().size()); 322 EXPECT_EQ(1u, factory_.udp_client_sockets().size());
323 } 323 }
324 324
325 // Test that a queued lookup completes. 325 // Test that a queued lookup completes.
326 TEST_F(AsyncHostResolverTest, QueuedLookup) { 326 TEST_F(AsyncHostResolverTest, QueuedLookup) {
327 // kMaxTransactions is 2, thus the following requests consume all 327 // kMaxTransactions is 2, thus the following requests consume all
328 // available transactions. 328 // available transactions.
329 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 329 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
330 BoundNetLog()); 330 BoundNetLog());
331 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 331 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
332 BoundNetLog()); 332 BoundNetLog());
333 EXPECT_EQ(ERR_IO_PENDING, rv0); 333 EXPECT_EQ(ERR_IO_PENDING, rv0);
334 EXPECT_EQ(ERR_IO_PENDING, rv1); 334 EXPECT_EQ(ERR_IO_PENDING, rv1);
335 335
336 // The following request will end up in queue. 336 // The following request will end up in queue.
337 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 337 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
338 BoundNetLog()); 338 BoundNetLog());
339 EXPECT_EQ(ERR_IO_PENDING, rv2); 339 EXPECT_EQ(ERR_IO_PENDING, rv2);
340 EXPECT_EQ(1u, 340 EXPECT_EQ(1u,
341 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 341 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
342 342
343 // Make sure all requests complete. 343 // Make sure all requests complete.
344 rv0 = callback0_.WaitForResult(); 344 rv0 = callback0_.WaitForResult();
345 EXPECT_EQ(OK, rv0); 345 EXPECT_EQ(OK, rv0);
346 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 346 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
347 347
348 rv1 = callback1_.WaitForResult(); 348 rv1 = callback1_.WaitForResult();
349 EXPECT_EQ(OK, rv1); 349 EXPECT_EQ(OK, rv1);
350 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 350 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
351 351
352 rv2 = callback2_.WaitForResult(); 352 rv2 = callback2_.WaitForResult();
353 EXPECT_EQ(OK, rv2); 353 EXPECT_EQ(OK, rv2);
354 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 354 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
355 } 355 }
356 356
357 // Test that cancelling a queued lookup works. 357 // Test that cancelling a queued lookup works.
358 TEST_F(AsyncHostResolverTest, CancelPendingLookup) { 358 TEST_F(AsyncHostResolverTest, CancelPendingLookup) {
359 // kMaxTransactions is 2, thus the following requests consume all 359 // kMaxTransactions is 2, thus the following requests consume all
360 // available transactions. 360 // available transactions.
361 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 361 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
362 BoundNetLog()); 362 BoundNetLog());
363 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 363 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
364 BoundNetLog()); 364 BoundNetLog());
365 EXPECT_EQ(ERR_IO_PENDING, rv0); 365 EXPECT_EQ(ERR_IO_PENDING, rv0);
366 EXPECT_EQ(ERR_IO_PENDING, rv1); 366 EXPECT_EQ(ERR_IO_PENDING, rv1);
367 367
368 // The following request will end up in queue. 368 // The following request will end up in queue.
369 HostResolver::RequestHandle req2 = NULL; 369 HostResolver::RequestHandle req2 = NULL;
370 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, &req2, 370 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(),
371 BoundNetLog()); 371 &req2, BoundNetLog());
372 EXPECT_EQ(ERR_IO_PENDING, rv2); 372 EXPECT_EQ(ERR_IO_PENDING, rv2);
373 EXPECT_EQ(1u, 373 EXPECT_EQ(1u,
374 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 374 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
375 375
376 resolver_->CancelRequest(req2); 376 resolver_->CancelRequest(req2);
377 377
378 // Make sure first two requests complete while the cancelled one doesn't. 378 // Make sure first two requests complete while the cancelled one doesn't.
379 MessageLoop::current()->RunAllPending(); 379 MessageLoop::current()->RunAllPending();
380 EXPECT_FALSE(callback2_.have_result()); 380 EXPECT_FALSE(callback2_.have_result());
381 381
382 rv0 = callback0_.WaitForResult(); 382 rv0 = callback0_.WaitForResult();
383 EXPECT_EQ(OK, rv0); 383 EXPECT_EQ(OK, rv0);
384 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 384 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
385 385
386 rv1 = callback1_.WaitForResult(); 386 rv1 = callback1_.WaitForResult();
387 EXPECT_EQ(OK, rv1); 387 EXPECT_EQ(OK, rv1);
388 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 388 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
389 } 389 }
390 390
391 TEST_F(AsyncHostResolverTest, ResolverDestructionCancelsLookups) { 391 TEST_F(AsyncHostResolverTest, ResolverDestructionCancelsLookups) {
392 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 392 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
393 BoundNetLog()); 393 BoundNetLog());
394 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 394 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
395 BoundNetLog()); 395 BoundNetLog());
396 // This one is queued. 396 // This one is queued.
397 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 397 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
398 BoundNetLog()); 398 BoundNetLog());
399 EXPECT_EQ(1u, 399 EXPECT_EQ(1u,
400 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 400 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
401 401
402 EXPECT_EQ(ERR_IO_PENDING, rv0); 402 EXPECT_EQ(ERR_IO_PENDING, rv0);
403 EXPECT_EQ(ERR_IO_PENDING, rv1); 403 EXPECT_EQ(ERR_IO_PENDING, rv1);
404 EXPECT_EQ(ERR_IO_PENDING, rv2); 404 EXPECT_EQ(ERR_IO_PENDING, rv2);
405 405
406 resolver_.reset(); 406 resolver_.reset();
407 407
408 MessageLoop::current()->RunAllPending(); 408 MessageLoop::current()->RunAllPending();
409 409
410 EXPECT_FALSE(callback0_.have_result()); 410 EXPECT_FALSE(callback0_.have_result());
411 EXPECT_FALSE(callback1_.have_result()); 411 EXPECT_FALSE(callback1_.have_result());
412 EXPECT_FALSE(callback2_.have_result()); 412 EXPECT_FALSE(callback2_.have_result());
413 } 413 }
414 414
415 // Test that when the number of pending lookups is at max, a new lookup 415 // Test that when the number of pending lookups is at max, a new lookup
416 // with a priority lower than all of those in the queue fails. 416 // with a priority lower than all of those in the queue fails.
417 TEST_F(AsyncHostResolverTest, OverflowQueueWithLowPriorityLookup) { 417 TEST_F(AsyncHostResolverTest, OverflowQueueWithLowPriorityLookup) {
418 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 418 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
419 BoundNetLog()); 419 BoundNetLog());
420 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 420 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
421 BoundNetLog()); 421 BoundNetLog());
422 // This one is queued and fills up the queue since its size is 1. 422 // This one is queued and fills up the queue since its size is 1.
423 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 423 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
424 BoundNetLog()); 424 BoundNetLog());
425 EXPECT_EQ(1u, 425 EXPECT_EQ(1u,
426 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 426 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
427 427
428 EXPECT_EQ(ERR_IO_PENDING, rv0); 428 EXPECT_EQ(ERR_IO_PENDING, rv0);
429 EXPECT_EQ(ERR_IO_PENDING, rv1); 429 EXPECT_EQ(ERR_IO_PENDING, rv1);
430 EXPECT_EQ(ERR_IO_PENDING, rv2); 430 EXPECT_EQ(ERR_IO_PENDING, rv2);
431 431
432 // This one fails. 432 // This one fails.
433 info3_.set_priority(LOWEST); 433 info3_.set_priority(LOWEST);
434 int rv3 = resolver_->Resolve(info3_, &addrlist3_, &callback3_, NULL, 434 int rv3 = resolver_->Resolve(info3_, &addrlist3_, callback3_.callback(), NULL,
435 BoundNetLog()); 435 BoundNetLog());
436 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv3); 436 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv3);
437 437
438 MessageLoop::current()->RunAllPending(); 438 MessageLoop::current()->RunAllPending();
439 EXPECT_FALSE(callback3_.have_result()); 439 EXPECT_FALSE(callback3_.have_result());
440 } 440 }
441 441
442 // Test that when the number of pending lookups is at max, a new lookup 442 // Test that when the number of pending lookups is at max, a new lookup
443 // with a priority higher than any of those in the queue succeeds and 443 // with a priority higher than any of those in the queue succeeds and
444 // causes the lowest priority lookup in the queue to fail. 444 // causes the lowest priority lookup in the queue to fail.
445 TEST_F(AsyncHostResolverTest, OverflowQueueWithHighPriorityLookup) { 445 TEST_F(AsyncHostResolverTest, OverflowQueueWithHighPriorityLookup) {
446 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 446 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
447 BoundNetLog()); 447 BoundNetLog());
448 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 448 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
449 BoundNetLog()); 449 BoundNetLog());
450 450
451 // Next lookup is queued. Since this will be ejected from the queue and 451 // Next lookup is queued. Since this will be ejected from the queue and
452 // will not consume a socket from our factory, we are not passing it 452 // will not consume a socket from our factory, we are not passing it
453 // predefined members. 453 // predefined members.
454 HostResolver::RequestInfo info(HostPortPair("cnn.com", 80)); 454 HostResolver::RequestInfo info(HostPortPair("cnn.com", 80));
455 info.set_address_family(ADDRESS_FAMILY_IPV4); 455 info.set_address_family(ADDRESS_FAMILY_IPV4);
456 AddressList addrlist_fail; 456 AddressList addrlist_fail;
457 TestOldCompletionCallback callback_fail; 457 TestCompletionCallback callback_fail;
458 int rv_fail = resolver_->Resolve(info, &addrlist_fail, &callback_fail, NULL, 458 int rv_fail = resolver_->Resolve(info, &addrlist_fail,
459 callback_fail.callback(), NULL,
459 BoundNetLog()); 460 BoundNetLog());
460 EXPECT_EQ(1u, 461 EXPECT_EQ(1u,
461 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 462 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
462 463
463 EXPECT_EQ(ERR_IO_PENDING, rv0); 464 EXPECT_EQ(ERR_IO_PENDING, rv0);
464 EXPECT_EQ(ERR_IO_PENDING, rv1); 465 EXPECT_EQ(ERR_IO_PENDING, rv1);
465 EXPECT_EQ(ERR_IO_PENDING, rv_fail); 466 EXPECT_EQ(ERR_IO_PENDING, rv_fail);
466 467
467 // Lookup 2 causes the above to fail, but itself should succeed. 468 // Lookup 2 causes the above to fail, but itself should succeed.
468 info2_.set_priority(HIGHEST); 469 info2_.set_priority(HIGHEST);
469 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 470 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
470 BoundNetLog()); 471 BoundNetLog());
471 472
472 rv0 = callback0_.WaitForResult(); 473 rv0 = callback0_.WaitForResult();
473 EXPECT_EQ(OK, rv0); 474 EXPECT_EQ(OK, rv0);
474 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 475 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
475 476
476 rv1 = callback1_.WaitForResult(); 477 rv1 = callback1_.WaitForResult();
477 EXPECT_EQ(OK, rv1); 478 EXPECT_EQ(OK, rv1);
478 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 479 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
479 480
480 rv_fail = callback_fail.WaitForResult(); 481 rv_fail = callback_fail.WaitForResult();
481 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv_fail); 482 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv_fail);
482 EXPECT_EQ(static_cast<addrinfo*>(NULL), addrlist_fail.head()); 483 EXPECT_EQ(static_cast<addrinfo*>(NULL), addrlist_fail.head());
483 484
484 rv2 = callback2_.WaitForResult(); 485 rv2 = callback2_.WaitForResult();
485 EXPECT_EQ(OK, rv2); 486 EXPECT_EQ(OK, rv2);
486 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 487 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
487 } 488 }
488 489
489 } // namespace net 490 } // namespace net
OLDNEW
« no previous file with comments | « net/dns/async_host_resolver.cc ('k') | net/ftp/ftp_network_transaction.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698