Merge "Move event handling and state updates inside IwlanNetworkServiceHandler" into tm-qpr-dev
diff --git a/src/com/google/android/iwlan/ErrorPolicyManager.java b/src/com/google/android/iwlan/ErrorPolicyManager.java
index 59fad64..3e5edd9 100644
--- a/src/com/google/android/iwlan/ErrorPolicyManager.java
+++ b/src/com/google/android/iwlan/ErrorPolicyManager.java
@@ -178,6 +178,11 @@
return mInstances.computeIfAbsent(slotId, k -> new ErrorPolicyManager(context, slotId));
}
+ @VisibleForTesting
+ public static void resetAllInstances() {
+ mInstances.clear();
+ }
+
/**
* Release or reset the instance.
*
diff --git a/src/com/google/android/iwlan/IwlanEventListener.java b/src/com/google/android/iwlan/IwlanEventListener.java
index 0f06185..5cb98e9 100644
--- a/src/com/google/android/iwlan/IwlanEventListener.java
+++ b/src/com/google/android/iwlan/IwlanEventListener.java
@@ -162,11 +162,16 @@
}
}
- /** Returns IwlanEventListener instance */
+ /** c Returns IwlanEventListener instance */
public static IwlanEventListener getInstance(@NonNull Context context, int slotId) {
return mInstances.computeIfAbsent(slotId, k -> new IwlanEventListener(context, slotId));
}
+ @VisibleForTesting
+ public static void resetAllInstances() {
+ mInstances.clear();
+ }
+
/**
* Adds handler for the list of events.
*
diff --git a/src/com/google/android/iwlan/epdg/EpdgSelector.java b/src/com/google/android/iwlan/epdg/EpdgSelector.java
index ba6e2af..b724c3b 100644
--- a/src/com/google/android/iwlan/epdg/EpdgSelector.java
+++ b/src/com/google/android/iwlan/epdg/EpdgSelector.java
@@ -394,9 +394,19 @@
* sos.epdg.epc.mnc<MNC>.mcc<MCC>.pub.3gppnetwork.org
*/
if (isEmergency) {
- domainName.append("sos.");
+ domainName = new StringBuilder();
+ domainName
+ .append("sos.")
+ .append("epdg.epc.mnc")
+ .append(mccmnc[1])
+ .append(".mcc")
+ .append(mccmnc[0])
+ .append(".pub.3gppnetwork.org");
+ getIP(domainName.toString(), filter, validIpList, network);
+ domainName.setLength(0);
}
-
+ // For emergency PDN setup, still adding FQDN without "sos" header as second priority
+ // because some operator doesn't support hostname with "sos" prefix.
domainName
.append("epdg.epc.mnc")
.append(mccmnc[1])
diff --git a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
index 7acbb02..5c87b7a 100644
--- a/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
+++ b/src/com/google/android/iwlan/epdg/EpdgTunnelManager.java
@@ -625,7 +625,7 @@
}
/**
- * Gets a epdg tunnel manager instance.
+ * Gets a EpdgTunnelManager instance.
*
* @param context application context
* @param subId subscription ID for the tunnel
@@ -636,6 +636,11 @@
subId, k -> new EpdgTunnelManager(context, subId));
}
+ @VisibleForTesting
+ public static void resetAllInstances() {
+ mTunnelManagerInstances.clear();
+ }
+
public interface TunnelCallback {
/**
* Called when the tunnel is opened.
diff --git a/test/com/google/android/iwlan/ErrorPolicyManagerTest.java b/test/com/google/android/iwlan/ErrorPolicyManagerTest.java
index 7f005eb..3e5ccd7 100644
--- a/test/com/google/android/iwlan/ErrorPolicyManagerTest.java
+++ b/test/com/google/android/iwlan/ErrorPolicyManagerTest.java
@@ -85,6 +85,7 @@
doReturn(mockAssetManager).when(mMockContext).getAssets();
doReturn(is).when(mockAssetManager).open(any());
setupMockForCarrierConfig(null);
+ ErrorPolicyManager.resetAllInstances();
mErrorPolicyManager = spy(ErrorPolicyManager.getInstance(mMockContext, DEFAULT_SLOT_INDEX));
}
diff --git a/test/com/google/android/iwlan/IwlanEventListenerTest.java b/test/com/google/android/iwlan/IwlanEventListenerTest.java
index fb34a04..4e127ca 100644
--- a/test/com/google/android/iwlan/IwlanEventListenerTest.java
+++ b/test/com/google/android/iwlan/IwlanEventListenerTest.java
@@ -93,15 +93,14 @@
when(mMockContext.getSystemService(eq(SubscriptionManager.class)))
.thenReturn(mMockSubscriptionManager);
- when(mMockSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(
- eq(DEFAULT_SLOT_INDEX)))
+ when(mMockSubscriptionManager.getActiveSubscriptionInfoForSimSlotIndex(anyInt()))
.thenReturn(mMockSubscriptionInfo);
when(mMockContext.getContentResolver()).thenReturn(mMockContentResolver);
when(mMockImsMmTelManager.isVoWiFiSettingEnabled()).thenReturn(true).thenReturn(false);
- when(mMockImsManager.getImsMmTelManager(eq(2))).thenReturn(mMockImsMmTelManager);
+ when(mMockImsManager.getImsMmTelManager(anyInt())).thenReturn(mMockImsMmTelManager);
when(mMockContext.getSystemService(eq(ImsManager.class))).thenReturn(mMockImsManager);
@@ -111,6 +110,7 @@
when(mMockTelephonyManager.createForSubscriptionId(eq(0)))
.thenReturn(mMockTelephonyManager);
+ IwlanEventListener.resetAllInstances();
mIwlanEventListener = IwlanEventListener.getInstance(mMockContext, DEFAULT_SLOT_INDEX);
}
diff --git a/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java b/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java
index 9a4af93..84b89e6 100644
--- a/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java
+++ b/test/com/google/android/iwlan/epdg/EpdgSelectorTest.java
@@ -75,6 +75,9 @@
private static final String TEST_IP_ADDRESS = "127.0.0.1";
private static final String TEST_IP_ADDRESS_1 = "127.0.0.2";
private static final String TEST_IP_ADDRESS_2 = "127.0.0.3";
+ private static final String TEST_IP_ADDRESS_3 = "127.0.0.4";
+ private static final String TEST_IP_ADDRESS_4 = "127.0.0.5";
+ private static final String TEST_IP_ADDRESS_5 = "127.0.0.6";
private static final String TEST_IPV6_ADDRESS = "0000:0000:0000:0000:0000:0000:0000:0001";
private static int testPcoIdIPv6 = 0xFF01;
@@ -229,18 +232,9 @@
}
private void testPlmnResolutionMethod(boolean isEmergency) throws Exception {
- String expectedFqdn1 =
- (isEmergency)
- ? "sos.epdg.epc.mnc480.mcc310.pub.3gppnetwork.org"
- : "epdg.epc.mnc480.mcc310.pub.3gppnetwork.org";
- String expectedFqdn2 =
- (isEmergency)
- ? "sos.epdg.epc.mnc120.mcc300.pub.3gppnetwork.org"
- : "epdg.epc.mnc120.mcc300.pub.3gppnetwork.org";
- String expectedFqdn3 =
- (isEmergency)
- ? "sos.epdg.epc.mnc120.mcc311.pub.3gppnetwork.org"
- : "epdg.epc.mnc120.mcc311.pub.3gppnetwork.org";
+ String expectedFqdnFromHplmn = "epdg.epc.mnc120.mcc311.pub.3gppnetwork.org";
+ String expectedFqdnFromEHplmn = "epdg.epc.mnc120.mcc300.pub.3gppnetwork.org";
+ String expectedFqdnFromConfig = "epdg.epc.mnc480.mcc310.pub.3gppnetwork.org";
mTestBundle.putIntArray(
CarrierConfigManager.Iwlan.KEY_EPDG_ADDRESS_PRIORITY_INT_ARRAY,
@@ -249,17 +243,33 @@
CarrierConfigManager.Iwlan.KEY_MCC_MNCS_STRING_ARRAY,
new String[] {"310-480", "300-120", "311-120"});
- mFakeDns.setAnswer(expectedFqdn1, new String[] {TEST_IP_ADDRESS_1}, TYPE_A);
- mFakeDns.setAnswer(expectedFqdn2, new String[] {TEST_IP_ADDRESS_2}, TYPE_A);
- mFakeDns.setAnswer(expectedFqdn3, new String[] {TEST_IP_ADDRESS}, TYPE_A);
+ mFakeDns.setAnswer(expectedFqdnFromHplmn, new String[] {TEST_IP_ADDRESS}, TYPE_A);
+ mFakeDns.setAnswer(expectedFqdnFromEHplmn, new String[] {TEST_IP_ADDRESS_1}, TYPE_A);
+ mFakeDns.setAnswer(expectedFqdnFromConfig, new String[] {TEST_IP_ADDRESS_2}, TYPE_A);
+ mFakeDns.setAnswer(
+ "sos." + expectedFqdnFromHplmn, new String[] {TEST_IP_ADDRESS_3}, TYPE_A);
+ mFakeDns.setAnswer(
+ "sos." + expectedFqdnFromEHplmn, new String[] {TEST_IP_ADDRESS_4}, TYPE_A);
+ mFakeDns.setAnswer(
+ "sos." + expectedFqdnFromConfig, new String[] {TEST_IP_ADDRESS_5}, TYPE_A);
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_2));
- assertEquals(testInetAddresses.get(2), InetAddress.getByName(TEST_IP_ADDRESS_1));
+ if (isEmergency) {
+ assertEquals(6, testInetAddresses.size());
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_3), testInetAddresses.get(0));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS), testInetAddresses.get(1));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_4), testInetAddresses.get(2));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_1), testInetAddresses.get(3));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_5), testInetAddresses.get(4));
+ assertEquals(InetAddress.getByName(TEST_IP_ADDRESS_2), testInetAddresses.get(5));
+ } else {
+ 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));
+ }
}
@Test
@@ -492,7 +502,7 @@
// Full match or partial match that target host contains the entry hostname to support
// random private dns probe hostname.
private boolean matches(String hostname, int type) {
- return hostname.endsWith(mHostname) && type == mType;
+ return hostname.equals(mHostname) && type == mType;
}
}
diff --git a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
index e270352..2cba737 100644
--- a/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
+++ b/test/com/google/android/iwlan/epdg/EpdgTunnelManagerTest.java
@@ -164,6 +164,7 @@
@Before
public void setUp() throws Exception {
+ EpdgTunnelManager.resetAllInstances();
mEpdgTunnelManager = spy(EpdgTunnelManager.getInstance(mMockContext, DEFAULT_SLOT_INDEX));
when(mMockContext.getSystemService(eq(IpSecManager.class))).thenReturn(mMockIpSecManager);