diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-27 05:29:57 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-05-27 05:29:57 +0000 |
commit | 710ee103a77374c3cfc3d783e7054f51cbe50342 (patch) | |
tree | 01f3bf91a28d0e93be016189e68f497e78f6171b | |
parent | 2501e330c6a0339d494ef1dc7c0f3271c301940f (diff) | |
parent | 1a85e247c38eb3eff86e1d98009d76e4d99ec73a (diff) | |
download | Iwlan-710ee103a77374c3cfc3d783e7054f51cbe50342.tar.gz |
Snap for 10213992 from 1a85e247c38eb3eff86e1d98009d76e4d99ec73a to udc-qpr1-release
Change-Id: I8f754b27adb5ef7bd89fb73e435350aa90566b24
4 files changed, 77 insertions, 23 deletions
diff --git a/src/com/google/android/iwlan/IwlanDataService.java b/src/com/google/android/iwlan/IwlanDataService.java index 239713d..0d564ab 100644 --- a/src/com/google/android/iwlan/IwlanDataService.java +++ b/src/com/google/android/iwlan/IwlanDataService.java @@ -81,6 +81,7 @@ import java.util.HashMap; import java.util.List; import java.util.LongSummaryStatistics; import java.util.Map; +import java.util.Objects; import java.util.concurrent.ConcurrentHashMap; public class IwlanDataService extends DataService { @@ -956,14 +957,14 @@ public class IwlanDataService extends DataService { } private void updateNetwork( - @NonNull Network network, @Nullable LinkProperties linkProperties) { + @Nullable Network network, @Nullable LinkProperties linkProperties) { if (mIwlanDataService.isNetworkConnected( isActiveDataOnOtherSub(getSlotIndex()), IwlanHelper.isCrossSimCallingEnabled(mContext, getSlotIndex()))) { getTunnelManager().updateNetwork(network, linkProperties); } - if (network.equals(sNetwork)) { + if (Objects.equals(network, sNetwork)) { return; } for (Map.Entry<String, TunnelState> entry : mTunnelStateForApn.entrySet()) { 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/IwlanDataServiceTest.java b/test/com/google/android/iwlan/IwlanDataServiceTest.java index 6862c97..c4549df 100644 --- a/test/com/google/android/iwlan/IwlanDataServiceTest.java +++ b/test/com/google/android/iwlan/IwlanDataServiceTest.java @@ -17,6 +17,7 @@ package com.google.android.iwlan; import static android.net.NetworkCapabilities.TRANSPORT_CELLULAR; +import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET; import static android.net.NetworkCapabilities.TRANSPORT_WIFI; import static com.android.dx.mockito.inline.extended.ExtendedMockito.mockitoSession; @@ -535,6 +536,30 @@ public class IwlanDataServiceTest { } @Test + public void testOnCrossSimCallingEnable_doNotUpdateTunnelManagerIfNoNetwork() throws Exception { + when(mMockImsMmTelManager.isCrossSimCallingEnabled()).thenReturn(true); + mIwlanDataService + .mIwlanDataServiceHandler + .obtainMessage( + IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT, + DEFAULT_SLOT_INDEX, + 0 /* unused */) + .sendToTarget(); + mTestLooper.dispatchAll(); + verify(mMockEpdgTunnelManager, never()) + .updateNetwork(any(Network.class), any(LinkProperties.class)); + } + + @Test + public void testOnEthernetConnection_doNotUpdateTunnelManager() throws Exception { + Network newNetwork = createMockNetwork(mLinkProperties); + onSystemDefaultNetworkConnected( + newNetwork, mLinkProperties, TRANSPORT_ETHERNET, DEFAULT_SUB_INDEX); + verify(mMockEpdgTunnelManager, never()) + .updateNetwork(eq(newNetwork), any(LinkProperties.class)); + } + + @Test public void testAddDuplicateDataServiceProviderThrows() throws Exception { when(mMockIwlanDataServiceProvider.getSlotIndex()).thenReturn(DEFAULT_SLOT_INDEX); assertThrows( 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) |