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

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: 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
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 130 matching lines...) Expand 10 before | Expand all | Expand 10 after
141 HostResolver::RequestInfo info0_, info1_, info2_, info3_; 141 HostResolver::RequestInfo info0_, info1_, info2_, info3_;
142 std::vector<MockWrite> writes0_, writes1_, writes2_, writes3_; 142 std::vector<MockWrite> writes0_, writes1_, writes2_, writes3_;
143 std::vector<MockRead> reads0_, reads1_, reads2_, reads3_; 143 std::vector<MockRead> reads0_, reads1_, reads2_, reads3_;
144 scoped_ptr<StaticSocketDataProvider> data0_, data1_, data2_, data3_; 144 scoped_ptr<StaticSocketDataProvider> data0_, data1_, data2_, data3_;
145 std::vector<const char*> ip_addresses0_, ip_addresses1_, 145 std::vector<const char*> ip_addresses0_, ip_addresses1_,
146 ip_addresses2_, ip_addresses3_; 146 ip_addresses2_, ip_addresses3_;
147 MockClientSocketFactory factory_; 147 MockClientSocketFactory factory_;
148 TestPrng test_prng_; 148 TestPrng test_prng_;
149 RandIntCallback rand_int_cb_; 149 RandIntCallback rand_int_cb_;
150 scoped_ptr<HostResolver> resolver_; 150 scoped_ptr<HostResolver> resolver_;
151 TestOldCompletionCallback callback0_, callback1_, callback2_, callback3_; 151 TestCompletionCallback callback0_, callback1_, callback2_, callback3_;
152 }; 152 };
153 153
154 TEST_F(AsyncHostResolverTest, EmptyHostLookup) { 154 TEST_F(AsyncHostResolverTest, EmptyHostLookup) {
155 info0_.set_host_port_pair(HostPortPair("", kPortNum)); 155 info0_.set_host_port_pair(HostPortPair("", kPortNum));
156 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 156 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
157 BoundNetLog()); 157 BoundNetLog());
158 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 158 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
159 } 159 }
160 160
161 TEST_F(AsyncHostResolverTest, IPv4LiteralLookup) { 161 TEST_F(AsyncHostResolverTest, IPv4LiteralLookup) {
162 const char* kIPLiteral = "192.168.1.2"; 162 const char* kIPLiteral = "192.168.1.2";
163 info0_.set_host_port_pair(HostPortPair(kIPLiteral, kPortNum)); 163 info0_.set_host_port_pair(HostPortPair(kIPLiteral, kPortNum));
164 info0_.set_host_resolver_flags(HOST_RESOLVER_CANONNAME); 164 info0_.set_host_resolver_flags(HOST_RESOLVER_CANONNAME);
165 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 165 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
166 BoundNetLog()); 166 BoundNetLog());
167 EXPECT_EQ(OK, rv); 167 EXPECT_EQ(OK, rv);
168 std::vector<const char*> ip_addresses(1, kIPLiteral); 168 std::vector<const char*> ip_addresses(1, kIPLiteral);
169 VerifyAddressList(ip_addresses, kPortNum, addrlist0_); 169 VerifyAddressList(ip_addresses, kPortNum, addrlist0_);
170 EXPECT_STREQ(kIPLiteral, addrlist0_.head()->ai_canonname); 170 EXPECT_STREQ(kIPLiteral, addrlist0_.head()->ai_canonname);
171 } 171 }
172 172
173 TEST_F(AsyncHostResolverTest, IPv6LiteralLookup) { 173 TEST_F(AsyncHostResolverTest, IPv6LiteralLookup) {
174 info0_.set_host_port_pair(HostPortPair("2001:db8:0::42", kPortNum)); 174 info0_.set_host_port_pair(HostPortPair("2001:db8:0::42", kPortNum));
175 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 175 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
176 BoundNetLog()); 176 BoundNetLog());
177 // When support for IPv6 is added, this should succeed. 177 // When support for IPv6 is added, this should succeed.
178 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 178 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
179 } 179 }
180 180
181 TEST_F(AsyncHostResolverTest, CachedLookup) { 181 TEST_F(AsyncHostResolverTest, CachedLookup) {
182 int rv = resolver_->ResolveFromCache(info0_, &addrlist0_, BoundNetLog()); 182 int rv = resolver_->ResolveFromCache(info0_, &addrlist0_, BoundNetLog());
183 EXPECT_EQ(ERR_DNS_CACHE_MISS, rv); 183 EXPECT_EQ(ERR_DNS_CACHE_MISS, rv);
184 184
185 // Cache the result of |info0_| lookup. 185 // Cache the result of |info0_| lookup.
186 rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 186 rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
187 BoundNetLog()); 187 BoundNetLog());
188 EXPECT_EQ(ERR_IO_PENDING, rv); 188 EXPECT_EQ(ERR_IO_PENDING, rv);
189 rv = callback0_.WaitForResult(); 189 rv = callback0_.WaitForResult();
190 EXPECT_EQ(OK, rv); 190 EXPECT_EQ(OK, rv);
191 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 191 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
192 192
193 // Now lookup |info0_| from cache only, store results in |addrlist1_|, 193 // Now lookup |info0_| from cache only, store results in |addrlist1_|,
194 // should succeed synchronously. 194 // should succeed synchronously.
195 rv = resolver_->ResolveFromCache(info0_, &addrlist1_, BoundNetLog()); 195 rv = resolver_->ResolveFromCache(info0_, &addrlist1_, BoundNetLog());
196 EXPECT_EQ(OK, rv); 196 EXPECT_EQ(OK, rv);
197 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_); 197 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_);
198 } 198 }
199 199
200 TEST_F(AsyncHostResolverTest, InvalidHostNameLookup) { 200 TEST_F(AsyncHostResolverTest, InvalidHostNameLookup) {
201 const std::string kHostName1(64, 'a'); 201 const std::string kHostName1(64, 'a');
202 info0_.set_host_port_pair(HostPortPair(kHostName1, kPortNum)); 202 info0_.set_host_port_pair(HostPortPair(kHostName1, kPortNum));
203 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 203 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
204 BoundNetLog()); 204 BoundNetLog());
205 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 205 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
206 206
207 const std::string kHostName2(4097, 'b'); 207 const std::string kHostName2(4097, 'b');
208 info0_.set_host_port_pair(HostPortPair(kHostName2, kPortNum)); 208 info0_.set_host_port_pair(HostPortPair(kHostName2, kPortNum));
209 rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 209 rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
210 BoundNetLog()); 210 BoundNetLog());
211 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv); 211 EXPECT_EQ(ERR_NAME_NOT_RESOLVED, rv);
212 } 212 }
213 213
214 TEST_F(AsyncHostResolverTest, Lookup) { 214 TEST_F(AsyncHostResolverTest, Lookup) {
215 int rv = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 215 int rv = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
216 BoundNetLog()); 216 BoundNetLog());
217 EXPECT_EQ(ERR_IO_PENDING, rv); 217 EXPECT_EQ(ERR_IO_PENDING, rv);
218 rv = callback0_.WaitForResult(); 218 rv = callback0_.WaitForResult();
219 EXPECT_EQ(OK, rv); 219 EXPECT_EQ(OK, rv);
220 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 220 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
221 } 221 }
222 222
223 TEST_F(AsyncHostResolverTest, ConcurrentLookup) { 223 TEST_F(AsyncHostResolverTest, ConcurrentLookup) {
224 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 224 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
225 BoundNetLog()); 225 BoundNetLog());
226 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 226 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
227 BoundNetLog()); 227 BoundNetLog());
228 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 228 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
229 BoundNetLog()); 229 BoundNetLog());
230 EXPECT_EQ(ERR_IO_PENDING, rv0); 230 EXPECT_EQ(ERR_IO_PENDING, rv0);
231 EXPECT_EQ(ERR_IO_PENDING, rv1); 231 EXPECT_EQ(ERR_IO_PENDING, rv1);
232 EXPECT_EQ(ERR_IO_PENDING, rv2); 232 EXPECT_EQ(ERR_IO_PENDING, rv2);
233 233
234 rv0 = callback0_.WaitForResult(); 234 rv0 = callback0_.WaitForResult();
235 EXPECT_EQ(OK, rv0); 235 EXPECT_EQ(OK, rv0);
236 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 236 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
237 237
238 rv1 = callback1_.WaitForResult(); 238 rv1 = callback1_.WaitForResult();
239 EXPECT_EQ(OK, rv1); 239 EXPECT_EQ(OK, rv1);
240 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 240 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
241 241
242 rv2 = callback2_.WaitForResult(); 242 rv2 = callback2_.WaitForResult();
243 EXPECT_EQ(OK, rv2); 243 EXPECT_EQ(OK, rv2);
244 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 244 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
245 245
246 EXPECT_EQ(3u, factory_.udp_client_sockets().size()); 246 EXPECT_EQ(3u, factory_.udp_client_sockets().size());
247 } 247 }
248 248
249 TEST_F(AsyncHostResolverTest, SameHostLookupsConsumeSingleTransaction) { 249 TEST_F(AsyncHostResolverTest, SameHostLookupsConsumeSingleTransaction) {
250 // We pass the info0_ to all requests. 250 // We pass the info0_ to all requests.
251 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 251 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
252 BoundNetLog()); 252 BoundNetLog());
253 int rv1 = resolver_->Resolve(info0_, &addrlist1_, &callback1_, NULL, 253 int rv1 = resolver_->Resolve(info0_, &addrlist1_, callback1_.callback(), NULL,
254 BoundNetLog()); 254 BoundNetLog());
255 int rv2 = resolver_->Resolve(info0_, &addrlist2_, &callback2_, NULL, 255 int rv2 = resolver_->Resolve(info0_, &addrlist2_, callback2_.callback(), NULL,
256 BoundNetLog()); 256 BoundNetLog());
257 EXPECT_EQ(ERR_IO_PENDING, rv0); 257 EXPECT_EQ(ERR_IO_PENDING, rv0);
258 EXPECT_EQ(ERR_IO_PENDING, rv1); 258 EXPECT_EQ(ERR_IO_PENDING, rv1);
259 EXPECT_EQ(ERR_IO_PENDING, rv2); 259 EXPECT_EQ(ERR_IO_PENDING, rv2);
260 260
261 rv0 = callback0_.WaitForResult(); 261 rv0 = callback0_.WaitForResult();
262 EXPECT_EQ(OK, rv0); 262 EXPECT_EQ(OK, rv0);
263 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 263 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
264 264
265 rv1 = callback1_.WaitForResult(); 265 rv1 = callback1_.WaitForResult();
266 EXPECT_EQ(OK, rv1); 266 EXPECT_EQ(OK, rv1);
267 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_); 267 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_);
268 268
269 rv2 = callback2_.WaitForResult(); 269 rv2 = callback2_.WaitForResult();
270 EXPECT_EQ(OK, rv2); 270 EXPECT_EQ(OK, rv2);
271 VerifyAddressList(ip_addresses0_, kPortNum, addrlist2_); 271 VerifyAddressList(ip_addresses0_, kPortNum, addrlist2_);
272 272
273 // Although we have three lookups, a single UDP socket was used. 273 // Although we have three lookups, a single UDP socket was used.
274 EXPECT_EQ(1u, factory_.udp_client_sockets().size()); 274 EXPECT_EQ(1u, factory_.udp_client_sockets().size());
275 } 275 }
276 276
277 TEST_F(AsyncHostResolverTest, CancelLookup) { 277 TEST_F(AsyncHostResolverTest, CancelLookup) {
278 HostResolver::RequestHandle req0 = NULL, req2 = NULL; 278 HostResolver::RequestHandle req0 = NULL, req2 = NULL;
279 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, &req0, 279 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(),
280 &req0, BoundNetLog());
281 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
280 BoundNetLog()); 282 BoundNetLog());
281 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 283 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(),
282 BoundNetLog()); 284 &req2, BoundNetLog());
283 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, &req2,
284 BoundNetLog());
285 EXPECT_EQ(ERR_IO_PENDING, rv0); 285 EXPECT_EQ(ERR_IO_PENDING, rv0);
286 EXPECT_EQ(ERR_IO_PENDING, rv1); 286 EXPECT_EQ(ERR_IO_PENDING, rv1);
287 EXPECT_EQ(ERR_IO_PENDING, rv2); 287 EXPECT_EQ(ERR_IO_PENDING, rv2);
288 288
289 resolver_->CancelRequest(req0); 289 resolver_->CancelRequest(req0);
290 resolver_->CancelRequest(req2); 290 resolver_->CancelRequest(req2);
291 291
292 MessageLoop::current()->RunAllPending(); 292 MessageLoop::current()->RunAllPending();
293 293
294 EXPECT_FALSE(callback0_.have_result()); 294 EXPECT_FALSE(callback0_.have_result());
295 EXPECT_FALSE(callback2_.have_result()); 295 EXPECT_FALSE(callback2_.have_result());
296 296
297 rv1 = callback1_.WaitForResult(); 297 rv1 = callback1_.WaitForResult();
298 EXPECT_EQ(OK, rv1); 298 EXPECT_EQ(OK, rv1);
299 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 299 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
300 } 300 }
301 301
302 // Tests the following scenario: start two resolutions for the same host, 302 // Tests the following scenario: start two resolutions for the same host,
303 // cancel one of them, make sure that the other one completes. 303 // cancel one of them, make sure that the other one completes.
304 TEST_F(AsyncHostResolverTest, CancelSameHostLookup) { 304 TEST_F(AsyncHostResolverTest, CancelSameHostLookup) {
305 HostResolver::RequestHandle req0 = NULL; 305 HostResolver::RequestHandle req0 = NULL;
306 306
307 // Pass the info0_ to both requests. 307 // Pass the info0_ to both requests.
308 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, &req0, 308 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(),
309 BoundNetLog()); 309 &req0, BoundNetLog());
310 int rv1 = resolver_->Resolve(info0_, &addrlist1_, &callback1_, NULL, 310 int rv1 = resolver_->Resolve(info0_, &addrlist1_, callback1_.callback(), NULL,
311 BoundNetLog()); 311 BoundNetLog());
312 EXPECT_EQ(ERR_IO_PENDING, rv0); 312 EXPECT_EQ(ERR_IO_PENDING, rv0);
313 EXPECT_EQ(ERR_IO_PENDING, rv1); 313 EXPECT_EQ(ERR_IO_PENDING, rv1);
314 314
315 resolver_->CancelRequest(req0); 315 resolver_->CancelRequest(req0);
316 MessageLoop::current()->RunAllPending(); 316 MessageLoop::current()->RunAllPending();
317 EXPECT_FALSE(callback0_.have_result()); 317 EXPECT_FALSE(callback0_.have_result());
318 318
319 rv1 = callback1_.WaitForResult(); 319 rv1 = callback1_.WaitForResult();
320 EXPECT_EQ(OK, rv1); 320 EXPECT_EQ(OK, rv1);
321 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_); 321 VerifyAddressList(ip_addresses0_, kPortNum, addrlist1_);
322 322
323 EXPECT_EQ(1u, factory_.udp_client_sockets().size()); 323 EXPECT_EQ(1u, factory_.udp_client_sockets().size());
324 } 324 }
325 325
326 // Test that a queued lookup completes. 326 // Test that a queued lookup completes.
327 TEST_F(AsyncHostResolverTest, QueuedLookup) { 327 TEST_F(AsyncHostResolverTest, QueuedLookup) {
328 // kMaxTransactions is 2, thus the following requests consume all 328 // kMaxTransactions is 2, thus the following requests consume all
329 // available transactions. 329 // available transactions.
330 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 330 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
331 BoundNetLog()); 331 BoundNetLog());
332 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 332 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
333 BoundNetLog()); 333 BoundNetLog());
334 EXPECT_EQ(ERR_IO_PENDING, rv0); 334 EXPECT_EQ(ERR_IO_PENDING, rv0);
335 EXPECT_EQ(ERR_IO_PENDING, rv1); 335 EXPECT_EQ(ERR_IO_PENDING, rv1);
336 336
337 // The following request will end up in queue. 337 // The following request will end up in queue.
338 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 338 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
339 BoundNetLog()); 339 BoundNetLog());
340 EXPECT_EQ(ERR_IO_PENDING, rv2); 340 EXPECT_EQ(ERR_IO_PENDING, rv2);
341 EXPECT_EQ(1u, 341 EXPECT_EQ(1u,
342 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 342 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
343 343
344 // Make sure all requests complete. 344 // Make sure all requests complete.
345 rv0 = callback0_.WaitForResult(); 345 rv0 = callback0_.WaitForResult();
346 EXPECT_EQ(OK, rv0); 346 EXPECT_EQ(OK, rv0);
347 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 347 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
348 348
349 rv1 = callback1_.WaitForResult(); 349 rv1 = callback1_.WaitForResult();
350 EXPECT_EQ(OK, rv1); 350 EXPECT_EQ(OK, rv1);
351 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 351 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
352 352
353 rv2 = callback2_.WaitForResult(); 353 rv2 = callback2_.WaitForResult();
354 EXPECT_EQ(OK, rv2); 354 EXPECT_EQ(OK, rv2);
355 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 355 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
356 } 356 }
357 357
358 // Test that cancelling a queued lookup works. 358 // Test that cancelling a queued lookup works.
359 TEST_F(AsyncHostResolverTest, CancelPendingLookup) { 359 TEST_F(AsyncHostResolverTest, CancelPendingLookup) {
360 // kMaxTransactions is 2, thus the following requests consume all 360 // kMaxTransactions is 2, thus the following requests consume all
361 // available transactions. 361 // available transactions.
362 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 362 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
363 BoundNetLog()); 363 BoundNetLog());
364 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 364 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
365 BoundNetLog()); 365 BoundNetLog());
366 EXPECT_EQ(ERR_IO_PENDING, rv0); 366 EXPECT_EQ(ERR_IO_PENDING, rv0);
367 EXPECT_EQ(ERR_IO_PENDING, rv1); 367 EXPECT_EQ(ERR_IO_PENDING, rv1);
368 368
369 // The following request will end up in queue. 369 // The following request will end up in queue.
370 HostResolver::RequestHandle req2 = NULL; 370 HostResolver::RequestHandle req2 = NULL;
371 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, &req2, 371 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(),
372 BoundNetLog()); 372 &req2, BoundNetLog());
373 EXPECT_EQ(ERR_IO_PENDING, rv2); 373 EXPECT_EQ(ERR_IO_PENDING, rv2);
374 EXPECT_EQ(1u, 374 EXPECT_EQ(1u,
375 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 375 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
376 376
377 resolver_->CancelRequest(req2); 377 resolver_->CancelRequest(req2);
378 378
379 // Make sure first two requests complete while the cancelled one doesn't. 379 // Make sure first two requests complete while the cancelled one doesn't.
380 MessageLoop::current()->RunAllPending(); 380 MessageLoop::current()->RunAllPending();
381 EXPECT_FALSE(callback2_.have_result()); 381 EXPECT_FALSE(callback2_.have_result());
382 382
383 rv0 = callback0_.WaitForResult(); 383 rv0 = callback0_.WaitForResult();
384 EXPECT_EQ(OK, rv0); 384 EXPECT_EQ(OK, rv0);
385 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 385 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
386 386
387 rv1 = callback1_.WaitForResult(); 387 rv1 = callback1_.WaitForResult();
388 EXPECT_EQ(OK, rv1); 388 EXPECT_EQ(OK, rv1);
389 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 389 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
390 } 390 }
391 391
392 TEST_F(AsyncHostResolverTest, ResolverDestructionCancelsLookups) { 392 TEST_F(AsyncHostResolverTest, ResolverDestructionCancelsLookups) {
393 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 393 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
394 BoundNetLog()); 394 BoundNetLog());
395 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 395 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
396 BoundNetLog()); 396 BoundNetLog());
397 // This one is queued. 397 // This one is queued.
398 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 398 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
399 BoundNetLog()); 399 BoundNetLog());
400 EXPECT_EQ(1u, 400 EXPECT_EQ(1u,
401 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 401 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
402 402
403 EXPECT_EQ(ERR_IO_PENDING, rv0); 403 EXPECT_EQ(ERR_IO_PENDING, rv0);
404 EXPECT_EQ(ERR_IO_PENDING, rv1); 404 EXPECT_EQ(ERR_IO_PENDING, rv1);
405 EXPECT_EQ(ERR_IO_PENDING, rv2); 405 EXPECT_EQ(ERR_IO_PENDING, rv2);
406 406
407 resolver_.reset(); 407 resolver_.reset();
408 408
409 MessageLoop::current()->RunAllPending(); 409 MessageLoop::current()->RunAllPending();
410 410
411 EXPECT_FALSE(callback0_.have_result()); 411 EXPECT_FALSE(callback0_.have_result());
412 EXPECT_FALSE(callback1_.have_result()); 412 EXPECT_FALSE(callback1_.have_result());
413 EXPECT_FALSE(callback2_.have_result()); 413 EXPECT_FALSE(callback2_.have_result());
414 } 414 }
415 415
416 // Test that when the number of pending lookups is at max, a new lookup 416 // Test that when the number of pending lookups is at max, a new lookup
417 // with a priority lower than all of those in the queue fails. 417 // with a priority lower than all of those in the queue fails.
418 TEST_F(AsyncHostResolverTest, OverflowQueueWithLowPriorityLookup) { 418 TEST_F(AsyncHostResolverTest, OverflowQueueWithLowPriorityLookup) {
419 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 419 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
420 BoundNetLog()); 420 BoundNetLog());
421 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 421 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
422 BoundNetLog()); 422 BoundNetLog());
423 // This one is queued and fills up the queue since its size is 1. 423 // This one is queued and fills up the queue since its size is 1.
424 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 424 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
425 BoundNetLog()); 425 BoundNetLog());
426 EXPECT_EQ(1u, 426 EXPECT_EQ(1u,
427 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 427 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
428 428
429 EXPECT_EQ(ERR_IO_PENDING, rv0); 429 EXPECT_EQ(ERR_IO_PENDING, rv0);
430 EXPECT_EQ(ERR_IO_PENDING, rv1); 430 EXPECT_EQ(ERR_IO_PENDING, rv1);
431 EXPECT_EQ(ERR_IO_PENDING, rv2); 431 EXPECT_EQ(ERR_IO_PENDING, rv2);
432 432
433 // This one fails. 433 // This one fails.
434 info3_.set_priority(LOWEST); 434 info3_.set_priority(LOWEST);
435 int rv3 = resolver_->Resolve(info3_, &addrlist3_, &callback3_, NULL, 435 int rv3 = resolver_->Resolve(info3_, &addrlist3_, callback3_.callback(), NULL,
436 BoundNetLog()); 436 BoundNetLog());
437 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv3); 437 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv3);
438 438
439 MessageLoop::current()->RunAllPending(); 439 MessageLoop::current()->RunAllPending();
440 EXPECT_FALSE(callback3_.have_result()); 440 EXPECT_FALSE(callback3_.have_result());
441 } 441 }
442 442
443 // Test that when the number of pending lookups is at max, a new lookup 443 // Test that when the number of pending lookups is at max, a new lookup
444 // with a priority higher than any of those in the queue succeeds and 444 // with a priority higher than any of those in the queue succeeds and
445 // causes the lowest priority lookup in the queue to fail. 445 // causes the lowest priority lookup in the queue to fail.
446 TEST_F(AsyncHostResolverTest, OverflowQueueWithHighPriorityLookup) { 446 TEST_F(AsyncHostResolverTest, OverflowQueueWithHighPriorityLookup) {
447 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 447 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
448 BoundNetLog()); 448 BoundNetLog());
449 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 449 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
450 BoundNetLog()); 450 BoundNetLog());
451 451
452 // Next lookup is queued. Since this will be ejected from the queue and 452 // Next lookup is queued. Since this will be ejected from the queue and
453 // will not consume a socket from our factory, we are not passing it 453 // will not consume a socket from our factory, we are not passing it
454 // predefined members. 454 // predefined members.
455 HostResolver::RequestInfo info(HostPortPair("cnn.com", 80)); 455 HostResolver::RequestInfo info(HostPortPair("cnn.com", 80));
456 info.set_address_family(ADDRESS_FAMILY_IPV4); 456 info.set_address_family(ADDRESS_FAMILY_IPV4);
457 AddressList addrlist_fail; 457 AddressList addrlist_fail;
458 TestOldCompletionCallback callback_fail; 458 TestCompletionCallback callback_fail;
459 int rv_fail = resolver_->Resolve(info, &addrlist_fail, &callback_fail, NULL, 459 int rv_fail = resolver_->Resolve(info, &addrlist_fail,
460 callback_fail.callback(), NULL,
460 BoundNetLog()); 461 BoundNetLog());
461 EXPECT_EQ(1u, 462 EXPECT_EQ(1u,
462 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending()); 463 static_cast<AsyncHostResolver*>(resolver_.get())->GetNumPending());
463 464
464 EXPECT_EQ(ERR_IO_PENDING, rv0); 465 EXPECT_EQ(ERR_IO_PENDING, rv0);
465 EXPECT_EQ(ERR_IO_PENDING, rv1); 466 EXPECT_EQ(ERR_IO_PENDING, rv1);
466 EXPECT_EQ(ERR_IO_PENDING, rv_fail); 467 EXPECT_EQ(ERR_IO_PENDING, rv_fail);
467 468
468 // Lookup 2 causes the above to fail, but itself should succeed. 469 // Lookup 2 causes the above to fail, but itself should succeed.
469 info2_.set_priority(HIGHEST); 470 info2_.set_priority(HIGHEST);
470 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 471 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
471 BoundNetLog()); 472 BoundNetLog());
472 473
473 rv0 = callback0_.WaitForResult(); 474 rv0 = callback0_.WaitForResult();
474 EXPECT_EQ(OK, rv0); 475 EXPECT_EQ(OK, rv0);
475 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_); 476 VerifyAddressList(ip_addresses0_, kPortNum, addrlist0_);
476 477
477 rv1 = callback1_.WaitForResult(); 478 rv1 = callback1_.WaitForResult();
478 EXPECT_EQ(OK, rv1); 479 EXPECT_EQ(OK, rv1);
479 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_); 480 VerifyAddressList(ip_addresses1_, kPortNum, addrlist1_);
480 481
481 rv_fail = callback_fail.WaitForResult(); 482 rv_fail = callback_fail.WaitForResult();
482 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv_fail); 483 EXPECT_EQ(ERR_HOST_RESOLVER_QUEUE_TOO_LARGE, rv_fail);
483 EXPECT_EQ(static_cast<addrinfo*>(NULL), addrlist_fail.head()); 484 EXPECT_EQ(static_cast<addrinfo*>(NULL), addrlist_fail.head());
484 485
485 rv2 = callback2_.WaitForResult(); 486 rv2 = callback2_.WaitForResult();
486 EXPECT_EQ(OK, rv2); 487 EXPECT_EQ(OK, rv2);
487 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 488 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
488 } 489 }
489 490
490 // Test that registering, unregistering, and notifying of observers of 491 // Test that registering, unregistering, and notifying of observers of
491 // resolution start, completion and cancellation (both due to CancelRequest 492 // resolution start, completion and cancellation (both due to CancelRequest
492 // and resolver destruction) work. 493 // and resolver destruction) work.
493 TEST_F(AsyncHostResolverTest, Observers) { 494 TEST_F(AsyncHostResolverTest, Observers) {
494 TestHostResolverObserver observer; 495 TestHostResolverObserver observer;
495 resolver_->AddObserver(&observer); 496 resolver_->AddObserver(&observer);
496 497
497 int rv0 = resolver_->Resolve(info0_, &addrlist0_, &callback0_, NULL, 498 int rv0 = resolver_->Resolve(info0_, &addrlist0_, callback0_.callback(), NULL,
498 BoundNetLog()); 499 BoundNetLog());
499 int rv1 = resolver_->Resolve(info1_, &addrlist1_, &callback1_, NULL, 500 int rv1 = resolver_->Resolve(info1_, &addrlist1_, callback1_.callback(), NULL,
500 BoundNetLog()); 501 BoundNetLog());
501 // We will cancel this one. 502 // We will cancel this one.
502 HostResolver::RequestHandle req2 = NULL; 503 HostResolver::RequestHandle req2 = NULL;
503 int rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, &req2, 504 int rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(),
504 BoundNetLog()); 505 &req2, BoundNetLog());
505 EXPECT_EQ(ERR_IO_PENDING, rv0); 506 EXPECT_EQ(ERR_IO_PENDING, rv0);
506 EXPECT_EQ(ERR_IO_PENDING, rv1); 507 EXPECT_EQ(ERR_IO_PENDING, rv1);
507 EXPECT_EQ(ERR_IO_PENDING, rv2); 508 EXPECT_EQ(ERR_IO_PENDING, rv2);
508 509
509 // Cancel lookup 2. 510 // Cancel lookup 2.
510 resolver_->CancelRequest(req2); 511 resolver_->CancelRequest(req2);
511 512
512 // Lookup 0 and 1 should succeed. 513 // Lookup 0 and 1 should succeed.
513 rv0 = callback0_.WaitForResult(); 514 rv0 = callback0_.WaitForResult();
514 EXPECT_EQ(OK, rv0); 515 EXPECT_EQ(OK, rv0);
(...skipping 27 matching lines...) Expand all
542 // Lookup 2 was cancelled, hence, failed to finish. 543 // Lookup 2 was cancelled, hence, failed to finish.
543 EXPECT_TRUE(observer.start_log[2] == 544 EXPECT_TRUE(observer.start_log[2] ==
544 TestHostResolverObserver::StartOrCancelEntry(2, info2_)); 545 TestHostResolverObserver::StartOrCancelEntry(2, info2_));
545 EXPECT_TRUE(observer.cancel_log[0] == 546 EXPECT_TRUE(observer.cancel_log[0] ==
546 TestHostResolverObserver::StartOrCancelEntry(2, info2_)); 547 TestHostResolverObserver::StartOrCancelEntry(2, info2_));
547 548
548 // Unregister observer. 549 // Unregister observer.
549 resolver_->RemoveObserver(&observer); 550 resolver_->RemoveObserver(&observer);
550 551
551 // We will do lookup 2 again but will not cancel it this time. 552 // We will do lookup 2 again but will not cancel it this time.
552 rv2 = resolver_->Resolve(info2_, &addrlist2_, &callback2_, NULL, 553 rv2 = resolver_->Resolve(info2_, &addrlist2_, callback2_.callback(), NULL,
553 BoundNetLog()); 554 BoundNetLog());
554 EXPECT_EQ(ERR_IO_PENDING, rv2); 555 EXPECT_EQ(ERR_IO_PENDING, rv2);
555 556
556 // Run lookup 2 to completion. 557 // Run lookup 2 to completion.
557 rv2 = callback2_.WaitForResult(); 558 rv2 = callback2_.WaitForResult();
558 EXPECT_EQ(OK, rv2); 559 EXPECT_EQ(OK, rv2);
559 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_); 560 VerifyAddressList(ip_addresses2_, kPortNum, addrlist2_);
560 561
561 // Observer log should stay the same. 562 // Observer log should stay the same.
562 EXPECT_EQ(3u, observer.start_log.size()); 563 EXPECT_EQ(3u, observer.start_log.size());
563 EXPECT_EQ(2u, observer.finish_log.size()); 564 EXPECT_EQ(2u, observer.finish_log.size());
564 EXPECT_EQ(1u, observer.cancel_log.size()); 565 EXPECT_EQ(1u, observer.cancel_log.size());
565 566
566 // Re-register observer. 567 // Re-register observer.
567 resolver_->AddObserver(&observer); 568 resolver_->AddObserver(&observer);
568 569
569 // Start lookup 3. 570 // Start lookup 3.
570 int rv3 = resolver_->Resolve(info3_, &addrlist3_, &callback3_, NULL, 571 int rv3 = resolver_->Resolve(info3_, &addrlist3_, callback3_.callback(), NULL,
571 BoundNetLog()); 572 BoundNetLog());
572 EXPECT_EQ(ERR_IO_PENDING, rv3); 573 EXPECT_EQ(ERR_IO_PENDING, rv3);
573 574
574 // Destroy the resolver and make sure that observer was notified of just 575 // Destroy the resolver and make sure that observer was notified of just
575 // the resolution start. 576 // the resolution start.
576 resolver_.reset(); 577 resolver_.reset();
577 578
578 EXPECT_EQ(4u, observer.start_log.size()); // Was incremented by 1. 579 EXPECT_EQ(4u, observer.start_log.size()); // Was incremented by 1.
579 EXPECT_EQ(2u, observer.finish_log.size()); 580 EXPECT_EQ(2u, observer.finish_log.size());
580 EXPECT_EQ(2u, observer.cancel_log.size()); 581 EXPECT_EQ(2u, observer.cancel_log.size());
581 582
582 EXPECT_TRUE(observer.start_log[3] == 583 EXPECT_TRUE(observer.start_log[3] ==
583 TestHostResolverObserver::StartOrCancelEntry(4, info3_)); 584 TestHostResolverObserver::StartOrCancelEntry(4, info3_));
584 } 585 }
585 586
586 } // namespace net 587 } // namespace net
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698