1 /*
2  * Copyright (C) 2024 The Android Open Source Project
3  *
4  * Licensed under the Apache License, Version 2.0 (the "License")
5  * you may not use this file except in compliance with the License.
6  * You may obtain a copy of the License at
7  *
8  *      http://www.apache.org/licenses/LICENSE-2.0
9  *
10  * Unless required by applicable law or agreed to in writing, software
11  * distributed under the License is distributed on an "AS IS" BASIS,
12  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13  * See the License for the specific language governing permissions and
14  * limitations under the License.
15  */
16 
17 package com.android.net.module.util
18 
19 import com.android.net.module.util.DnsUtils.equalsDnsLabelIgnoreDnsCase
20 import com.android.net.module.util.DnsUtils.equalsIgnoreDnsCase
21 import com.android.net.module.util.DnsUtils.toDnsLabelsUpperCase
22 import com.android.net.module.util.DnsUtils.toDnsUpperCase
23 import com.android.testutils.DevSdkIgnoreRunner
24 import org.junit.Assert.assertArrayEquals
25 import org.junit.Assert.assertEquals
26 import org.junit.Assert.assertFalse
27 import org.junit.Assert.assertTrue
28 import org.junit.Test
29 import org.junit.runner.RunWith
30 
31 @RunWith(DevSdkIgnoreRunner::class)
32 class DnsUtilsTest {
33     @Test
testToDnsUpperCasenull34     fun testToDnsUpperCase() {
35         assertEquals("TEST", toDnsUpperCase("TEST"))
36         assertEquals("TEST", toDnsUpperCase("TeSt"))
37         assertEquals("TEST", toDnsUpperCase("test"))
38         assertEquals("TÉST", toDnsUpperCase("TÉST"))
39         assertEquals("ţéST", toDnsUpperCase("ţést"))
40         // Unicode characters 0x10000 (��), 0x10001 (��), 0x10041 (��)
41         // Note the last 2 bytes of 0x10041 are identical to 'A', but it should remain unchanged.
42         assertEquals(
43             "TEST: -->\ud800\udc00 \ud800\udc01 \ud800\udc41<-- ",
44                 toDnsUpperCase("Test: -->\ud800\udc00 \ud800\udc01 \ud800\udc41<-- ")
45         )
46         // Also test some characters where the first surrogate is not \ud800
47         assertEquals(
48             "TEST: >\ud83c\udff4\udb40\udc67\udb40\udc62\udb40" +
49                 "\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f<",
50                 toDnsUpperCase(
51                     "Test: >\ud83c\udff4\udb40\udc67\udb40\udc62\udb40" +
52                         "\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f<"
53                 )
54         )
55     }
56 
57     @Test
testToDnsLabelsUpperCasenull58     fun testToDnsLabelsUpperCase() {
59         assertArrayEquals(
60             arrayOf("TEST", "TÉST", "ţéST"),
61             toDnsLabelsUpperCase(arrayOf("TeSt", "TÉST", "ţést"))
62         )
63     }
64 
65     @Test
testEqualsIgnoreDnsCasenull66     fun testEqualsIgnoreDnsCase() {
67         assertTrue(equalsIgnoreDnsCase("TEST", "Test"))
68         assertTrue(equalsIgnoreDnsCase("TEST", "test"))
69         assertTrue(equalsIgnoreDnsCase("test", "TeSt"))
70         assertTrue(equalsIgnoreDnsCase("Tést", "tést"))
71         assertFalse(equalsIgnoreDnsCase("ŢÉST", "ţést"))
72         // Unicode characters 0x10000 (��), 0x10001 (��), 0x10041 (��)
73         // Note the last 2 bytes of 0x10041 are identical to 'A', but it should remain unchanged.
74         assertTrue(equalsIgnoreDnsCase(
75                 "test: -->\ud800\udc00 \ud800\udc01 \ud800\udc41<-- ",
76                 "Test: -->\ud800\udc00 \ud800\udc01 \ud800\udc41<-- "
77         ))
78         // Also test some characters where the first surrogate is not \ud800
79         assertTrue(equalsIgnoreDnsCase(
80                 "test: >\ud83c\udff4\udb40\udc67\udb40\udc62\udb40" +
81                         "\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f<",
82                 "Test: >\ud83c\udff4\udb40\udc67\udb40\udc62\udb40" +
83                         "\udc77\udb40\udc6c\udb40\udc73\udb40\udc7f<"
84         ))
85     }
86 
87     @Test
testEqualsLabelIgnoreDnsCasenull88     fun testEqualsLabelIgnoreDnsCase() {
89         assertTrue(equalsDnsLabelIgnoreDnsCase(arrayOf("TEST", "Test"), arrayOf("test", "test")))
90         assertFalse(equalsDnsLabelIgnoreDnsCase(arrayOf("TEST", "Test"), arrayOf("test")))
91         assertFalse(equalsDnsLabelIgnoreDnsCase(arrayOf("Test"), arrayOf("test", "test")))
92         assertFalse(equalsDnsLabelIgnoreDnsCase(arrayOf("TEST", "Test"), arrayOf("test", "tést")))
93     }
94 }
95