Home | History | Annotate | Download | only in base
      1 // Copyright (c) 2006-2008 The Chromium Authors. All rights reserved.
      2 // Use of this source code is governed by a BSD-style license that can be
      3 // found in the LICENSE file.
      4 
      5 #include "googleurl/src/gurl.h"
      6 #include "net/base/registry_controlled_domain.h"
      7 #include "testing/gtest/include/gtest/gtest.h"
      8 
      9 #include "effective_tld_names_unittest1.cc"
     10 #undef TOTAL_KEYWORDS
     11 #undef MIN_WORD_LENGTH
     12 #undef MAX_WORD_LENGTH
     13 #undef MIN_HASH_VALUE
     14 #undef MAX_HASH_VALUE
     15 #include "effective_tld_names_unittest2.cc"
     16 
     17 namespace {
     18 
     19 class TestRegistryControlledDomainService :
     20     public net::RegistryControlledDomainService {
     21  public:
     22   // Sets the given data.
     23   static void UseDomainData(FindDomainPtr function) {
     24     net::RegistryControlledDomainService::UseFindDomainFunction(function);
     25   }
     26 
     27   // Creates a new dedicated instance to be used for testing, deleting any
     28   // previously-set one.
     29   static void UseDedicatedInstance() {
     30     delete static_cast<TestRegistryControlledDomainService*>(
     31         SetInstance(new TestRegistryControlledDomainService()));
     32   }
     33 
     34   // Restores RegistryControlledDomainService to using its default instance,
     35   // deleting any previously-set test instance.
     36   static void UseDefaultInstance() {
     37     delete static_cast<TestRegistryControlledDomainService*>(SetInstance(NULL));
     38   }
     39 };
     40 
     41 class RegistryControlledDomainTest : public testing::Test {
     42  protected:
     43   virtual void SetUp() {
     44     TestRegistryControlledDomainService::UseDedicatedInstance();
     45   }
     46 
     47   virtual void TearDown() {
     48     TestRegistryControlledDomainService::UseDefaultInstance();
     49   }
     50 };
     51 
     52 
     53 std::string GetDomainFromURL(const std::string& url) {
     54   return TestRegistryControlledDomainService::GetDomainAndRegistry(GURL(url));
     55 }
     56 
     57 std::string GetDomainFromHost(const std::wstring& host) {
     58   return TestRegistryControlledDomainService::GetDomainAndRegistry(host);
     59 }
     60 
     61 size_t GetRegistryLengthFromURL(const std::string& url,
     62                                 bool allow_unknown_registries) {
     63   return TestRegistryControlledDomainService::GetRegistryLength(GURL(url),
     64       allow_unknown_registries);
     65 }
     66 
     67 size_t GetRegistryLengthFromHost(const std::wstring& host,
     68                                  bool allow_unknown_registries) {
     69   return TestRegistryControlledDomainService::GetRegistryLength(host,
     70       allow_unknown_registries);
     71 }
     72 
     73 bool CompareDomains(const std::string& url1, const std::string& url2) {
     74   GURL g1 = GURL(url1);
     75   GURL g2 = GURL(url2);
     76   return TestRegistryControlledDomainService::SameDomainOrHost(g1, g2);
     77 }
     78 
     79 TEST_F(RegistryControlledDomainTest, TestGetDomainAndRegistry) {
     80   TestRegistryControlledDomainService::UseDomainData(
     81       Perfect_Hash_Test1::FindDomain);
     82 
     83   // Test GURL version of GetDomainAndRegistry().
     84   EXPECT_EQ("baz.jp", GetDomainFromURL("http://a.baz.jp/file.html"));   // 1
     85   EXPECT_EQ("baz.jp.", GetDomainFromURL("http://a.baz.jp./file.html")); // 1
     86   EXPECT_EQ("", GetDomainFromURL("http://ac.jp"));                      // 2
     87   EXPECT_EQ("", GetDomainFromURL("http://a.bar.jp"));                   // 3
     88   EXPECT_EQ("", GetDomainFromURL("http://bar.jp"));                     // 3
     89   EXPECT_EQ("", GetDomainFromURL("http://baz.bar.jp"));                 // 3 4
     90   EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromURL("http://a.b.baz.bar.jp"));
     91                                                                         // 4
     92   EXPECT_EQ("pref.bar.jp", GetDomainFromURL("http://baz.pref.bar.jp")); // 5
     93   EXPECT_EQ("b.bar.baz.com.", GetDomainFromURL("http://a.b.bar.baz.com."));
     94                                                                         // 6
     95   EXPECT_EQ("a.d.c", GetDomainFromURL("http://a.d.c"));                 // 7
     96   EXPECT_EQ("a.d.c", GetDomainFromURL("http://.a.d.c"));                // 7
     97   EXPECT_EQ("a.d.c", GetDomainFromURL("http://..a.d.c"));               // 7
     98   EXPECT_EQ("b.c", GetDomainFromURL("http://a.b.c"));                   // 7 8
     99   EXPECT_EQ("baz.com", GetDomainFromURL("http://baz.com"));             // none
    100   EXPECT_EQ("baz.com.", GetDomainFromURL("http://baz.com."));           // none
    101 
    102   EXPECT_EQ("", GetDomainFromURL(""));
    103   EXPECT_EQ("", GetDomainFromURL("http://"));
    104   EXPECT_EQ("", GetDomainFromURL("file:///C:/file.html"));
    105   EXPECT_EQ("", GetDomainFromURL("http://foo.com.."));
    106   EXPECT_EQ("", GetDomainFromURL("http://..."));
    107   EXPECT_EQ("", GetDomainFromURL("http://192.168.0.1"));
    108   EXPECT_EQ("", GetDomainFromURL("http://localhost"));
    109   EXPECT_EQ("", GetDomainFromURL("http://localhost."));
    110   EXPECT_EQ("", GetDomainFromURL("http:////Comment"));
    111 
    112   // Test std::wstring version of GetDomainAndRegistry().  Uses the same
    113   // underpinnings as the GURL version, so this is really more of a check of
    114   // CanonicalizeHost().
    115   EXPECT_EQ("baz.jp", GetDomainFromHost(L"a.baz.jp"));                 // 1
    116   EXPECT_EQ("baz.jp.", GetDomainFromHost(L"a.baz.jp."));               // 1
    117   EXPECT_EQ("", GetDomainFromHost(L"ac.jp"));                          // 2
    118   EXPECT_EQ("", GetDomainFromHost(L"a.bar.jp"));                       // 3
    119   EXPECT_EQ("", GetDomainFromHost(L"bar.jp"));                         // 3
    120   EXPECT_EQ("", GetDomainFromHost(L"baz.bar.jp"));                     // 3 4
    121   EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromHost(L"a.b.baz.bar.jp"));   // 3 4
    122   EXPECT_EQ("pref.bar.jp", GetDomainFromHost(L"baz.pref.bar.jp"));     // 5
    123   EXPECT_EQ("b.bar.baz.com.", GetDomainFromHost(L"a.b.bar.baz.com.")); // 6
    124   EXPECT_EQ("a.d.c", GetDomainFromHost(L"a.d.c"));                     // 7
    125   EXPECT_EQ("a.d.c", GetDomainFromHost(L".a.d.c"));                    // 7
    126   EXPECT_EQ("a.d.c", GetDomainFromHost(L"..a.d.c"));                   // 7
    127   EXPECT_EQ("b.c", GetDomainFromHost(L"a.b.c"));                       // 7 8
    128   EXPECT_EQ("baz.com", GetDomainFromHost(L"baz.com"));                 // none
    129   EXPECT_EQ("baz.com.", GetDomainFromHost(L"baz.com."));               // none
    130 
    131   EXPECT_EQ("", GetDomainFromHost(L""));
    132   EXPECT_EQ("", GetDomainFromHost(L"foo.com.."));
    133   EXPECT_EQ("", GetDomainFromHost(L"..."));
    134   EXPECT_EQ("", GetDomainFromHost(L"192.168.0.1"));
    135   EXPECT_EQ("", GetDomainFromHost(L"localhost."));
    136   EXPECT_EQ("", GetDomainFromHost(L".localhost."));
    137 }
    138 
    139 TEST_F(RegistryControlledDomainTest, TestGetRegistryLength) {
    140   TestRegistryControlledDomainService::UseDomainData(
    141       Perfect_Hash_Test1::FindDomain);
    142 
    143   // Test GURL version of GetRegistryLength().
    144   EXPECT_EQ(2U, GetRegistryLengthFromURL("http://a.baz.jp/file.html", false));
    145                                                                         // 1
    146   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://a.baz.jp./file.html", false));
    147                                                                         // 1
    148   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://ac.jp", false));       // 2
    149   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://a.bar.jp", false));    // 3
    150   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://bar.jp", false));      // 3
    151   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.bar.jp", false));  // 3 4
    152   EXPECT_EQ(12U, GetRegistryLengthFromURL("http://a.b.baz.bar.jp", false));
    153                                                                         // 4
    154   EXPECT_EQ(6U, GetRegistryLengthFromURL("http://baz.pref.bar.jp", false));
    155                                                                         // 5
    156   EXPECT_EQ(11U, GetRegistryLengthFromURL("http://a.b.bar.baz.com", false));
    157                                                                         // 6
    158   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://a.d.c", false));       // 7
    159   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://.a.d.c", false));      // 7
    160   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://..a.d.c", false));     // 7
    161   EXPECT_EQ(1U, GetRegistryLengthFromURL("http://a.b.c", false));       // 7 8
    162   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.com", false));     // none
    163   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://baz.com.", false));    // none
    164   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://baz.com", true));      // none
    165   EXPECT_EQ(4U, GetRegistryLengthFromURL("http://baz.com.", true));     // none
    166 
    167   EXPECT_EQ(std::string::npos, GetRegistryLengthFromURL("", false));
    168   EXPECT_EQ(std::string::npos, GetRegistryLengthFromURL("http://", false));
    169   EXPECT_EQ(std::string::npos,
    170             GetRegistryLengthFromURL("file:///C:/file.html", false));
    171   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://foo.com..", false));
    172   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://...", false));
    173   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://192.168.0.1", false));
    174   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost", false));
    175   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost", true));
    176   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.", false));
    177   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://localhost.", true));
    178   EXPECT_EQ(0U, GetRegistryLengthFromURL("http:////Comment", false));
    179 
    180   // Test std::wstring version of GetRegistryLength().  Uses the same
    181   // underpinnings as the GURL version, so this is really more of a check of
    182   // CanonicalizeHost().
    183   EXPECT_EQ(2U, GetRegistryLengthFromHost(L"a.baz.jp", false));         // 1
    184   EXPECT_EQ(3U, GetRegistryLengthFromHost(L"a.baz.jp.", false));        // 1
    185   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"ac.jp", false));            // 2
    186   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"a.bar.jp", false));         // 3
    187   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"bar.jp", false));           // 3
    188   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"baz.bar.jp", false));       // 3 4
    189   EXPECT_EQ(12U, GetRegistryLengthFromHost(L"a.b.baz.bar.jp", false));  // 4
    190   EXPECT_EQ(6U, GetRegistryLengthFromHost(L"baz.pref.bar.jp", false));  // 5
    191   EXPECT_EQ(11U, GetRegistryLengthFromHost(L"a.b.bar.baz.com", false));
    192                                                                         // 6
    193   EXPECT_EQ(3U, GetRegistryLengthFromHost(L"a.d.c", false));            // 7
    194   EXPECT_EQ(3U, GetRegistryLengthFromHost(L".a.d.c", false));           // 7
    195   EXPECT_EQ(3U, GetRegistryLengthFromHost(L"..a.d.c", false));          // 7
    196   EXPECT_EQ(1U, GetRegistryLengthFromHost(L"a.b.c", false));            // 7 8
    197   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"baz.com", false));          // none
    198   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"baz.com.", false));         // none
    199   EXPECT_EQ(3U, GetRegistryLengthFromHost(L"baz.com", true));           // none
    200   EXPECT_EQ(4U, GetRegistryLengthFromHost(L"baz.com.", true));          // none
    201 
    202   EXPECT_EQ(std::string::npos, GetRegistryLengthFromHost(L"", false));
    203   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"foo.com..", false));
    204   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"..", false));
    205   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"192.168.0.1", false));
    206   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost", false));
    207   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost", true));
    208   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost.", false));
    209   EXPECT_EQ(0U, GetRegistryLengthFromHost(L"localhost.", true));
    210 }
    211 
    212 TEST_F(RegistryControlledDomainTest, TestSameDomainOrHost) {
    213   TestRegistryControlledDomainService::UseDomainData(
    214       Perfect_Hash_Test2::FindDomain);
    215 
    216   EXPECT_EQ(true, CompareDomains("http://a.b.bar.jp/file.html",
    217                                  "http://a.b.bar.jp/file.html")); // b.bar.jp
    218   EXPECT_EQ(true, CompareDomains("http://a.b.bar.jp/file.html",
    219                                  "http://b.b.bar.jp/file.html")); // b.bar.jp
    220   EXPECT_EQ(false, CompareDomains("http://a.foo.jp/file.html",    // foo.jp
    221                                   "http://a.not.jp/file.html"));  // not.jp
    222   EXPECT_EQ(false, CompareDomains("http://a.foo.jp/file.html",    // foo.jp
    223                                   "http://a.foo.jp./file.html")); // foo.jp.
    224   EXPECT_EQ(false, CompareDomains("http://a.com/file.html",       // a.com
    225                                   "http://b.com/file.html"));     // b.com
    226   EXPECT_EQ(true, CompareDomains("http://a.x.com/file.html",
    227                                  "http://b.x.com/file.html"));    // x.com
    228   EXPECT_EQ(true, CompareDomains("http://a.x.com/file.html",
    229                                  "http://.x.com/file.html"));     // x.com
    230   EXPECT_EQ(true, CompareDomains("http://a.x.com/file.html",
    231                                  "http://..b.x.com/file.html"));  // x.com
    232   EXPECT_EQ(true, CompareDomains("http://intranet/file.html",
    233                                  "http://intranet/file.html"));   // intranet
    234   EXPECT_EQ(true, CompareDomains("http://127.0.0.1/file.html",
    235                                  "http://127.0.0.1/file.html"));  // 127.0.0.1
    236   EXPECT_EQ(false, CompareDomains("http://192.168.0.1/file.html", // 192.168.0.1
    237                                   "http://127.0.0.1/file.html")); // 127.0.0.1
    238   EXPECT_EQ(false, CompareDomains("file:///C:/file.html",
    239                                   "file:///C:/file.html"));       // no host
    240 }
    241 
    242 TEST_F(RegistryControlledDomainTest, TestDefaultData) {
    243   TestRegistryControlledDomainService::UseDefaultInstance();
    244 
    245   // Note that no data is set: we're using the default rules.
    246   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://google.com", false));
    247   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://stanford.edu", false));
    248   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://ustreas.gov", false));
    249   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://icann.net", false));
    250   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://ferretcentral.org", false));
    251   EXPECT_EQ(0U, GetRegistryLengthFromURL("http://nowhere.foo", false));
    252   EXPECT_EQ(3U, GetRegistryLengthFromURL("http://nowhere.foo", true));
    253 }
    254 
    255 } // namespace
    256