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