summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAswin Sankar <apsankar@google.com>2023-05-12 15:37:20 -0700
committerAswin Sankar <apsankar@google.com>2023-05-15 23:48:07 +0000
commit112b347bd7056651a41f97c72bc631aceb9b4d1e (patch)
tree2fdf42a06a1217ed3ada4bd15c3bd0ddb2108eb7
parent5404598e33b0f74fd145b298782440015a52a91f (diff)
downloadIwlan-112b347bd7056651a41f97c72bc631aceb9b4d1e.tar.gz
Update EpdgTunnelManager on cross SIM enable event
- When cross-SIM calling is enabled for the first time after an APM toggle or factory reset, IwlanDataService should trigger updateNetwork() so that EpdgTunnelManager has the latest info about the default network and link properties for tunnel bringup. Bug: 282134634 Test: New tests in EpdgTunnelManagerTest. Live DSDA test. Change-Id: I6c6442ece12745279c4e3105dffb37abe12f5d7e Merged-In: I6c6442ece12745279c4e3105dffb37abe12f5d7e
-rw-r--r--src/com/google/android/iwlan/IwlanDataService.java16
-rw-r--r--test/com/google/android/iwlan/IwlanDataServiceTest.java102
2 files changed, 88 insertions, 30 deletions
diff --git a/src/com/google/android/iwlan/IwlanDataService.java b/src/com/google/android/iwlan/IwlanDataService.java
index 2f3ed2b..239713d 100644
--- a/src/com/google/android/iwlan/IwlanDataService.java
+++ b/src/com/google/android/iwlan/IwlanDataService.java
@@ -124,13 +124,6 @@ public class IwlanDataService extends DataService {
private static Transport sDefaultDataTransport = Transport.UNSPECIFIED_NETWORK;
- enum LinkProtocolType {
- UNKNOWN,
- IPV4,
- IPV6,
- IPV4V6
- }
-
// TODO: see if network monitor callback impl can be shared between dataservice and
// networkservice
// This callback runs in the same thread as IwlanDataServiceHandler
@@ -601,6 +594,7 @@ public class IwlanDataService extends DataService {
events.add(IwlanEventListener.CARRIER_CONFIG_UNKNOWN_CARRIER_EVENT);
events.add(IwlanEventListener.WIFI_CALLING_ENABLE_EVENT);
events.add(IwlanEventListener.WIFI_CALLING_DISABLE_EVENT);
+ events.add(IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT);
events.add(IwlanEventListener.CELLINFO_CHANGED_EVENT);
events.add(IwlanEventListener.CALL_STATE_CHANGED_EVENT);
IwlanEventListener.getInstance(mContext, slotIndex)
@@ -1364,6 +1358,12 @@ public class IwlanDataService extends DataService {
iwlanDataServiceProvider.mWfcEnabled = false;
break;
+ case IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT:
+ iwlanDataServiceProvider =
+ (IwlanDataServiceProvider) getDataServiceProvider(msg.arg1);
+ iwlanDataServiceProvider.updateNetwork(sNetwork, sLinkProperties);
+ break;
+
case IwlanEventListener.CELLINFO_CHANGED_EVENT:
List<CellInfo> cellInfolist = (List<CellInfo>) msg.obj;
iwlanDataServiceProvider =
@@ -2045,6 +2045,8 @@ public class IwlanDataService extends DataService {
return "WIFI_CALLING_ENABLE_EVENT";
case IwlanEventListener.WIFI_CALLING_DISABLE_EVENT:
return "WIFI_CALLING_DISABLE_EVENT";
+ case IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT:
+ return "CROSS_SIM_CALLING_ENABLE_EVENT";
case IwlanEventListener.CELLINFO_CHANGED_EVENT:
return "CELLINFO_CHANGED_EVENT";
case EVENT_TUNNEL_OPENED_METRICS:
diff --git a/test/com/google/android/iwlan/IwlanDataServiceTest.java b/test/com/google/android/iwlan/IwlanDataServiceTest.java
index 98fd3eb..6862c97 100644
--- a/test/com/google/android/iwlan/IwlanDataServiceTest.java
+++ b/test/com/google/android/iwlan/IwlanDataServiceTest.java
@@ -105,6 +105,7 @@ import java.util.concurrent.TimeUnit;
public class IwlanDataServiceTest {
private static final int DEFAULT_SLOT_INDEX = 0;
private static final int DEFAULT_SUB_INDEX = 0;
+ private static final int INVALID_SUB_INDEX = -1;
private static final int LINK_MTU = 1280;
private static final String TEST_APN_NAME = "ims";
private static final String IP_ADDRESS = "192.0.2.1";
@@ -291,11 +292,11 @@ public class IwlanDataServiceTest {
}
private void onSystemDefaultNetworkConnected(
- Network network, LinkProperties linkProperties, int transportType) {
+ Network network, LinkProperties linkProperties, int transportType, int subId) {
NetworkCapabilities nc =
prepareNetworkCapabilitiesForTest(
transportType,
- DEFAULT_SUB_INDEX /* unused if transportType is TRANSPORT_WIFI */,
+ subId /* unused if transportType is TRANSPORT_WIFI */,
false /* isVcn */);
NetworkCallback networkMonitorCallback = getNetworkMonitorCallback();
networkMonitorCallback.onCapabilitiesChanged(network, nc);
@@ -305,7 +306,8 @@ public class IwlanDataServiceTest {
private void onSystemDefaultNetworkConnected(int transportType) {
Network newNetwork = createMockNetwork(mLinkProperties);
- onSystemDefaultNetworkConnected(newNetwork, mLinkProperties, transportType);
+ onSystemDefaultNetworkConnected(
+ newNetwork, mLinkProperties, transportType, DEFAULT_SUB_INDEX);
}
private void onSystemDefaultNetworkLost() {
@@ -315,7 +317,7 @@ public class IwlanDataServiceTest {
}
@Test
- public void testWifionConnected() {
+ public void testWifiOnConnected() {
onSystemDefaultNetworkConnected(TRANSPORT_WIFI);
assertTrue(
mIwlanDataService.isNetworkConnected(
@@ -337,22 +339,23 @@ public class IwlanDataServiceTest {
}
@Test
- public void testWifiOnReConnected() {
+ public void testWifiOnReconnected() {
Network newNetwork = createMockNetwork(mLinkProperties);
- onSystemDefaultNetworkConnected(newNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ newNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
verify(mMockEpdgTunnelManager, times(1)).updateNetwork(eq(newNetwork), eq(mLinkProperties));
onSystemDefaultNetworkLost();
-
- newNetwork = createMockNetwork(mLinkProperties);
- onSystemDefaultNetworkConnected(newNetwork, mLinkProperties, TRANSPORT_WIFI);
- verify(mMockEpdgTunnelManager, times(1)).updateNetwork(eq(newNetwork), eq(mLinkProperties));
+ onSystemDefaultNetworkConnected(
+ newNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
+ verify(mMockEpdgTunnelManager, times(2)).updateNetwork(eq(newNetwork), eq(mLinkProperties));
}
@Test
public void testOnLinkPropertiesChangedForConnectedNetwork() {
NetworkCallback networkCallback = getNetworkMonitorCallback();
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
clearInvocations(mMockEpdgTunnelManager);
@@ -368,7 +371,8 @@ public class IwlanDataServiceTest {
@Test
public void testOnLinkPropertiesChangedForNonConnectedNetwork() {
NetworkCallback networkCallback = getNetworkMonitorCallback();
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
clearInvocations(mMockEpdgTunnelManager);
@@ -387,7 +391,8 @@ public class IwlanDataServiceTest {
NetworkCallback networkCallback = getNetworkMonitorCallback();
mLinkProperties.setLinkAddresses(
new ArrayList<>(Collections.singletonList(mMockIPv6LinkAddress)));
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
clearInvocations(mMockEpdgTunnelManager);
@@ -412,7 +417,8 @@ public class IwlanDataServiceTest {
DataProfile dp = buildImsDataProfile();
NetworkCallback networkCallback = getNetworkMonitorCallback();
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
clearInvocations(mMockEpdgTunnelManager);
@@ -436,7 +442,7 @@ public class IwlanDataServiceTest {
}
@Test
- public void testNetworkNotConnectedWithCellularAndCrossSimDisabled()
+ public void testNetworkNotConnectedWithCellularOnSameSubAndCrossSimEnabled()
throws InterruptedException {
NetworkCapabilities nc =
prepareNetworkCapabilitiesForTest(
@@ -453,7 +459,8 @@ public class IwlanDataServiceTest {
}
@Test
- public void testCrossSimNetworkConnectedWithTelephonyNetwork() throws InterruptedException {
+ public void testCrossSimNetworkConnectedWithCellularOnDifferentSub()
+ throws InterruptedException {
NetworkCapabilities nc =
prepareNetworkCapabilitiesForTest(
TRANSPORT_CELLULAR, DEFAULT_SUB_INDEX + 1, false /* isVcn */);
@@ -469,7 +476,8 @@ public class IwlanDataServiceTest {
}
@Test
- public void testCrossSimNetworkConnectedWithVcn() throws InterruptedException {
+ public void testCrossSimNetworkConnectedWithVcnCellularOnDifferentSub()
+ throws InterruptedException {
NetworkCapabilities nc =
prepareNetworkCapabilitiesForTest(
TRANSPORT_CELLULAR, DEFAULT_SUB_INDEX + 1, true /* isVcn */);
@@ -485,6 +493,48 @@ public class IwlanDataServiceTest {
}
@Test
+ public void testOnCrossSimCallingEnable_doNotUpdateTunnelManagerIfCellularDataOnSameSub()
+ throws Exception {
+ when(mMockImsMmTelManager.isCrossSimCallingEnabled()).thenReturn(true);
+
+ Network newNetwork = createMockNetwork(mLinkProperties);
+ onSystemDefaultNetworkConnected(
+ newNetwork, mLinkProperties, TRANSPORT_CELLULAR, DEFAULT_SUB_INDEX);
+
+ mIwlanDataService
+ .mIwlanDataServiceHandler
+ .obtainMessage(
+ IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT,
+ DEFAULT_SLOT_INDEX,
+ 0 /* unused */)
+ .sendToTarget();
+ mTestLooper.dispatchAll();
+ verify(mMockEpdgTunnelManager, never())
+ .updateNetwork(eq(newNetwork), any(LinkProperties.class));
+ }
+
+ @Test
+ public void testOnCrossSimCallingEnable_updateTunnelManagerIfCellularDataOnDifferentSub()
+ throws Exception {
+ when(mMockImsMmTelManager.isCrossSimCallingEnabled()).thenReturn(true);
+
+ Network newNetwork = createMockNetwork(mLinkProperties);
+ onSystemDefaultNetworkConnected(
+ newNetwork, mLinkProperties, TRANSPORT_CELLULAR, DEFAULT_SUB_INDEX + 1);
+ verify(mMockEpdgTunnelManager, times(1)).updateNetwork(eq(newNetwork), eq(mLinkProperties));
+
+ mIwlanDataService
+ .mIwlanDataServiceHandler
+ .obtainMessage(
+ IwlanEventListener.CROSS_SIM_CALLING_ENABLE_EVENT,
+ DEFAULT_SLOT_INDEX,
+ 0 /* unused */)
+ .sendToTarget();
+ mTestLooper.dispatchAll();
+ verify(mMockEpdgTunnelManager, times(2)).updateNetwork(eq(newNetwork), eq(mLinkProperties));
+ }
+
+ @Test
public void testAddDuplicateDataServiceProviderThrows() throws Exception {
when(mMockIwlanDataServiceProvider.getSlotIndex()).thenReturn(DEFAULT_SLOT_INDEX);
assertThrows(
@@ -640,7 +690,8 @@ public class IwlanDataServiceTest {
DataProfile dp = buildImsDataProfile();
/* Wifi is connected */
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
mSpyIwlanDataServiceProvider.setupDataCall(
AccessNetworkType.IWLAN, /* AccessNetworkType */
@@ -678,7 +729,8 @@ public class IwlanDataServiceTest {
DataProfile dp = buildImsDataProfile();
/* Wifi is connected */
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
mSpyIwlanDataServiceProvider.setupDataCall(
AccessNetworkType.IWLAN, /* AccessNetworkType */
@@ -1131,7 +1183,8 @@ public class IwlanDataServiceTest {
public void testDnsPrefetching() throws Exception {
NetworkCallback networkCallback = getNetworkMonitorCallback();
/* Wifi is connected */
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
networkCallback.onLinkPropertiesChanged(mMockNetwork, mLinkProperties);
mIwlanDataService
@@ -1340,7 +1393,8 @@ public class IwlanDataServiceTest {
public void testIwlanTunnelStatsFailureCounts() {
DataProfile dp = buildImsDataProfile();
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
when(ErrorPolicyManager.getInstance(eq(mMockContext), eq(DEFAULT_SLOT_INDEX)))
.thenReturn(mMockErrorPolicyManager);
@@ -1366,7 +1420,8 @@ public class IwlanDataServiceTest {
when(mMockErrorPolicyManager.getDataFailCause(eq(TEST_APN_NAME)))
.thenReturn(DataFailCause.ERROR_UNSPECIFIED);
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
long count = 3L;
for (int i = 0; i < count; i++) {
@@ -1387,7 +1442,8 @@ public class IwlanDataServiceTest {
when(calendar.getTime()).thenAnswer(i -> new Date(mMockedCalendarTime));
mSpyIwlanDataServiceProvider.setCalendar(calendar);
- onSystemDefaultNetworkConnected(mMockNetwork, mLinkProperties, TRANSPORT_WIFI);
+ onSystemDefaultNetworkConnected(
+ mMockNetwork, mLinkProperties, TRANSPORT_WIFI, INVALID_SUB_INDEX);
LongSummaryStatistics tunnelSetupSuccessStats = new LongSummaryStatistics();
LongSummaryStatistics tunnelUpStats = new LongSummaryStatistics();