1 /* <lambda>null2 * Copyright (C) 2022 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 android.net.testutils 18 19 import android.net.DnsResolver.CLASS_IN 20 import android.net.DnsResolver.TYPE_A 21 import android.net.DnsResolver.TYPE_AAAA 22 import androidx.test.filters.SmallTest 23 import com.android.net.module.util.DnsPacket 24 import com.android.testutils.DnsAnswerProvider 25 import libcore.net.InetAddressUtils 26 import org.junit.Test 27 import org.junit.runner.RunWith 28 import org.junit.runners.JUnit4 29 import kotlin.test.assertEquals 30 31 @RunWith(JUnit4::class) 32 @SmallTest 33 class DnsAnswerProviderTest { 34 val ansProvider = DnsAnswerProvider() 35 36 private fun listOfAddresses(vararg addresses: String) = 37 addresses.map { address -> InetAddressUtils.parseNumericAddress(address) } 38 39 @Test 40 fun testIpv4Answers() { 41 val record1 = getTestDnsRecord("www.google.com", "1.2.3.4") 42 val record2 = getTestDnsRecord("www.google.com", "5.6.7.8") 43 44 // Verifies that empty response is returned before mocking. 45 assertEquals(emptyList(), ansProvider.getAnswer("www.google.com", TYPE_A)) 46 47 // Verifies that single response can be returned correctly. 48 ansProvider.setAnswer("www.google.com", listOfAddresses("1.2.3.4")) 49 assertEquals(listOf(record1), ansProvider.getAnswer("www.google.com", TYPE_A)) 50 51 // Verifies that multiple responses can be returned correctly. 52 ansProvider.setAnswer("www.google.com", listOfAddresses("1.2.3.4", "5.6.7.8")) 53 assertEquals(listOf(record1, record2), ansProvider.getAnswer("www.google.com", TYPE_A)) 54 55 // Verifies that null response is returned if queried with wrong type or wrong name. 56 assertEquals(emptyList(), ansProvider.getAnswer("www.google.com", TYPE_AAAA)) 57 assertEquals(emptyList(), ansProvider.getAnswer("www.android.com", TYPE_A)) 58 59 // Verifies that the answers for different entry has no effect to the testing one. 60 ansProvider.setAnswer("www.example.com", listOfAddresses("8.8.8.8")) 61 assertEquals(listOf(record1, record2), ansProvider.getAnswer("www.google.com", TYPE_A)) 62 63 // Verifies that the responses can be cleared. 64 ansProvider.clearAnswer("www.google.com") 65 assertEquals(emptyList(), ansProvider.getAnswer("www.google.com", TYPE_A)) 66 } 67 68 @Test 69 fun testIpv4v6Answers() { 70 val record1 = getTestDnsRecord("www.google.com", "2001:db8::1") 71 val record2 = getTestDnsRecord("www.google.com", "2001:db8::2") 72 val record3 = getTestDnsRecord("www.google.com", "2001:db8::4") 73 val v4Record1 = getTestDnsRecord("www.google.com", "1.2.3.4") 74 75 // Verifies that null response is returned before mocking 76 assertEquals(emptyList(), ansProvider.getAnswer("www.google.com", TYPE_AAAA)) 77 78 ansProvider.setAnswer("www.google.com", listOfAddresses("2001:db8::1", "2001:db8::2")) 79 assertEquals(listOf(record1, record2), ansProvider.getAnswer("www.google.com", TYPE_AAAA)) 80 81 // Verifies that the answers for different entry has no effect to the testing one. 82 ansProvider.setAnswer("www.example.com", listOfAddresses("2001:db8::3")) 83 assertEquals(listOf(record1, record2), ansProvider.getAnswer("www.google.com", TYPE_AAAA)) 84 85 // Verifies that null response is returned if queried with wrong type or wrong name. 86 assertEquals(emptyList(), ansProvider.getAnswer("www.google.com", TYPE_A)) 87 assertEquals(emptyList(), ansProvider.getAnswer("www.android.com", TYPE_AAAA)) 88 89 // Verifies that the responses can be replaced. And different types can be mixed. 90 ansProvider.setAnswer("www.google.com", listOfAddresses("2001:db8::4", "1.2.3.4")) 91 assertEquals(listOf(record3), ansProvider.getAnswer("www.google.com", TYPE_AAAA)) 92 assertEquals(listOf(v4Record1), ansProvider.getAnswer("www.google.com", TYPE_A)) 93 94 // Verifies that the responses can be cleared. 95 ansProvider.clearAnswer("www.google.com") 96 assertEquals(emptyList(), ansProvider.getAnswer("www.google.com", TYPE_AAAA)) 97 } 98 99 private fun getTestDnsRecord(dName: String, address: String) = 100 DnsPacket.DnsRecord.makeAOrAAAARecord(DnsPacket.ANSECTION, dName, CLASS_IN, 5 /* ttl */, 101 InetAddressUtils.parseNumericAddress(address)) 102 }