Move transport parsing to EthernetTrackerConfig
Test: EthernetTrackerTest
Change-Id: I849ab478a101955c71e7881eb6609f5630a0062a
diff --git a/service-t/src/com/android/server/ethernet/EthernetTracker.java b/service-t/src/com/android/server/ethernet/EthernetTracker.java
index e656eb9..382350f 100644
--- a/service-t/src/com/android/server/ethernet/EthernetTracker.java
+++ b/service-t/src/com/android/server/ethernet/EthernetTracker.java
@@ -18,6 +18,10 @@
import static android.net.EthernetManager.ETHERNET_STATE_DISABLED;
import static android.net.EthernetManager.ETHERNET_STATE_ENABLED;
+import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
+import static android.net.NetworkCapabilities.TRANSPORT_LOWPAN;
+import static android.net.NetworkCapabilities.TRANSPORT_VPN;
+import static android.net.NetworkCapabilities.TRANSPORT_WIFI_AWARE;
import static android.net.TestNetworkManager.TEST_TAP_PREFIX;
import static com.android.internal.annotations.VisibleForTesting.Visibility.PACKAGE;
@@ -639,7 +643,7 @@
nc = mNetworkCapabilities.get(hwAddress);
if (nc == null) {
final boolean isTestIface = iface.matches(TEST_IFACE_REGEXP);
- nc = createDefaultNetworkCapabilities(isTestIface, /* overrideTransport */ null);
+ nc = createDefaultNetworkCapabilities(isTestIface, TRANSPORT_ETHERNET);
}
}
@@ -780,9 +784,9 @@
}
private static NetworkCapabilities createDefaultNetworkCapabilities(
- boolean isTestIface, @Nullable String overrideTransport) {
+ boolean isTestIface, int transportType) {
NetworkCapabilities.Builder builder =
- createNetworkCapabilities(/* commaSeparatedCapabilities */ null, overrideTransport)
+ createNetworkCapabilities(/* commaSeparatedCapabilities */ null, transportType)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_RESTRICTED)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_METERED)
.addCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING)
@@ -811,7 +815,7 @@
*/
@VisibleForTesting
static NetworkCapabilities.Builder createNetworkCapabilities(
- @Nullable String commaSeparatedCapabilities, @Nullable String overrideTransport) {
+ @Nullable String commaSeparatedCapabilities, int transportType) {
final NetworkCapabilities.Builder builder =
TextUtils.isEmpty(commaSeparatedCapabilities)
@@ -822,33 +826,7 @@
// attempt to add it. Since we can only have one override, all errors with it will
// gracefully default back to TRANSPORT_ETHERNET and warn the user. VPN is not allowed as an
// override type. Wifi Aware and LoWPAN are currently unsupported as well.
- int transport = NetworkCapabilities.TRANSPORT_ETHERNET;
- if (!TextUtils.isEmpty(overrideTransport)) {
- try {
- int parsedTransport = Integer.valueOf(overrideTransport);
- if (parsedTransport == NetworkCapabilities.TRANSPORT_VPN
- || parsedTransport == NetworkCapabilities.TRANSPORT_WIFI_AWARE
- || parsedTransport == NetworkCapabilities.TRANSPORT_LOWPAN) {
- Log.e(TAG, "Override transport '" + parsedTransport + "' is not supported. "
- + "Defaulting to TRANSPORT_ETHERNET");
- } else {
- transport = parsedTransport;
- }
- } catch (NumberFormatException nfe) {
- Log.e(TAG, "Override transport type '" + overrideTransport + "' "
- + "could not be parsed. Defaulting to TRANSPORT_ETHERNET");
- }
- }
-
- // Apply the transport. If the user supplied a valid number that is not a valid transport
- // then adding will throw an exception. Default back to TRANSPORT_ETHERNET if that happens
- try {
- builder.addTransportType(transport);
- } catch (IllegalArgumentException iae) {
- Log.e(TAG, transport + " is not a valid NetworkCapability.TRANSPORT_* value. "
- + "Defaulting to TRANSPORT_ETHERNET");
- builder.addTransportType(NetworkCapabilities.TRANSPORT_ETHERNET);
- }
+ builder.addTransportType(transportType);
builder.setLinkUpstreamBandwidthKbps(100 * 1000);
builder.setLinkDownstreamBandwidthKbps(100 * 1000);
@@ -1049,7 +1027,35 @@
final String mIface;
final String mCapabilities;
final String mIpConfig;
- final String mTransport;
+ final int mTransport;
+
+ private static int parseTransportType(String transportString) {
+ if (TextUtils.isEmpty(transportString)) {
+ return TRANSPORT_ETHERNET;
+ }
+
+ final int parsedTransport;
+ try {
+ parsedTransport = Integer.valueOf(transportString);
+ } catch (NumberFormatException e) {
+ Log.e(TAG, "Failed to parse transport type", e);
+ return TRANSPORT_ETHERNET;
+ }
+
+ if (!NetworkCapabilities.isValidTransport(parsedTransport)) {
+ return TRANSPORT_ETHERNET;
+ }
+
+ switch (parsedTransport) {
+ case TRANSPORT_VPN:
+ case TRANSPORT_WIFI_AWARE:
+ case TRANSPORT_LOWPAN:
+ Log.e(TAG, "Unsupported transport type '" + parsedTransport + "'");
+ return TRANSPORT_ETHERNET;
+ default:
+ return parsedTransport;
+ }
+ }
EthernetTrackerConfig(String configString) {
Objects.requireNonNull(configString, "EthernetTrackerConfig requires non-null config");
@@ -1057,7 +1063,7 @@
mIface = tokens[0];
mCapabilities = tokens.length > 1 ? tokens[1] : null;
mIpConfig = tokens.length > 2 && !TextUtils.isEmpty(tokens[2]) ? tokens[2] : null;
- mTransport = tokens.length > 3 ? tokens[3] : null;
+ mTransport = tokens.length > 3 ? parseTransportType(tokens[3]) : TRANSPORT_ETHERNET;
}
}
}
diff --git a/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java b/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java
index db7b37b..ef60f2a 100644
--- a/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java
+++ b/tests/unit/java/com/android/server/ethernet/EthernetTrackerTest.java
@@ -284,11 +284,15 @@
private void assertParsedNetworkCapabilities(
NetworkCapabilities expectedNetworkCapabilities,
- String configCapabiltiies,
+ String configCapabilities,
String configTransports) {
+ final String ipConfig = "";
+ final String configString =
+ String.join(";", TEST_IFACE, configCapabilities, ipConfig, configTransports);
+ final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
assertEquals(
expectedNetworkCapabilities,
- EthernetTracker.createNetworkCapabilities(configCapabiltiies, configTransports)
+ EthernetTracker.createNetworkCapabilities(config.mCapabilities, config.mTransport)
.build());
}
@@ -296,7 +300,7 @@
public void testCreateEthernetTrackerConfigReturnsCorrectValue() {
final String capabilities = "2";
final String ipConfig = "3";
- final String transport = "4";
+ final String transport = "1";
final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
@@ -304,7 +308,29 @@
assertEquals(TEST_IFACE, config.mIface);
assertEquals(capabilities, config.mCapabilities);
assertEquals(ipConfig, config.mIpConfig);
- assertEquals(transport, config.mTransport);
+ assertEquals(NetworkCapabilities.TRANSPORT_WIFI, config.mTransport);
+ }
+
+ @Test
+ public void testCreateEthernetTrackerConfig_withInvalidTransport() {
+ final String capabilities = "2";
+ final String ipConfig = "3";
+ final String transport = "100"; // Invalid transport type
+ final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
+
+ final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
+ assertEquals(NetworkCapabilities.TRANSPORT_ETHERNET, config.mTransport);
+ }
+
+ @Test
+ public void testCreateEthernetTrackerConfig_withDisallowedTransport() {
+ final String capabilities = "2";
+ final String ipConfig = "3";
+ final String transport = "4"; // TRANSPORT_VPN is not allowed
+ final String configString = String.join(";", TEST_IFACE, capabilities, ipConfig, transport);
+
+ final EthernetTrackerConfig config = new EthernetTrackerConfig(configString);
+ assertEquals(NetworkCapabilities.TRANSPORT_ETHERNET, config.mTransport);
}
@Test