@@ -151,13 +151,16 @@ class StaleHostResolverTest : public testing::Test {
151151 }
152152
153153 // Creates a cache entry for |kHostname| that is |age_sec| seconds old.
154- void CreateCacheEntry (int age_sec) {
154+ void CreateCacheEntry (int age_sec, int error ) {
155155 DCHECK (resolver_);
156156 DCHECK (resolver_->GetHostCache ());
157157
158158 base::TimeDelta ttl (base::TimeDelta::FromSeconds (kCacheEntryTTLSec ));
159159 net::HostCache::Key key (kHostname , net::ADDRESS_FAMILY_IPV4, 0 );
160- net::HostCache::Entry entry (net::OK, MakeAddressList (kCacheAddress ), ttl);
160+ net::HostCache::Entry entry (
161+ error,
162+ error == net::OK ? MakeAddressList (kCacheAddress ) : net::AddressList (),
163+ ttl);
161164 base::TimeDelta age = base::TimeDelta::FromSeconds (age_sec);
162165 base::TimeTicks then = base::TimeTicks::Now () - age;
163166 resolver_->GetHostCache ()->Set (key, entry, then, ttl);
@@ -299,7 +302,7 @@ TEST_F(StaleHostResolverTest, Network) {
299302
300303TEST_F (StaleHostResolverTest, FreshCache) {
301304 CreateResolver ();
302- CreateCacheEntry (kAgeFreshSec );
305+ CreateCacheEntry (kAgeFreshSec , net::OK );
303306
304307 Resolve ();
305308
@@ -314,7 +317,7 @@ TEST_F(StaleHostResolverTest, FreshCache) {
314317TEST_F (StaleHostResolverTest, StaleCache) {
315318 SetStaleDelay (kNoStaleDelaySec );
316319 CreateResolver ();
317- CreateCacheEntry (kAgeExpiredSec );
320+ CreateCacheEntry (kAgeExpiredSec , net::OK );
318321
319322 Resolve ();
320323 WaitForResolve ();
@@ -328,7 +331,7 @@ TEST_F(StaleHostResolverTest, StaleCache) {
328331TEST_F (StaleHostResolverTest, NetworkWithStaleCache) {
329332 SetStaleDelay (kLongStaleDelaySec );
330333 CreateResolver ();
331- CreateCacheEntry (kAgeExpiredSec );
334+ CreateCacheEntry (kAgeExpiredSec , net::OK );
332335
333336 Resolve ();
334337 WaitForResolve ();
@@ -356,7 +359,7 @@ TEST_F(StaleHostResolverTest, CancelWithNoCache) {
356359TEST_F (StaleHostResolverTest, CancelWithStaleCache) {
357360 SetStaleDelay (kLongStaleDelaySec );
358361 CreateResolver ();
359- CreateCacheEntry (kAgeExpiredSec );
362+ CreateCacheEntry (kAgeExpiredSec , net::OK );
360363
361364 Resolve ();
362365
@@ -380,39 +383,50 @@ TEST_F(StaleHostResolverTest, StaleUsability) {
380383 int age_sec;
381384 int stale_use;
382385 int network_changes;
386+ int error;
383387
384388 bool usable;
385389 } kUsabilityTestCases [] = {
386390 // Fresh data always accepted.
387- {0 , 0 , true , -1 , 1 , 0 , true },
388- {1 , 1 , false , -1 , 1 , 0 , true },
391+ {0 , 0 , true , -1 , 1 , 0 , net::OK, true },
392+ {1 , 1 , false , -1 , 1 , 0 , net::OK, true },
389393
390394 // Unlimited expired time accepts non-zero time.
391- {0 , 0 , true , 1 , 1 , 0 , true },
395+ {0 , 0 , true , 1 , 1 , 0 , net::OK, true },
392396
393397 // Limited expired time accepts before but not after limit.
394- {2 , 0 , true , 1 , 1 , 0 , true },
395- {2 , 0 , true , 3 , 1 , 0 , false },
398+ {2 , 0 , true , 1 , 1 , 0 , net::OK, true },
399+ {2 , 0 , true , 3 , 1 , 0 , net::OK, false },
396400
397401 // Unlimited stale uses accepts first and later uses.
398- {2 , 0 , true , 1 , 1 , 0 , true },
399- {2 , 0 , true , 1 , 9 , 0 , true },
402+ {2 , 0 , true , 1 , 1 , 0 , net::OK, true },
403+ {2 , 0 , true , 1 , 9 , 0 , net::OK, true },
400404
401405 // Limited stale uses accepts up to and including limit.
402- {2 , 2 , true , 1 , 1 , 0 , true },
403- {2 , 2 , true , 1 , 2 , 0 , true },
404- {2 , 2 , true , 1 , 3 , 0 , false },
405- {2 , 2 , true , 1 , 9 , 0 , false },
406+ {2 , 2 , true , 1 , 1 , 0 , net::OK, true },
407+ {2 , 2 , true , 1 , 2 , 0 , net::OK, true },
408+ {2 , 2 , true , 1 , 3 , 0 , net::OK, false },
409+ {2 , 2 , true , 1 , 9 , 0 , net::OK, false },
406410
407411 // Allowing other networks accepts zero or more network changes.
408- {2 , 0 , true , 1 , 1 , 0 , true },
409- {2 , 0 , true , 1 , 1 , 1 , true },
410- {2 , 0 , true , 1 , 1 , 9 , true },
412+ {2 , 0 , true , 1 , 1 , 0 , net::OK, true },
413+ {2 , 0 , true , 1 , 1 , 1 , net::OK, true },
414+ {2 , 0 , true , 1 , 1 , 9 , net::OK, true },
411415
412416 // Disallowing other networks only accepts zero network changes.
413- {2 , 0 , false , 1 , 1 , 0 , true },
414- {2 , 0 , false , 1 , 1 , 1 , false },
415- {2 , 0 , false , 1 , 1 , 9 , false },
417+ {2 , 0 , false , 1 , 1 , 0 , net::OK, true },
418+ {2 , 0 , false , 1 , 1 , 1 , net::OK, false },
419+ {2 , 0 , false , 1 , 1 , 9 , net::OK, false },
420+
421+ // Errors are only accepted if fresh.
422+ {0 , 0 , true , -1 , 1 , 0 , net::ERR_NAME_NOT_RESOLVED, true },
423+ {1 , 1 , false , -1 , 1 , 0 , net::ERR_NAME_NOT_RESOLVED, true },
424+ {0 , 0 , true , 1 , 1 , 0 , net::ERR_NAME_NOT_RESOLVED, false },
425+ {2 , 0 , true , 1 , 1 , 0 , net::ERR_NAME_NOT_RESOLVED, false },
426+ {2 , 0 , true , 1 , 1 , 0 , net::ERR_NAME_NOT_RESOLVED, false },
427+ {2 , 2 , true , 1 , 2 , 0 , net::ERR_NAME_NOT_RESOLVED, false },
428+ {2 , 0 , true , 1 , 1 , 1 , net::ERR_NAME_NOT_RESOLVED, false },
429+ {2 , 0 , false , 1 , 1 , 0 , net::ERR_NAME_NOT_RESOLVED, false },
416430 };
417431
418432 SetStaleDelay (kNoStaleDelaySec );
@@ -424,7 +438,7 @@ TEST_F(StaleHostResolverTest, StaleUsability) {
424438 SetStaleUsability (test_case.max_expired_time_sec , test_case.max_stale_uses ,
425439 test_case.allow_other_network );
426440 CreateResolver ();
427- CreateCacheEntry (kCacheEntryTTLSec + test_case.age_sec );
441+ CreateCacheEntry (kCacheEntryTTLSec + test_case.age_sec , test_case. error );
428442 for (int j = 0 ; j < test_case.network_changes ; ++j)
429443 OnNetworkChange ();
430444 for (int j = 0 ; j < test_case.stale_use - 1 ; ++j)
@@ -433,11 +447,24 @@ TEST_F(StaleHostResolverTest, StaleUsability) {
433447 Resolve ();
434448 WaitForResolve ();
435449 EXPECT_TRUE (resolve_complete ()) << i;
436- EXPECT_EQ (net::OK, resolve_error ()) << i;
437- EXPECT_EQ (1u , resolve_addresses ().size ()) << i;
438- {
439- const char * expected = test_case.usable ? kCacheAddress : kNetworkAddress ;
440- EXPECT_EQ (expected, resolve_addresses ()[0 ].ToStringWithoutPort ()) << i;
450+
451+ if (test_case.error == net::OK) {
452+ EXPECT_EQ (test_case.error , resolve_error ()) << i;
453+ EXPECT_EQ (1u , resolve_addresses ().size ()) << i;
454+ {
455+ const char * expected =
456+ test_case.usable ? kCacheAddress : kNetworkAddress ;
457+ EXPECT_EQ (expected, resolve_addresses ()[0 ].ToStringWithoutPort ()) << i;
458+ }
459+ } else {
460+ if (test_case.usable ) {
461+ EXPECT_EQ (test_case.error , resolve_error ()) << i;
462+ } else {
463+ EXPECT_EQ (net::OK, resolve_error ()) << i;
464+ EXPECT_EQ (1u , resolve_addresses ().size ()) << i;
465+ EXPECT_EQ (kNetworkAddress , resolve_addresses ()[0 ].ToStringWithoutPort ())
466+ << i;
467+ }
441468 }
442469
443470 DestroyResolver ();
@@ -492,7 +519,7 @@ TEST_F(StaleHostResolverTest, CreatedByContext) {
492519
493520 // Note: Experimental config above sets 0ms stale delay.
494521 SetResolver (context->host_resolver ());
495- CreateCacheEntry (kAgeExpiredSec );
522+ CreateCacheEntry (kAgeExpiredSec , net::OK );
496523
497524 Resolve ();
498525 EXPECT_FALSE (resolve_complete ());
0 commit comments