1b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu/*
2b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * Copyright (C) 2016 The Android Open Source Project
3b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu *
4b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * Licensed under the Apache License, Version 2.0 (the "License");
5b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * you may not use this file except in compliance with the License.
6b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * You may obtain a copy of the License at
7b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu *
8b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu *      http://www.apache.org/licenses/LICENSE-2.0
9b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu *
10b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * Unless required by applicable law or agreed to in writing, software
11b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * distributed under the License is distributed on an "AS IS" BASIS,
12b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * See the License for the specific language governing permissions and
14b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * limitations under the License.
15b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu */
16b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
17b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiupackage com.android.server.wifi.hotspot2;
18b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
19b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport static org.junit.Assert.assertEquals;
20b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport static org.junit.Assert.assertFalse;
21b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport static org.junit.Assert.assertTrue;
22b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
23b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport android.test.suitebuilder.annotation.SmallTest;
24b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport android.util.Pair;
25b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
26b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport org.junit.Test;
27b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
28b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport java.util.Arrays;
29b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport java.util.HashMap;
30b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiuimport java.util.Map;
31b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
32b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu/**
33b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu * Unit tests for {@link com.android.server.wifi.hotspot2.DomainMatcher}.
34b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu */
35b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu@SmallTest
36b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiupublic class DomainMatcherTest {
37b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    private static final String PRIMARY_DOMAIN = "google.com";
38b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    private static final String SECONDARY_DOMAIN1 = "android.com";
39b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    private static final String SECONDARY_DOMAIN2 = "testing.test.com";
40b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
41b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
42b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Test data for isSubDomain function.
43b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
44b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    private static final Map<String, Integer> TEST_DOMAIN_MAP = new HashMap<>();
45b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    static {
46b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("", DomainMatcher.MATCH_NONE);
47b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("com", DomainMatcher.MATCH_NONE);
48b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("test.com", DomainMatcher.MATCH_NONE);
49b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("google.com", DomainMatcher.MATCH_PRIMARY);
50b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("test.google.com", DomainMatcher.MATCH_PRIMARY);
51b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("android.com", DomainMatcher.MATCH_SECONDARY);
52b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("test.android.com", DomainMatcher.MATCH_SECONDARY);
53b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("testing.test.com", DomainMatcher.MATCH_SECONDARY);
54b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_DOMAIN_MAP.put("adbcd.testing.test.com", DomainMatcher.MATCH_SECONDARY);
55b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
56b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
57b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
58b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Test data for arg2SubdomainOfArg1 function.
59b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
60b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    private static final Map<Pair<String, String>, Boolean> TEST_ARG_DOMAIN_MAP = new HashMap<>();
61b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    static {
62b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_ARG_DOMAIN_MAP.put(new Pair<String, String>("test.com", "abc.test.com"), true);
63b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_ARG_DOMAIN_MAP.put(new Pair<String, String>("test.com", "ad.abc.test.com"), true);
64b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_ARG_DOMAIN_MAP.put(new Pair<String, String>("com", "test.com"), true);
65b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_ARG_DOMAIN_MAP.put(new Pair<String, String>("abc.test.com", "test.com"), false);
66b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_ARG_DOMAIN_MAP.put(new Pair<String, String>("test1.com", "test.com"), false);
67b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        TEST_ARG_DOMAIN_MAP.put(new Pair<String, String>("test.com", "com"), false);
68b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
69b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
70b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
71b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify that creating a matcher with empty domains doesn't cause any exceptions.
72b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
73b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
74b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
75b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
76b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void createMatcherWithEmptyDomains() throws Exception {
77b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher(null, null);
78b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_NONE, domainMatcher.isSubDomain("google.com"));
79b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
80b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
81b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
82b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify that matching a null domain doesn't cause any exceptions.
83b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
84b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
85b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
86b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
87b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void matchNullDomain() throws Exception {
88b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher(PRIMARY_DOMAIN,
89b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                Arrays.asList(SECONDARY_DOMAIN1, SECONDARY_DOMAIN2));
90b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_NONE, domainMatcher.isSubDomain(null));
91b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
92b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
93b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
94b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify the domain matching expectations based on the predefined {@link #TEST_DOMAIN_MAP}.
95b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
96b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
97b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
98b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
99b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void matchTestDomains() throws Exception {
100b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher(PRIMARY_DOMAIN,
101b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                Arrays.asList(SECONDARY_DOMAIN1, SECONDARY_DOMAIN2));
102b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        for (Map.Entry<String, Integer> entry : TEST_DOMAIN_MAP.entrySet()) {
103b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu            assertEquals(entry.getValue().intValue(), domainMatcher.isSubDomain(entry.getKey()));
104b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        }
105b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
106b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
107b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
108b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify that the correct match status is returned when a domain matches both primary
109b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * and secondary domain (primary domain have precedence over secondary).
110b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
111b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
112b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
113b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
114b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void matchDomainWithBothPrimaryAndSecondary() throws Exception {
115b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher(PRIMARY_DOMAIN,
116b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                Arrays.asList(PRIMARY_DOMAIN));
117b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY, domainMatcher.isSubDomain(PRIMARY_DOMAIN));
118b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
119b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
120b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
121b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify domain matching expectation when the secondary domain is a sub-domain of the
122b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * primary domain.
123b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
124b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
125b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
126b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
127b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void matchDomainWhenSecondaryIsSubdomainOfPrimary() throws Exception {
128b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher("google.com",
129b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                Arrays.asList("test.google.com"));
130b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY, domainMatcher.isSubDomain("google.com"));
131b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY, domainMatcher.isSubDomain("test.google.com"));
132b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY,
133b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                domainMatcher.isSubDomain("abcd.test.google.com"));
134b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
135b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
136b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
137b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify domain matching expectations when the secondary domain is a sub-domain of the
138b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * primary domain.
139b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
140b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
141b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
142b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
143b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void matchDomainWhenPrimaryIsSubdomainOfSecondary() throws Exception {
144b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher("test.google.com",
145b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                Arrays.asList("google.com"));
146b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_SECONDARY, domainMatcher.isSubDomain("google.com"));
147b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_SECONDARY, domainMatcher.isSubDomain("test2.google.com"));
148b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY, domainMatcher.isSubDomain("test.google.com"));
149b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY,
150b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                domainMatcher.isSubDomain("adcd.test.google.com"));
151b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
152b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
153b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
154b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify domain matching expectations when the domain names contained empty label (domain
155b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * name that contained "..").
156b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
157b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
158b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
159b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
160b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void matchDomainWithEmptyLabel() throws Exception {
161b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        DomainMatcher domainMatcher = new DomainMatcher("test.google..com",
162b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                Arrays.asList("google..com"));
163b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_PRIMARY, domainMatcher.isSubDomain("test.google..com"));
164b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertEquals(DomainMatcher.MATCH_SECONDARY, domainMatcher.isSubDomain("google..com"));
165b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
166b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
167b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
168b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify domain matching expectation for arg2SubdomainOfArg1 based on predefined
169b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * {@link #TEST_ARG_DOMAIN_MAP}.
170b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
171b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
172b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
173b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
174b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void verifyArg2SubdomainOfArg1() throws Exception {
175b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        for (Map.Entry<Pair<String, String>, Boolean> entry : TEST_ARG_DOMAIN_MAP.entrySet()) {
176b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu            assertEquals(entry.getValue().booleanValue(),
177b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu                    DomainMatcher.arg2SubdomainOfArg1(entry.getKey().first, entry.getKey().second));
178b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        }
179b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
180b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
181b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
182b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify that arg2SubdomainOfArg1 works as expected when pass in null domains.
183b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
184b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
185b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
186b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
187b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void arg2SubdomainOfArg1WithNullDomain() throws Exception {
188b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertFalse(DomainMatcher.arg2SubdomainOfArg1(null, "test.com"));
189b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertFalse(DomainMatcher.arg2SubdomainOfArg1("test.com", null));
190b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertFalse(DomainMatcher.arg2SubdomainOfArg1(null, null));
191b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
192b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
193b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    /**
194b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * Verify that arg2SubdomainOfArg1 works as expected when domain contains empty label.
195b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     *
196b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     * @throws Exception
197b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu     */
198b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    @Test
199b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    public void arg2SubdomainOfArg1WithEmptyLabel() throws Exception {
200b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu        assertTrue(DomainMatcher.arg2SubdomainOfArg1("test..com", "adsf.test..com"));
201b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu    }
202b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu
203b40ba9e6ef82ac6c82869d1b562701483b8f1fc2Peter Qiu}
204