diff options
author | Aswin Sankar <apsankar@google.com> | 2023-05-25 22:21:20 +0000 |
---|---|---|
committer | Android (Google) Code Review <android-gerrit@google.com> | 2023-05-25 22:21:20 +0000 |
commit | 260b35cd35a643a9de93747c6e5429f57a607d03 (patch) | |
tree | 01f3bf91a28d0e93be016189e68f497e78f6171b | |
parent | 05afdc7987832db83bcfb04d99aef12d2de78b84 (diff) | |
parent | 57f796ea564ce8b1f25fe2b612489ca1ac743071 (diff) | |
download | Iwlan-260b35cd35a643a9de93747c6e5429f57a607d03.tar.gz |
Merge "Handling for static ePDG IP addresses" into udc-devandroid14-dev
-rw-r--r-- | src/com/google/android/iwlan/epdg/EpdgSelector.java | 24 | ||||
-rw-r--r-- | test/com/google/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<Runnable> dnsResolutionQueue = new ArrayBlockingQueue<>( @@ -291,6 +292,12 @@ public class EpdgSelector { return IwlanHelper.hasIpv6Address(IwlanHelper.getAllAddressesForNetwork(network, mContext)); } + private void printParallelDnsResult(Map<String, List<InetAddress>> 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<CompletableFuture<Map.Entry<String, List<InetAddress>>>> 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<List<InetAddress>> 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<String, List<InetAddress>> 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<InetAddress> 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<InetAddress> 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<InetAddress> 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<InetAddress> getValidatedServerListWithDefaultParams(boolean isEmergency) @@ -609,7 +625,7 @@ public class EpdgSelectorTest { ArrayList<InetAddress> 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<InetAddress> 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) |