Validate or set the eth specifier on update Iface

When a calling the updateInterface API, if no eth specifier was set it
would be removed not allowing follow-up network requests to request by
ethernet specifier.

This CL makes sure that the eth specifier is always set as expected when
updateInterface is called by either validating the input or setting the
specifier if the passed one is null.

Bug: 236294399
Bug: 229207021
Test: atest FrameworksNetTests
:com.android.server.ethernet.EthernetNetworkFactoryTest

Change-Id: Ic05ca7fe4adaa94f79e59758569f7595ab4c4f54
This commit is contained in:
James Mattis
2022-06-16 14:21:25 -07:00
parent 198bea7f24
commit 59d98c07a7
2 changed files with 99 additions and 11 deletions

View File

@@ -16,6 +16,7 @@
package com.android.server.ethernet;
import static android.net.NetworkCapabilities.TRANSPORT_ETHERNET;
import static android.net.NetworkCapabilities.TRANSPORT_TEST;
import static org.junit.Assert.assertThrows;
@@ -35,10 +36,12 @@ import android.Manifest;
import android.annotation.NonNull;
import android.content.Context;
import android.content.pm.PackageManager;
import android.net.EthernetNetworkSpecifier;
import android.net.EthernetNetworkUpdateRequest;
import android.net.INetworkInterfaceOutcomeReceiver;
import android.net.IpConfiguration;
import android.net.NetworkCapabilities;
import android.net.StringNetworkSpecifier;
import android.os.Build;
import android.os.Handler;
@@ -56,10 +59,14 @@ import org.junit.runner.RunWith;
@DevSdkIgnoreRule.IgnoreUpTo(Build.VERSION_CODES.S_V2)
public class EthernetServiceImplTest {
private static final String TEST_IFACE = "test123";
private static final NetworkCapabilities DEFAULT_CAPS = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_ETHERNET)
.setNetworkSpecifier(new EthernetNetworkSpecifier(TEST_IFACE))
.build();
private static final EthernetNetworkUpdateRequest UPDATE_REQUEST =
new EthernetNetworkUpdateRequest.Builder()
.setIpConfiguration(new IpConfiguration())
.setNetworkCapabilities(new NetworkCapabilities.Builder().build())
.setNetworkCapabilities(DEFAULT_CAPS)
.build();
private static final EthernetNetworkUpdateRequest UPDATE_REQUEST_WITHOUT_CAPABILITIES =
new EthernetNetworkUpdateRequest.Builder()
@@ -67,7 +74,7 @@ public class EthernetServiceImplTest {
.build();
private static final EthernetNetworkUpdateRequest UPDATE_REQUEST_WITHOUT_IP_CONFIG =
new EthernetNetworkUpdateRequest.Builder()
.setNetworkCapabilities(new NetworkCapabilities.Builder().build())
.setNetworkCapabilities(DEFAULT_CAPS)
.build();
private static final INetworkInterfaceOutcomeReceiver NULL_LISTENER = null;
private EthernetServiceImpl mEthernetServiceImpl;
@@ -160,6 +167,41 @@ public class EthernetServiceImplTest {
});
}
@Test
public void testUpdateConfigurationRejectsWithInvalidSpecifierType() {
final StringNetworkSpecifier invalidSpecifierType = new StringNetworkSpecifier("123");
final EthernetNetworkUpdateRequest request =
new EthernetNetworkUpdateRequest.Builder()
.setNetworkCapabilities(
new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_ETHERNET)
.setNetworkSpecifier(invalidSpecifierType)
.build()
).build();
assertThrows(IllegalArgumentException.class, () -> {
mEthernetServiceImpl.updateConfiguration(
"" /* iface */, request, null /* listener */);
});
}
@Test
public void testUpdateConfigurationRejectsWithInvalidSpecifierName() {
final String ifaceToUpdate = "eth0";
final String ifaceOnSpecifier = "wlan0";
EthernetNetworkUpdateRequest request =
new EthernetNetworkUpdateRequest.Builder()
.setNetworkCapabilities(
new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_ETHERNET)
.setNetworkSpecifier(
new EthernetNetworkSpecifier(ifaceOnSpecifier))
.build()
).build();
assertThrows(IllegalArgumentException.class, () -> {
mEthernetServiceImpl.updateConfiguration(ifaceToUpdate, request, null /* listener */);
});
}
@Test
public void testUpdateConfigurationWithCapabilitiesWithAutomotiveFeature() {
toggleAutomotiveFeature(false);
@@ -246,6 +288,24 @@ public class EthernetServiceImplTest {
eq(UPDATE_REQUEST.getNetworkCapabilities()), eq(NULL_LISTENER));
}
@Test
public void testUpdateConfigurationAddsSpecifierWhenNotSet() {
final NetworkCapabilities nc = new NetworkCapabilities.Builder()
.addTransportType(TRANSPORT_ETHERNET).build();
final EthernetNetworkUpdateRequest requestSansSpecifier =
new EthernetNetworkUpdateRequest.Builder()
.setNetworkCapabilities(nc)
.build();
final NetworkCapabilities ncWithSpecifier = new NetworkCapabilities(nc)
.setNetworkSpecifier(new EthernetNetworkSpecifier(TEST_IFACE));
mEthernetServiceImpl.updateConfiguration(TEST_IFACE, requestSansSpecifier, NULL_LISTENER);
verify(mEthernetTracker).updateConfiguration(
eq(TEST_IFACE),
isNull(),
eq(ncWithSpecifier), eq(NULL_LISTENER));
}
@Test
public void testEnableInterface() {
mEthernetServiceImpl.enableInterface(TEST_IFACE, NULL_LISTENER);