From 57f796ea564ce8b1f25fe2b612489ca1ac743071 Mon Sep 17 00:00:00 2001 From: Aswin Sankar Date: Tue, 23 May 2023 11:44:42 -0700 Subject: Handling for static ePDG IP addresses - Test boxes may have directly configured IP addresses in place of static ePDG strings. Do not try to DNS resolve the IP addresses, instead use it directly in place. - Additional logging for debug purposes. - Reverse UT asserts to satisfy ErrorProne check. Bug: 283676864 Test: LTP IWLAN Amarisoft testing. New UT in IwlanDataServiceTest. Change-Id: Idc14141879f196ca2eed9f2b3d810fa75f00c54c Merged-In: Idc14141879f196ca2eed9f2b3d810fa75f00c54c --- .../google/android/iwlan/epdg/EpdgSelector.java | 24 ++++++++--- .../android/iwlan/epdg/EpdgSelectorTest.java | 46 +++++++++++++++------- 2 files changed, 49 insertions(+), 21 deletions(-) diff --git a/src/com/google/android/iwlan/epdg/EpdgSelector.java b/src/com/google/android/iwlan/epdg/EpdgSelector.java index e56196c..4534b81 100644 --- a/src/com/google/android/iwlan/epdg/EpdgSelector.java +++ b/src/com/google/android/iwlan/epdg/EpdgSelector.java @@ -89,6 +89,7 @@ public class EpdgSelector { private static final int NUM_EPDG_SELECTION_EXECUTORS = 2; // 1 each for normal selection, SOS. private static final int MAX_EPDG_SELECTION_THREADS = 2; // 1 each for prefetch, tunnel bringup. private static final int MAX_DNS_RESOLVER_THREADS = 25; // Do not expect > 25 FQDNs per carrier. + private static final String NO_DOMAIN = "NO_DOMAIN"; BlockingQueue dnsResolutionQueue = new ArrayBlockingQueue<>( @@ -291,6 +292,12 @@ public class EpdgSelector { return IwlanHelper.hasIpv6Address(IwlanHelper.getAllAddressesForNetwork(network, mContext)); } + private void printParallelDnsResult(Map> domainNameToIpAddresses) { + Log.d(TAG, "Parallel DNS resolution result:"); + for (String domain : domainNameToIpAddresses.keySet()) { + Log.d(TAG, domain + ": " + domainNameToIpAddresses.get(domain)); + } + } /** * Returns a list of unique IP addresses corresponding to the given domain names, in the same * order of the input. Runs DNS resolution across parallel threads. @@ -309,6 +316,13 @@ public class EpdgSelector { List>>> futuresList = new ArrayList<>(); for (String domainName : domainNames) { + if (InetAddresses.isNumericAddress(domainName)) { + Log.d(TAG, domainName + " is a numeric IP address!"); + InetAddress inetAddr = InetAddresses.parseNumericAddress(domainName); + domainNameToIpAddr.put(NO_DOMAIN, new ArrayList<>(List.of(inetAddr))); + continue; + } + domainNameToIpAddr.put(domainName, new ArrayList<>()); // Dispatches separate IPv4 and IPv6 queries to avoid being blocked on either result. if (hasIpv4Address(network)) { @@ -377,12 +391,8 @@ public class EpdgSelector { Log.d(TAG, "Input domainName : " + domainName); if (InetAddresses.isNumericAddress(domainName)) { - try { - Log.d(TAG, domainName + " is a numeric ip address"); - ipList.add(InetAddress.getByName(domainName)); - } catch (UnknownHostException e) { - Log.e(TAG, "Exception when resolving domainName : " + domainName + ".", e); - } + Log.d(TAG, domainName + " is a numeric IP address!"); + ipList.add(InetAddresses.parseNumericAddress(domainName)); } else { try { CompletableFuture> result = new CompletableFuture(); @@ -608,6 +618,7 @@ public class EpdgSelector { filter, network, PARALLEL_STATIC_RESOLUTION_TIMEOUT_DURATION_SEC); + printParallelDnsResult(domainNameToIpAddr); domainNameToIpAddr.values().forEach(validIpList::addAll); } @@ -684,6 +695,7 @@ public class EpdgSelector { LinkedHashMap> domainNameToIpAddr = getIP(domainNames, filter, network, PARALLEL_PLMN_RESOLUTION_TIMEOUT_DURATION_SEC); + printParallelDnsResult(domainNameToIpAddr); domainNameToIpAddr.values().forEach(validIpList::addAll); return domainNameToIpAddr; } diff --git a/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java b/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java index 97526d1..3f23dab 100644 --- a/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java +++ b/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java @@ -195,8 +195,24 @@ public class EpdgSelectorTest { InetAddress expectedAddress = InetAddress.getByName(TEST_IP_ADDRESS); - assertEquals(testInetAddresses.size(), 1); - assertEquals(testInetAddresses.get(0), expectedAddress); + assertEquals(1, testInetAddresses.size()); + assertEquals(expectedAddress, testInetAddresses.get(0)); + } + + @Test + public void testStaticMethodDirectIpAddress_noDnsResolution() throws Exception { + mTestBundle.putIntArray( + CarrierConfigManager.Iwlan.KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY, + new int[] {CarrierConfigManager.Iwlan.EPDG_ADDRESS_STATIC}); + // Carrier config directly contains the ePDG IP address. + mTestBundle.putString( + CarrierConfigManager.Iwlan.KEY_EPDG_STATIC_ADDRESS_STRING, TEST_IP_ADDRESS); + + ArrayList testInetAddresses = + getValidatedServerListWithDefaultParams(false /*isEmergency*/); + + assertEquals(1, testInetAddresses.size()); + assertEquals(InetAddresses.parseNumericAddress(TEST_IP_ADDRESS), testInetAddresses.get(0)); } @Test @@ -222,8 +238,8 @@ public class EpdgSelectorTest { InetAddress expectedAddress = InetAddress.getByName(TEST_IP_ADDRESS); - assertEquals(testInetAddresses.size(), 1); - assertEquals(testInetAddresses.get(0), expectedAddress); + assertEquals(1, testInetAddresses.size()); + assertEquals(expectedAddress, testInetAddresses.get(0)); } @Test @@ -252,7 +268,7 @@ public class EpdgSelectorTest { ArrayList testInetAddresses = getValidatedServerListWithDefaultParams(false /*isEmergency*/); - assertEquals(testInetAddresses.size(), 2); + assertEquals(2, testInetAddresses.size()); assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IP_ADDRESS_1))); assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IP_ADDRESS_2))); } @@ -506,7 +522,7 @@ public class EpdgSelectorTest { doReturn(true).when(mEpdgSelector).hasIpv4Address(mMockNetwork); doReturn(true).when(mEpdgSelector).hasIpv6Address(mMockNetwork); - // Set Network.getAllByName mock + // Set DnsResolver query mock final String addr1 = "epdg.epc.mnc480.mcc310.pub.3gppnetwork.org"; final String addr2 = "epdg.epc.mnc120.mcc300.pub.3gppnetwork.org"; final String addr3 = "epdg.epc.mnc120.mcc311.pub.3gppnetwork.org"; @@ -526,10 +542,10 @@ public class EpdgSelectorTest { ArrayList testInetAddresses = getValidatedServerListWithDefaultParams(false /*isEmergency*/); - assertEquals(testInetAddresses.size(), 3); - assertEquals(testInetAddresses.get(0), InetAddress.getByName(TEST_IP_ADDRESS_1)); - assertEquals(testInetAddresses.get(1), InetAddress.getByName(TEST_IP_ADDRESS_2)); - assertEquals(testInetAddresses.get(2), InetAddress.getByName(TEST_IP_ADDRESS)); + assertEquals(3, testInetAddresses.size()); + assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_1), testInetAddresses.get(0)); + assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_2), testInetAddresses.get(1)); + assertEquals(InetAddress.getByName(TEST_IP_ADDRESS), testInetAddresses.get(2)); } private ArrayList getValidatedServerListWithDefaultParams(boolean isEmergency) @@ -609,7 +625,7 @@ public class EpdgSelectorTest { ArrayList testInetAddresses = getValidatedServerListWithDefaultParams(false /* isEmergency */); - assertEquals(testInetAddresses.size(), 2); + assertEquals(2, testInetAddresses.size()); assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IP_ADDRESS))); assertTrue(testInetAddresses.contains(InetAddress.getByName(TEST_IPV6_ADDRESS))); } @@ -683,10 +699,10 @@ public class EpdgSelectorTest { ArrayList testInetAddresses = getValidatedServerListWithDefaultParams(isEmergency); - assertEquals(testInetAddresses.size(), 3); - assertEquals(testInetAddresses.get(0), InetAddress.getByName(TEST_IP_ADDRESS)); - assertEquals(testInetAddresses.get(1), InetAddress.getByName(TEST_IP_ADDRESS_1)); - assertEquals(testInetAddresses.get(2), InetAddress.getByName(TEST_IP_ADDRESS_2)); + assertEquals(3, testInetAddresses.size()); + assertEquals(InetAddress.getByName(TEST_IP_ADDRESS), testInetAddresses.get(0)); + assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_1), testInetAddresses.get(1)); + assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_2), testInetAddresses.get(2)); } private void setAnswerForCellularMethod(boolean isEmergency, int mcc, int mnc) -- cgit v1.2.3