aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-05 02:48:34 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2022-08-05 02:48:34 +0000
commita9ff1ec7cdefa1167605a3b509ed0d7aa4bd2d4e (patch)
tree8ea0153a4828ec621d4c867ca70945c16fc9dc2e
parent0c6e1b35c1a2bb05d537704ce7311c2c4b81b129 (diff)
parent0bf2f4f5f61c515749d7c2bbb578d47e42188e92 (diff)
downloadtelephony-android13-d1-s2-release.tar.gz
Change-Id: I4670959d4341b21c6f7a766ce8416b67800e2e13
-rw-r--r--src/java/com/android/internal/telephony/data/DataNetworkController.java6
-rw-r--r--tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java50
2 files changed, 53 insertions, 3 deletions
diff --git a/src/java/com/android/internal/telephony/data/DataNetworkController.java b/src/java/com/android/internal/telephony/data/DataNetworkController.java
index ad6a06714e..729c97ea26 100644
--- a/src/java/com/android/internal/telephony/data/DataNetworkController.java
+++ b/src/java/com/android/internal/telephony/data/DataNetworkController.java
@@ -710,9 +710,9 @@ public class DataNetworkController extends Handler {
+ "\"" + ruleString + "\"");
}
- if (source.contains(AccessNetworkType.UNKNOWN)) {
- throw new IllegalArgumentException("Source access networks contains unknown. "
- + "\"" + ruleString + "\"");
+ if (source.contains(AccessNetworkType.UNKNOWN) && type != RULE_TYPE_DISALLOWED) {
+ throw new IllegalArgumentException("Unknown access network can be only specified in"
+ + " the disallowed rule. \"" + ruleString + "\"");
}
if (target.contains(AccessNetworkType.UNKNOWN)) {
diff --git a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
index c0691acda1..2db1560001 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/data/DataNetworkControllerTest.java
@@ -1585,6 +1585,16 @@ public class DataNetworkControllerTest extends TelephonyTest {
NetworkCapabilities.NET_CAPABILITY_IMS, NetworkCapabilities.NET_CAPABILITY_EIMS);
assertThat(handoverRule.isOnlyForRoaming).isTrue();
+ handoverRule = new HandoverRule("source=EUTRAN|NGRAN|IWLAN|UNKNOWN, "
+ + "target=EUTRAN|NGRAN|IWLAN, type=disallowed, capabilities = IMS|EIMS");
+ assertThat(handoverRule.sourceAccessNetworks).containsExactly(AccessNetworkType.EUTRAN,
+ AccessNetworkType.NGRAN, AccessNetworkType.IWLAN, AccessNetworkType.UNKNOWN);
+ assertThat(handoverRule.targetAccessNetworks).containsExactly(AccessNetworkType.EUTRAN,
+ AccessNetworkType.NGRAN, AccessNetworkType.IWLAN);
+ assertThat(handoverRule.type).isEqualTo(HandoverRule.RULE_TYPE_DISALLOWED);
+ assertThat(handoverRule.networkCapabilities).containsExactly(
+ NetworkCapabilities.NET_CAPABILITY_IMS, NetworkCapabilities.NET_CAPABILITY_EIMS);
+
assertThrows(IllegalArgumentException.class,
() -> new HandoverRule("V2hhdCBUaGUgRnVjayBpcyB0aGlzIQ=="));
@@ -1595,6 +1605,14 @@ public class DataNetworkControllerTest extends TelephonyTest {
() -> new HandoverRule("source=GERAN|UTRAN|EUTRAN|NGRAN|IWLAN, type=allowed"));
assertThrows(IllegalArgumentException.class,
+ () -> new HandoverRule("source=GERAN, target=UNKNOWN, type=disallowed, "
+ + "capabilities=IMS"));
+
+ assertThrows(IllegalArgumentException.class,
+ () -> new HandoverRule("source=UNKNOWN, target=IWLAN, type=allowed, "
+ + "capabilities=IMS"));
+
+ assertThrows(IllegalArgumentException.class,
() -> new HandoverRule("source=GERAN, target=IWLAN, type=wtf"));
assertThrows(IllegalArgumentException.class,
@@ -2852,6 +2870,38 @@ public class DataNetworkControllerTest extends TelephonyTest {
}
@Test
+ public void testHandoverDataNetworkSourceOos() throws Exception {
+ testSetupImsDataNetwork();
+ // Configured handover is allowed from OOS to 4G/5G/IWLAN.
+ mCarrierConfig.putStringArray(
+ CarrierConfigManager.KEY_IWLAN_HANDOVER_POLICY_STRING_ARRAY,
+ new String[]{
+ "source=EUTRAN|NGRAN|IWLAN|UNKNOWN, target=EUTRAN|NGRAN|IWLAN, "
+ + "type=disallowed, capabilities=IMS|EIMS|MMS|XCAP|CBS"
+ });
+ carrierConfigChanged();
+ serviceStateChanged(TelephonyManager.NETWORK_TYPE_LTE,
+ NetworkRegistrationInfo.REGISTRATION_STATE_NOT_REGISTERED_OR_SEARCHING);
+
+ updateTransport(NetworkCapabilities.NET_CAPABILITY_IMS,
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
+
+ // Verify IMS network was torn down on source first.
+ verify(mMockedWwanDataServiceManager).deactivateDataCall(anyInt(),
+ eq(DataService.REQUEST_REASON_NORMAL), any(Message.class));
+
+ // Verify that IWLAN is brought up again on IWLAN.
+ verify(mMockedWlanDataServiceManager).setupDataCall(anyInt(),
+ any(DataProfile.class), anyBoolean(), anyBoolean(),
+ eq(DataService.REQUEST_REASON_NORMAL), any(), anyInt(), any(), any(), anyBoolean(),
+ any(Message.class));
+
+ DataNetwork dataNetwork = getDataNetworks().get(0);
+ assertThat(dataNetwork.getTransport()).isEqualTo(
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN);
+ }
+
+ @Test
public void testHandoverDataNetworkNonVops() throws Exception {
ServiceState ss = new ServiceState();