Ethernet validate if iface is tracked on handler am: ed41dfeb44
Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/net/ethernet/+/2002656 Change-Id: I27ebce5904bb35f359faac6dccde73da075c12f5
This commit is contained in:
@@ -220,20 +220,17 @@ public class EthernetNetworkFactory extends NetworkFactory {
|
|||||||
@NonNull final IpConfiguration ipConfig,
|
@NonNull final IpConfiguration ipConfig,
|
||||||
@Nullable final NetworkCapabilities capabilities,
|
@Nullable final NetworkCapabilities capabilities,
|
||||||
@Nullable final IEthernetNetworkManagementListener listener) {
|
@Nullable final IEthernetNetworkManagementListener listener) {
|
||||||
enforceInterfaceIsTracked(ifaceName);
|
if (!hasInterface(ifaceName)) {
|
||||||
|
maybeSendNetworkManagementCallbackForUntracked(ifaceName, listener);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
final NetworkInterfaceState iface = mTrackingInterfaces.get(ifaceName);
|
final NetworkInterfaceState iface = mTrackingInterfaces.get(ifaceName);
|
||||||
iface.updateInterface(ipConfig, capabilities, listener);
|
iface.updateInterface(ipConfig, capabilities, listener);
|
||||||
mTrackingInterfaces.put(ifaceName, iface);
|
mTrackingInterfaces.put(ifaceName, iface);
|
||||||
updateCapabilityFilter();
|
updateCapabilityFilter();
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enforceInterfaceIsTracked(@NonNull final String ifaceName) {
|
|
||||||
if (!hasInterface(ifaceName)) {
|
|
||||||
throw new UnsupportedOperationException(
|
|
||||||
"Interface with name " + ifaceName + " is not being tracked.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private static NetworkCapabilities mixInCapabilities(NetworkCapabilities nc,
|
private static NetworkCapabilities mixInCapabilities(NetworkCapabilities nc,
|
||||||
NetworkCapabilities addedNc) {
|
NetworkCapabilities addedNc) {
|
||||||
final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(nc);
|
final NetworkCapabilities.Builder builder = new NetworkCapabilities.Builder(nc);
|
||||||
@@ -272,10 +269,8 @@ public class EthernetNetworkFactory extends NetworkFactory {
|
|||||||
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
|
@VisibleForTesting(visibility = VisibleForTesting.Visibility.PACKAGE)
|
||||||
protected boolean updateInterfaceLinkState(@NonNull final String ifaceName, final boolean up,
|
protected boolean updateInterfaceLinkState(@NonNull final String ifaceName, final boolean up,
|
||||||
@Nullable final IEthernetNetworkManagementListener listener) {
|
@Nullable final IEthernetNetworkManagementListener listener) {
|
||||||
if (!mTrackingInterfaces.containsKey(ifaceName)) {
|
if (!hasInterface(ifaceName)) {
|
||||||
maybeSendNetworkManagementCallback(listener, null,
|
maybeSendNetworkManagementCallbackForUntracked(ifaceName, listener);
|
||||||
new EthernetNetworkManagementException(
|
|
||||||
ifaceName + " can't be updated as it is not available."));
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -287,6 +282,13 @@ public class EthernetNetworkFactory extends NetworkFactory {
|
|||||||
return iface.updateLinkState(up, listener);
|
return iface.updateLinkState(up, listener);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void maybeSendNetworkManagementCallbackForUntracked(
|
||||||
|
String ifaceName, IEthernetNetworkManagementListener listener) {
|
||||||
|
maybeSendNetworkManagementCallback(listener, null,
|
||||||
|
new EthernetNetworkManagementException(
|
||||||
|
ifaceName + " can't be updated as it is not available."));
|
||||||
|
}
|
||||||
|
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
protected boolean hasInterface(String ifaceName) {
|
protected boolean hasInterface(String ifaceName) {
|
||||||
return mTrackingInterfaces.containsKey(ifaceName);
|
return mTrackingInterfaces.containsKey(ifaceName);
|
||||||
|
|||||||
@@ -66,12 +66,6 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
|||||||
methodName + " is only available on automotive devices.");
|
methodName + " is only available on automotive devices.");
|
||||||
}
|
}
|
||||||
|
|
||||||
private void enforceInterfaceIsTracked(final @NonNull String iface) {
|
|
||||||
if(!mTracker.isTrackingInterface(iface)) {
|
|
||||||
throw new UnsupportedOperationException("The given iface is not currently tracked.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
private boolean checkUseRestrictedNetworksPermission() {
|
private boolean checkUseRestrictedNetworksPermission() {
|
||||||
return PermissionUtils.checkAnyPermissionOf(mContext,
|
return PermissionUtils.checkAnyPermissionOf(mContext,
|
||||||
android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS);
|
android.Manifest.permission.CONNECTIVITY_USE_RESTRICTED_NETWORKS);
|
||||||
@@ -220,13 +214,12 @@ public class EthernetServiceImpl extends IEthernetManager.Stub {
|
|||||||
*/
|
*/
|
||||||
private void validateNetworkManagementState(@NonNull final String iface,
|
private void validateNetworkManagementState(@NonNull final String iface,
|
||||||
final @NonNull String methodName) {
|
final @NonNull String methodName) {
|
||||||
|
Objects.requireNonNull(iface, "Pass a non-null iface.");
|
||||||
|
Objects.requireNonNull(methodName, "Pass a non-null methodName.");
|
||||||
|
|
||||||
enforceAutomotiveDevice(methodName);
|
enforceAutomotiveDevice(methodName);
|
||||||
enforceNetworkManagementPermission();
|
enforceNetworkManagementPermission();
|
||||||
logIfEthernetNotStarted();
|
logIfEthernetNotStarted();
|
||||||
|
|
||||||
Objects.requireNonNull(iface, "Pass a non-null iface.");
|
|
||||||
Objects.requireNonNull(methodName, "Pass a non-null methodName.");
|
|
||||||
enforceInterfaceIsTracked(iface);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -763,4 +763,18 @@ public class EthernetNetworkFactoryTest {
|
|||||||
eq(capabilities), any(), any(), any(), any());
|
eq(capabilities), any(), any(), any(), any());
|
||||||
verifyRestart(ipConfiguration);
|
verifyRestart(ipConfiguration);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testUpdateInterfaceForNonExistingInterface() throws Exception {
|
||||||
|
initEthernetNetworkFactory();
|
||||||
|
// No interface exists due to not calling createAndVerifyProvisionedInterface(...).
|
||||||
|
final NetworkCapabilities capabilities = createDefaultFilterCaps();
|
||||||
|
final IpConfiguration ipConfiguration = createStaticIpConfig();
|
||||||
|
final TestNetworkManagementListener listener = new TestNetworkManagementListener();
|
||||||
|
|
||||||
|
mNetFactory.updateInterface(TEST_IFACE, ipConfiguration, capabilities, listener);
|
||||||
|
|
||||||
|
verifyNoStopOrStart();
|
||||||
|
assertFailedListener(listener, "can't be updated as it is not available");
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -156,30 +156,6 @@ public class EthernetServiceImplTest {
|
|||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testUpdateConfigurationRejectsWithUntrackedIface() {
|
|
||||||
shouldTrackIface(TEST_IFACE, false);
|
|
||||||
assertThrows(UnsupportedOperationException.class, () -> {
|
|
||||||
mEthernetServiceImpl.updateConfiguration(TEST_IFACE, UPDATE_REQUEST, NULL_LISTENER);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testConnectNetworkRejectsWithUntrackedIface() {
|
|
||||||
shouldTrackIface(TEST_IFACE, false);
|
|
||||||
assertThrows(UnsupportedOperationException.class, () -> {
|
|
||||||
mEthernetServiceImpl.connectNetwork(TEST_IFACE, NULL_LISTENER);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
@Test
|
|
||||||
public void testDisconnectNetworkRejectsWithUntrackedIface() {
|
|
||||||
shouldTrackIface(TEST_IFACE, false);
|
|
||||||
assertThrows(UnsupportedOperationException.class, () -> {
|
|
||||||
mEthernetServiceImpl.disconnectNetwork(TEST_IFACE, NULL_LISTENER);
|
|
||||||
});
|
|
||||||
}
|
|
||||||
|
|
||||||
private void denyManageEthPermission() {
|
private void denyManageEthPermission() {
|
||||||
doThrow(new SecurityException("")).when(mContext)
|
doThrow(new SecurityException("")).when(mContext)
|
||||||
.enforceCallingOrSelfPermission(
|
.enforceCallingOrSelfPermission(
|
||||||
|
|||||||
Reference in New Issue
Block a user