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