summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-27 05:29:57 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2023-05-27 05:29:57 +0000
commit710ee103a77374c3cfc3d783e7054f51cbe50342 (patch)
tree01f3bf91a28d0e93be016189e68f497e78f6171b
parent2501e330c6a0339d494ef1dc7c0f3271c301940f (diff)
parent1a85e247c38eb3eff86e1d98009d76e4d99ec73a (diff)
downloadIwlan-710ee103a77374c3cfc3d783e7054f51cbe50342.tar.gz
Snap for 10213992 from 1a85e247c38eb3eff86e1d98009d76e4d99ec73a to udc-qpr1-release
Change-Id: I8f754b27adb5ef7bd89fb73e435350aa90566b24
-rw-r--r--src/com/google/android/iwlan/IwlanDataService.java5
-rw-r--r--src/com/google/android/iwlan/epdg/EpdgSelector.java24
-rw-r--r--test/com/google/android/iwlan/IwlanDataServiceTest.java25
-rw-r--r--test/com/google/android/iwlan/epdg/EpdgSelectorTest.java46
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)