Index: net/base/host_cache_unittest.cc |
diff --git a/net/base/host_cache_unittest.cc b/net/base/host_cache_unittest.cc |
index 141cfde0b7e6e850560555795489daf10a03f4a0..2ed47abf4d678096e4334c6318c49f570ca5c227 100644 |
--- a/net/base/host_cache_unittest.cc |
+++ b/net/base/host_cache_unittest.cc |
@@ -1,4 +1,4 @@ |
-// Copyright (c) 2009 The Chromium Authors. All rights reserved. |
+// Copyright (c) 2010 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -20,7 +20,7 @@ const base::TimeDelta kFailureEntryTTL = base::TimeDelta::FromSeconds(0); |
// Builds a key for |hostname|, defaulting the address family to unspecified. |
HostCache::Key Key(const std::string& hostname) { |
- return HostCache::Key(hostname, ADDRESS_FAMILY_UNSPECIFIED); |
+ return HostCache::Key(hostname, ADDRESS_FAMILY_UNSPECIFIED, 0); |
} |
} // namespace |
@@ -276,8 +276,8 @@ TEST(HostCacheTest, AddressFamilyIsPartOfKey) { |
// t=0. |
base::TimeTicks now; |
- HostCache::Key key1("foobar.com", ADDRESS_FAMILY_UNSPECIFIED); |
- HostCache::Key key2("foobar.com", ADDRESS_FAMILY_IPV4); |
+ HostCache::Key key1("foobar.com", ADDRESS_FAMILY_UNSPECIFIED, 0); |
+ HostCache::Key key2("foobar.com", ADDRESS_FAMILY_IPV4, 0); |
const HostCache::Entry* entry1 = NULL; // Entry for key1 |
const HostCache::Entry* entry2 = NULL; // Entry for key2 |
@@ -303,6 +303,42 @@ TEST(HostCacheTest, AddressFamilyIsPartOfKey) { |
EXPECT_NE(entry1, entry2); |
} |
+// Tests that the same hostname can be duplicated in the cache, so long as |
+// the HostResolverFlags differ. |
+TEST(HostCacheTest, HostResolverFlagsArePartOfKey) { |
+ HostCache cache(kMaxCacheEntries, kSuccessEntryTTL, kFailureEntryTTL); |
+ |
+ // t=0. |
+ base::TimeTicks now; |
+ |
+ HostCache::Key key1("foobar.com", ADDRESS_FAMILY_IPV4, 0); |
+ HostCache::Key key2("foobar.com", ADDRESS_FAMILY_IPV4, |
+ HOST_RESOLVER_FLAGS_CANONNAME); |
+ |
+ const HostCache::Entry* entry1 = NULL; // Entry for key1 |
+ const HostCache::Entry* entry2 = NULL; // Entry for key2 |
+ |
+ EXPECT_EQ(0U, cache.size()); |
+ |
+ // Add an entry for ("foobar.com", IPV4, NONE) at t=0. |
+ EXPECT_TRUE(cache.Lookup(key1, base::TimeTicks()) == NULL); |
+ cache.Set(key1, OK, AddressList(), now); |
+ entry1 = cache.Lookup(key1, base::TimeTicks()); |
+ EXPECT_FALSE(entry1 == NULL); |
+ EXPECT_EQ(1U, cache.size()); |
+ |
+ // Add an entry for ("foobar.com", IPV4, CANONNAME) at t=0. |
+ EXPECT_TRUE(cache.Lookup(key2, base::TimeTicks()) == NULL); |
+ cache.Set(key2, OK, AddressList(), now); |
+ entry2 = cache.Lookup(key2, base::TimeTicks()); |
+ EXPECT_FALSE(entry2 == NULL); |
+ EXPECT_EQ(2U, cache.size()); |
+ |
+ // Even though the hostnames were the same, we should have two unique |
+ // entries (because the HostResolverFlags differ). |
+ EXPECT_NE(entry1, entry2); |
+} |
+ |
TEST(HostCacheTest, NoCache) { |
// Disable caching. |
HostCache cache(0, kSuccessEntryTTL, kFailureEntryTTL); |
@@ -353,33 +389,52 @@ TEST(HostCacheTest, KeyComparators) { |
int expected_comparison; |
} tests[] = { |
{ |
- HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED), |
- HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
0 |
}, |
{ |
- HostCache::Key("host1", ADDRESS_FAMILY_IPV4), |
- HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED), |
+ HostCache::Key("host1", ADDRESS_FAMILY_IPV4, 0), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
1 |
}, |
{ |
- HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED), |
- HostCache::Key("host1", ADDRESS_FAMILY_IPV4), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ HostCache::Key("host1", ADDRESS_FAMILY_IPV4, 0), |
-1 |
}, |
{ |
- HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED), |
- HostCache::Key("host2", ADDRESS_FAMILY_UNSPECIFIED), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ HostCache::Key("host2", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ -1 |
+ }, |
+ { |
+ HostCache::Key("host1", ADDRESS_FAMILY_IPV4, 0), |
+ HostCache::Key("host2", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ 1 |
+ }, |
+ { |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ HostCache::Key("host2", ADDRESS_FAMILY_IPV4, 0), |
+ -1 |
+ }, |
+ { |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, |
+ HOST_RESOLVER_FLAGS_CANONNAME), |
-1 |
}, |
{ |
- HostCache::Key("host1", ADDRESS_FAMILY_IPV4), |
- HostCache::Key("host2", ADDRESS_FAMILY_UNSPECIFIED), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, |
+ HOST_RESOLVER_FLAGS_CANONNAME), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, 0), |
1 |
}, |
{ |
- HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED), |
- HostCache::Key("host2", ADDRESS_FAMILY_IPV4), |
+ HostCache::Key("host1", ADDRESS_FAMILY_UNSPECIFIED, |
+ HOST_RESOLVER_FLAGS_CANONNAME), |
+ HostCache::Key("host2", ADDRESS_FAMILY_UNSPECIFIED, |
+ HOST_RESOLVER_FLAGS_CANONNAME), |
-1 |
}, |
}; |