X-Git-Url: https://code.wpia.club/?a=blobdiff_plain;ds=sidebyside;f=tests%2Forg%2Fcacert%2Fgigi%2Futil%2FTestPublicSuffixes.java;h=950224154004a111a326092bf02d9d1179a245ac;hb=d7be034f96e06985f57d86d2779c434276b5bd4d;hp=3274ab6624ec227787582468e7ba22bb2fc1f47c;hpb=30d4d39245698b9257a6ce6810f55273a3ec25ef;p=gigi.git diff --git a/tests/org/cacert/gigi/util/TestPublicSuffixes.java b/tests/org/cacert/gigi/util/TestPublicSuffixes.java index 3274ab66..95022415 100644 --- a/tests/org/cacert/gigi/util/TestPublicSuffixes.java +++ b/tests/org/cacert/gigi/util/TestPublicSuffixes.java @@ -2,10 +2,19 @@ package org.cacert.gigi.util; import static org.junit.Assert.*; +import java.io.BufferedReader; +import java.io.IOException; +import java.io.InputStreamReader; import java.net.IDN; +import java.util.ArrayList; import org.junit.Test; +import org.junit.runner.RunWith; +import org.junit.runners.Parameterized; +import org.junit.runners.Parameterized.Parameter; +import org.junit.runners.Parameterized.Parameters; +@RunWith(Parameterized.class) public class TestPublicSuffixes { /** @@ -13,120 +22,57 @@ public class TestPublicSuffixes { * http://mxr.mozilla.org/mozilla-central/source/netwerk/test/unit * /data/test_psl.txt?raw=1 */ - @Test - public void testMozilla() { - // Any copyright is dedicated to the Public Domain. - // http://creativecommons.org/publicdomain/zero/1.0/ - - // null input. - checkPublicSuffix(null, null); - // Mixed case. - checkPublicSuffix("COM", null); - checkPublicSuffix("example.COM", "example.com"); - checkPublicSuffix("WwW.example.COM", "example.com"); - // Leading dot. - // checkPublicSuffix(".com", null); - // checkPublicSuffix(".example", null); - // checkPublicSuffix(".example.com", null); - // checkPublicSuffix(".example.example", null); - // Unlisted TLD. - /* - * checkPublicSuffix("example", null); - * checkPublicSuffix("example.example", "example.example"); - * checkPublicSuffix("b.example.example", "example.example"); - * checkPublicSuffix("a.b.example.example", "example.example"); - */ - // Listed, but non-Internet, TLD. - // checkPublicSuffix("local", null); - // checkPublicSuffix("example.local", null); - // checkPublicSuffix("b.example.local", null); - // checkPublicSuffix("a.b.example.local", null); - // TLD with only 1 rule. - checkPublicSuffix("biz", null); - checkPublicSuffix("domain.biz", "domain.biz"); - checkPublicSuffix("b.domain.biz", "domain.biz"); - checkPublicSuffix("a.b.domain.biz", "domain.biz"); - // TLD with some 2-level rules. - checkPublicSuffix("com", null); - checkPublicSuffix("example.com", "example.com"); - checkPublicSuffix("b.example.com", "example.com"); - checkPublicSuffix("a.b.example.com", "example.com"); - checkPublicSuffix("uk.com", null); - checkPublicSuffix("example.uk.com", "example.uk.com"); - checkPublicSuffix("b.example.uk.com", "example.uk.com"); - checkPublicSuffix("a.b.example.uk.com", "example.uk.com"); - checkPublicSuffix("test.ac", "test.ac"); - // TLD with only 1 (wildcard) rule. - checkPublicSuffix("cy", null); - checkPublicSuffix("c.cy", null); - checkPublicSuffix("b.c.cy", "b.c.cy"); - checkPublicSuffix("a.b.c.cy", "b.c.cy"); - // More complex TLD. - checkPublicSuffix("jp", null); - checkPublicSuffix("test.jp", "test.jp"); - checkPublicSuffix("www.test.jp", "test.jp"); - checkPublicSuffix("ac.jp", null); - checkPublicSuffix("test.ac.jp", "test.ac.jp"); - checkPublicSuffix("www.test.ac.jp", "test.ac.jp"); - checkPublicSuffix("kyoto.jp", null); - checkPublicSuffix("test.kyoto.jp", "test.kyoto.jp"); - checkPublicSuffix("ide.kyoto.jp", null); - checkPublicSuffix("b.ide.kyoto.jp", "b.ide.kyoto.jp"); - checkPublicSuffix("a.b.ide.kyoto.jp", "b.ide.kyoto.jp"); - checkPublicSuffix("c.kobe.jp", null); - checkPublicSuffix("b.c.kobe.jp", "b.c.kobe.jp"); - checkPublicSuffix("a.b.c.kobe.jp", "b.c.kobe.jp"); - checkPublicSuffix("city.kobe.jp", "city.kobe.jp"); - checkPublicSuffix("www.city.kobe.jp", "city.kobe.jp"); - // TLD with a wildcard rule and exceptions. - checkPublicSuffix("ck", null); - checkPublicSuffix("test.ck", null); - checkPublicSuffix("b.test.ck", "b.test.ck"); - checkPublicSuffix("a.b.test.ck", "b.test.ck"); - checkPublicSuffix("www.ck", "www.ck"); - checkPublicSuffix("www.www.ck", "www.ck"); - // US K12. - checkPublicSuffix("us", null); - checkPublicSuffix("test.us", "test.us"); - checkPublicSuffix("www.test.us", "test.us"); - checkPublicSuffix("ak.us", null); - checkPublicSuffix("test.ak.us", "test.ak.us"); - checkPublicSuffix("www.test.ak.us", "test.ak.us"); - checkPublicSuffix("k12.ak.us", null); - checkPublicSuffix("test.k12.ak.us", "test.k12.ak.us"); - checkPublicSuffix("www.test.k12.ak.us", "test.k12.ak.us"); + @Parameters(name = "publicSuffix({0}) = {1}") + public static Iterable genParams() throws IOException { + BufferedReader br = null; + try { + br = new BufferedReader(new InputStreamReader(TestPublicSuffixes.class.getResourceAsStream("TestPublicSuffixes.txt"), "UTF-8")); + ArrayList result = new ArrayList<>(); + String line; + while ((line = br.readLine()) != null) { + if (line.startsWith("//") || line.isEmpty()) { + continue; + } + String parseSuffix = "checkPublicSuffix("; + if (line.startsWith(parseSuffix)) { + String data = line.substring(parseSuffix.length(), line.length() - 2); + String[] parts = data.split(", "); + if (parts.length != 2) { + throw new Error("Syntax error in public suffix test data file: " + line); + } + result.add(new String[] { + parse(parts[0]), parse(parts[1]) + }); + } else { + throw new Error("Unparsable line: " + line); + } + } + return result; + } finally { + if (br != null) { + br.close(); + } + } } - @Test - public void testMozillaIDN() { - // IDN labels. - checkPublicSuffix("食狮.com.cn", "食狮.com.cn"); - checkPublicSuffix("食狮.公司.cn", "食狮.公司.cn"); - checkPublicSuffix("www.食狮.公司.cn", "食狮.公司.cn"); - checkPublicSuffix("shishi.公司.cn", "shishi.公司.cn"); - checkPublicSuffix("公司.cn", null); - checkPublicSuffix("食狮.中国", "食狮.中国"); - checkPublicSuffix("www.食狮.中国", "食狮.中国"); - checkPublicSuffix("shishi.中国", "shishi.中国"); - checkPublicSuffix("中国", null); + private static String parse(String data) { + if (data.equals("null")) { + return null; + } + if (data.startsWith("'") && data.endsWith("'")) { + return data.substring(1, data.length() - 1); + } + throw new Error("Syntax error with literal: " + data); } - @Test - public void testMozillaIDNPuny() { - // Same as above, but punycoded. - checkPublicSuffix("xn--85x722f.com.cn", "xn--85x722f.com.cn"); - checkPublicSuffix("xn--85x722f.xn--55qx5d.cn", "xn--85x722f.xn--55qx5d.cn"); - checkPublicSuffix("www.xn--85x722f.xn--55qx5d.cn", "xn--85x722f.xn--55qx5d.cn"); - checkPublicSuffix("shishi.xn--55qx5d.cn", "shishi.xn--55qx5d.cn"); - checkPublicSuffix("xn--55qx5d.cn", null); - checkPublicSuffix("xn--85x722f.xn--fiqs8s", "xn--85x722f.xn--fiqs8s"); - checkPublicSuffix("www.xn--85x722f.xn--fiqs8s", "xn--85x722f.xn--fiqs8s"); - checkPublicSuffix("shishi.xn--fiqs8s", "shishi.xn--fiqs8s"); - checkPublicSuffix("xn--fiqs8s", null); + @Parameter(0) + public String domain; - } + @Parameter(1) + public String suffix; - private void checkPublicSuffix(String domain, String suffix) { + @Test + public void testPublicSuffix() { if (domain != null) { domain = domain.toLowerCase(); }