summaryrefslogtreecommitdiffstats
path: root/net/base/registry_controlled_domain_unittest.cc
diff options
context:
space:
mode:
authorinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 22:42:52 +0000
committerinitial.commit <initial.commit@0039d316-1c4b-4281-b951-d872f2087c98>2008-07-26 22:42:52 +0000
commit586acc5fe142f498261f52c66862fa417c3d52d2 (patch)
treec98b3417a883f2477029c8cd5888f4078681e24e /net/base/registry_controlled_domain_unittest.cc
parenta814a8d55429605fe6d7045045cd25b6bf624580 (diff)
downloadchromium_src-586acc5fe142f498261f52c66862fa417c3d52d2.zip
chromium_src-586acc5fe142f498261f52c66862fa417c3d52d2.tar.gz
chromium_src-586acc5fe142f498261f52c66862fa417c3d52d2.tar.bz2
Add net to the repository.
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@14 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/base/registry_controlled_domain_unittest.cc')
-rw-r--r--net/base/registry_controlled_domain_unittest.cc296
1 files changed, 296 insertions, 0 deletions
diff --git a/net/base/registry_controlled_domain_unittest.cc b/net/base/registry_controlled_domain_unittest.cc
new file mode 100644
index 0000000..cd74fc5
--- /dev/null
+++ b/net/base/registry_controlled_domain_unittest.cc
@@ -0,0 +1,296 @@
+// Copyright 2008, Google Inc.
+// All rights reserved.
+//
+// Redistribution and use in source and binary forms, with or without
+// modification, are permitted provided that the following conditions are
+// met:
+//
+// * Redistributions of source code must retain the above copyright
+// notice, this list of conditions and the following disclaimer.
+// * Redistributions in binary form must reproduce the above
+// copyright notice, this list of conditions and the following disclaimer
+// in the documentation and/or other materials provided with the
+// distribution.
+// * Neither the name of Google Inc. nor the names of its
+// contributors may be used to endorse or promote products derived from
+// this software without specific prior written permission.
+//
+// THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
+// "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
+// LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
+// A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT
+// OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
+// SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
+// LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE,
+// DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY
+// THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
+// (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
+// OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+#include "googleurl/src/gurl.h"
+#include "net/base/registry_controlled_domain.h"
+#include "testing/gtest/include/gtest/gtest.h"
+
+namespace {
+
+class TestRegistryControlledDomainService;
+static TestRegistryControlledDomainService* test_instance_;
+
+class TestRegistryControlledDomainService :
+ public RegistryControlledDomainService {
+ public:
+
+ // Deletes the instance so a new one will be created.
+ static void ResetInstance() {
+ RegistryControlledDomainService::ResetInstance();
+ }
+
+ // Sets and parses the given data.
+ static void UseDomainData(const std::string& data) {
+ RegistryControlledDomainService::UseDomainData(data);
+ }
+
+ private:
+ TestRegistryControlledDomainService::TestRegistryControlledDomainService() { }
+ TestRegistryControlledDomainService::~TestRegistryControlledDomainService() {
+ }
+};
+
+class RegistryControlledDomainTest : public testing::Test {
+ protected:
+ virtual void SetUp() {
+ TestRegistryControlledDomainService::ResetInstance();
+ }
+};
+
+// Convenience functions to shorten the names for repeated use below.
+void SetTestData(const std::string& data) {
+ TestRegistryControlledDomainService::UseDomainData(data);
+}
+
+std::string GetDomainFromURL(const std::string& url) {
+ return TestRegistryControlledDomainService::GetDomainAndRegistry(GURL(url));
+}
+
+std::string GetDomainFromHost(const std::wstring& host) {
+ return TestRegistryControlledDomainService::GetDomainAndRegistry(host);
+}
+
+size_t GetRegistryLengthFromURL(const std::string& url,
+ bool allow_unknown_registries) {
+ return TestRegistryControlledDomainService::GetRegistryLength(GURL(url),
+ allow_unknown_registries);
+}
+
+size_t GetRegistryLengthFromHost(const std::wstring& host,
+ bool allow_unknown_registries) {
+ return TestRegistryControlledDomainService::GetRegistryLength(host,
+ allow_unknown_registries);
+}
+
+bool CompareDomains(const std::string& url1, const std::string& url2) {
+ GURL g1 = GURL(url1);
+ GURL g2 = GURL(url2);
+ return TestRegistryControlledDomainService::SameDomainOrHost(g1, g2);
+}
+
+} // namespace
+
+TEST_F(RegistryControlledDomainTest, TestParsing) {
+ // Ensure that various simple and pathological cases parse without hanging or
+ // crashing. Testing the correctness of the parsing directly would require
+ // opening the singleton class up more.
+ SetTestData("com");
+ SetTestData("abc.com\n");
+ SetTestData("abc.com\ndef.com\n*.abc.com\n!foo.abc.com");
+ SetTestData("abc.com.\n");
+ SetTestData("");
+ SetTestData("*.");
+ SetTestData("!");
+ SetTestData(".");
+}
+
+static const char kTestData[] = "jp\n" // 1
+ "ac.jp\n" // 2
+ "*.bar.jp\n" // 3
+ "*.baz.bar.jp\n" // 4
+ "*.foo.bar.jp\n" // 5
+ "!foo.bar.jp\n" // 6
+ "!pref.bar.jp\n" // 7
+ "bar.baz.com\n" // 8
+ "*.c\n" // 9
+ "!b.c"; // 10
+
+TEST_F(RegistryControlledDomainTest, TestGetDomainAndRegistry) {
+ SetTestData(kTestData);
+
+ // Test GURL version of GetDomainAndRegistry().
+ EXPECT_EQ("baz.jp", GetDomainFromURL("http://a.baz.jp/file.html")); // 1
+ EXPECT_EQ("baz.jp.", GetDomainFromURL("http://a.baz.jp./file.html")); // 1
+ EXPECT_EQ("", GetDomainFromURL("http://ac.jp")); // 2
+ EXPECT_EQ("", GetDomainFromURL("http://a.bar.jp")); // 3
+ EXPECT_EQ("", GetDomainFromURL("http://bar.jp")); // 3
+ EXPECT_EQ("", GetDomainFromURL("http://baz.bar.jp")); // 3 4
+ EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromURL("http://a.b.baz.bar.jp"));
+ // 4
+ EXPECT_EQ("foo.bar.jp", GetDomainFromURL("http://foo.bar.jp")); // 3 5 6
+ EXPECT_EQ("pref.bar.jp", GetDomainFromURL("http://baz.pref.bar.jp")); // 7
+ EXPECT_EQ("b.bar.baz.com.", GetDomainFromURL("http://a.b.bar.baz.com."));
+ // 8
+ EXPECT_EQ("a.d.c", GetDomainFromURL("http://a.d.c")); // 9
+ EXPECT_EQ("a.d.c", GetDomainFromURL("http://.a.d.c")); // 9
+ EXPECT_EQ("a.d.c", GetDomainFromURL("http://..a.d.c")); // 9
+ EXPECT_EQ("b.c", GetDomainFromURL("http://a.b.c")); // 9 10
+ EXPECT_EQ("baz.com", GetDomainFromURL("http://baz.com")); // none
+ EXPECT_EQ("baz.com.", GetDomainFromURL("http://baz.com.")); // none
+
+ EXPECT_EQ("", GetDomainFromURL(""));
+ EXPECT_EQ("", GetDomainFromURL("http://"));
+ EXPECT_EQ("", GetDomainFromURL("file:///C:/file.html"));
+ EXPECT_EQ("", GetDomainFromURL("http://foo.com.."));
+ EXPECT_EQ("", GetDomainFromURL("http://..."));
+ EXPECT_EQ("", GetDomainFromURL("http://192.168.0.1"));
+ EXPECT_EQ("", GetDomainFromURL("http://localhost"));
+ EXPECT_EQ("", GetDomainFromURL("http://localhost."));
+ EXPECT_EQ("", GetDomainFromURL("http:////Comment"));
+
+ // Test std::wstring version of GetDomainAndRegistry(). Uses the same
+ // underpinnings as the GURL version, so this is really more of a check of
+ // CanonicalizeHost().
+ EXPECT_EQ("baz.jp", GetDomainFromHost(L"a.baz.jp")); // 1
+ EXPECT_EQ("baz.jp.", GetDomainFromHost(L"a.baz.jp.")); // 1
+ EXPECT_EQ("", GetDomainFromHost(L"ac.jp")); // 2
+ EXPECT_EQ("", GetDomainFromHost(L"a.bar.jp")); // 3
+ EXPECT_EQ("", GetDomainFromHost(L"bar.jp")); // 3
+ EXPECT_EQ("", GetDomainFromHost(L"baz.bar.jp")); // 3 4
+ EXPECT_EQ("a.b.baz.bar.jp", GetDomainFromHost(L"a.b.baz.bar.jp")); // 3 4
+ EXPECT_EQ("foo.bar.jp", GetDomainFromHost(L"foo.bar.jp")); // 3 5 6
+ EXPECT_EQ("pref.bar.jp", GetDomainFromHost(L"baz.pref.bar.jp")); // 7
+ EXPECT_EQ("b.bar.baz.com.", GetDomainFromHost(L"a.b.bar.baz.com.")); // 8
+ EXPECT_EQ("a.d.c", GetDomainFromHost(L"a.d.c")); // 9
+ EXPECT_EQ("a.d.c", GetDomainFromHost(L".a.d.c")); // 9
+ EXPECT_EQ("a.d.c", GetDomainFromHost(L"..a.d.c")); // 9
+ EXPECT_EQ("b.c", GetDomainFromHost(L"a.b.c")); // 9 10
+ EXPECT_EQ("baz.com", GetDomainFromHost(L"baz.com")); // none
+ EXPECT_EQ("baz.com.", GetDomainFromHost(L"baz.com.")); // none
+
+ EXPECT_EQ("", GetDomainFromHost(L""));
+ EXPECT_EQ("", GetDomainFromHost(L"foo.com.."));
+ EXPECT_EQ("", GetDomainFromHost(L"..."));
+ EXPECT_EQ("", GetDomainFromHost(L"192.168.0.1"));
+ EXPECT_EQ("", GetDomainFromHost(L"localhost."));
+ EXPECT_EQ("", GetDomainFromHost(L".localhost."));
+}
+
+TEST_F(RegistryControlledDomainTest, TestGetRegistryLength) {
+ SetTestData(kTestData);
+
+ // Test GURL version of GetRegistryLength().
+ EXPECT_EQ(2, GetRegistryLengthFromURL("http://a.baz.jp/file.html", false));
+ // 1
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://a.baz.jp./file.html", false));
+ // 1
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://ac.jp", false)); // 2
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://a.bar.jp", false)); // 3
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://bar.jp", false)); // 3
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://baz.bar.jp", false)); // 3 4
+ EXPECT_EQ(12, GetRegistryLengthFromURL("http://a.b.baz.bar.jp", false));
+ // 4
+ EXPECT_EQ(6, GetRegistryLengthFromURL("http://foo.bar.jp", false)); // 3 5 6
+ EXPECT_EQ(6, GetRegistryLengthFromURL("http://baz.pref.bar.jp", false));
+ // 7
+ EXPECT_EQ(11, GetRegistryLengthFromURL("http://a.b.bar.baz.com", false));
+ // 8
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://a.d.c", false)); // 9
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://.a.d.c", false)); // 9
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://..a.d.c", false)); // 9
+ EXPECT_EQ(1, GetRegistryLengthFromURL("http://a.b.c", false)); // 9 10
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://baz.com", false)); // none
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://baz.com.", false)); // none
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://baz.com", true)); // none
+ EXPECT_EQ(4, GetRegistryLengthFromURL("http://baz.com.", true)); // none
+
+ EXPECT_EQ(std::string::npos, GetRegistryLengthFromURL("", false));
+ EXPECT_EQ(std::string::npos, GetRegistryLengthFromURL("http://", false));
+ EXPECT_EQ(std::string::npos,
+ GetRegistryLengthFromURL("file:///C:/file.html", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://foo.com..", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://...", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://192.168.0.1", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://localhost", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://localhost", true));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://localhost.", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://localhost.", true));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http:////Comment", false));
+
+ // Test std::wstring version of GetRegistryLength(). Uses the same
+ // underpinnings as the GURL version, so this is really more of a check of
+ // CanonicalizeHost().
+ EXPECT_EQ(2, GetRegistryLengthFromHost(L"a.baz.jp", false)); // 1
+ EXPECT_EQ(3, GetRegistryLengthFromHost(L"a.baz.jp.", false)); // 1
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"ac.jp", false)); // 2
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"a.bar.jp", false)); // 3
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"bar.jp", false)); // 3
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"baz.bar.jp", false)); // 3 4
+ EXPECT_EQ(12, GetRegistryLengthFromHost(L"a.b.baz.bar.jp", false)); // 4
+ EXPECT_EQ(6, GetRegistryLengthFromHost(L"foo.bar.jp", false)); // 3 5 6
+ EXPECT_EQ(6, GetRegistryLengthFromHost(L"baz.pref.bar.jp", false)); // 7
+ EXPECT_EQ(11, GetRegistryLengthFromHost(L"a.b.bar.baz.com", false)); // 8
+ EXPECT_EQ(3, GetRegistryLengthFromHost(L"a.d.c", false)); // 9
+ EXPECT_EQ(3, GetRegistryLengthFromHost(L".a.d.c", false)); // 9
+ EXPECT_EQ(3, GetRegistryLengthFromHost(L"..a.d.c", false)); // 9
+ EXPECT_EQ(1, GetRegistryLengthFromHost(L"a.b.c", false)); // 9 10
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"baz.com", false)); // none
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"baz.com.", false)); // none
+ EXPECT_EQ(3, GetRegistryLengthFromHost(L"baz.com", true)); // none
+ EXPECT_EQ(4, GetRegistryLengthFromHost(L"baz.com.", true)); // none
+
+ EXPECT_EQ(std::string::npos, GetRegistryLengthFromHost(L"", false));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"foo.com..", false));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"..", false));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"192.168.0.1", false));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"localhost", false));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"localhost", true));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"localhost.", false));
+ EXPECT_EQ(0, GetRegistryLengthFromHost(L"localhost.", true));
+}
+
+TEST_F(RegistryControlledDomainTest, TestSameDomainOrHost) {
+ SetTestData("jp\nbar.jp");
+
+ EXPECT_EQ(true, CompareDomains("http://a.b.bar.jp/file.html",
+ "http://a.b.bar.jp/file.html")); // b.bar.jp
+ EXPECT_EQ(true, CompareDomains("http://a.b.bar.jp/file.html",
+ "http://b.b.bar.jp/file.html")); // b.bar.jp
+ EXPECT_EQ(false, CompareDomains("http://a.foo.jp/file.html", // foo.jp
+ "http://a.not.jp/file.html")); // not.jp
+ EXPECT_EQ(false, CompareDomains("http://a.foo.jp/file.html", // foo.jp
+ "http://a.foo.jp./file.html")); // foo.jp.
+ EXPECT_EQ(false, CompareDomains("http://a.com/file.html", // a.com
+ "http://b.com/file.html")); // b.com
+ EXPECT_EQ(true, CompareDomains("http://a.x.com/file.html",
+ "http://b.x.com/file.html")); // x.com
+ EXPECT_EQ(true, CompareDomains("http://a.x.com/file.html",
+ "http://.x.com/file.html")); // x.com
+ EXPECT_EQ(true, CompareDomains("http://a.x.com/file.html",
+ "http://..b.x.com/file.html")); // x.com
+ EXPECT_EQ(true, CompareDomains("http://intranet/file.html",
+ "http://intranet/file.html")); // intranet
+ EXPECT_EQ(true, CompareDomains("http://127.0.0.1/file.html",
+ "http://127.0.0.1/file.html")); // 127.0.0.1
+ EXPECT_EQ(false, CompareDomains("http://192.168.0.1/file.html", // 192.168.0.1
+ "http://127.0.0.1/file.html")); // 127.0.0.1
+ EXPECT_EQ(false, CompareDomains("file:///C:/file.html",
+ "file:///C:/file.html")); // no host
+}
+
+TEST_F(RegistryControlledDomainTest, TestDefaultData) {
+ // Note that no data is set: we're using the default rules.
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://google.com", false));
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://stanford.edu", false));
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://ustreas.gov", false));
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://icann.net", false));
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://ferretcentral.org", false));
+ EXPECT_EQ(0, GetRegistryLengthFromURL("http://nowhere.foo", false));
+ EXPECT_EQ(3, GetRegistryLengthFromURL("http://nowhere.foo", true));
+}