Merge "Mock permission checks for NetworkManagementServiceTest"

This commit is contained in:
Thiébaud Weksteen
2022-12-09 00:25:30 +00:00
committed by Android (Google) Code Review
2 changed files with 31 additions and 3 deletions

View File

@@ -17,9 +17,6 @@
package com.android.server;
import static android.Manifest.permission.CONNECTIVITY_INTERNAL;
import static android.Manifest.permission.NETWORK_SETTINGS;
import static android.Manifest.permission.OBSERVE_NETWORK_POLICY;
import static android.Manifest.permission.SHUTDOWN;
import static android.net.ConnectivityManager.FIREWALL_CHAIN_DOZABLE;
import static android.net.ConnectivityManager.FIREWALL_CHAIN_LOW_POWER_STANDBY;
import static android.net.ConnectivityManager.FIREWALL_CHAIN_POWERSAVE;
@@ -63,6 +60,7 @@ import android.os.Binder;
import android.os.Handler;
import android.os.IBinder;
import android.os.INetworkManagementService;
import android.os.PermissionEnforcer;
import android.os.Process;
import android.os.RemoteCallbackList;
import android.os.RemoteException;
@@ -230,6 +228,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub {
*/
private NetworkManagementService(
Context context, Dependencies deps) {
super(PermissionEnforcer.fromContext(context));
mContext = context;
mDeps = deps;

View File

@@ -37,6 +37,7 @@ import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.verifyNoMoreInteractions;
import android.annotation.NonNull;
import android.content.AttributionSource;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.INetd;
@@ -46,8 +47,10 @@ import android.net.NetworkPolicyManager;
import android.os.BatteryStats;
import android.os.Binder;
import android.os.IBinder;
import android.os.PermissionEnforcer;
import android.os.Process;
import android.os.RemoteException;
import android.permission.PermissionCheckerManager;
import android.test.suitebuilder.annotation.SmallTest;
import android.util.ArrayMap;
@@ -87,6 +90,7 @@ public class NetworkManagementServiceTest {
private ArgumentCaptor<INetdUnsolicitedEventListener> mUnsolListenerCaptor;
private final MockDependencies mDeps = new MockDependencies();
private final MockPermissionEnforcer mPermissionEnforcer = new MockPermissionEnforcer();
private final class MockDependencies extends Dependencies {
@Override
@@ -114,6 +118,24 @@ public class NetworkManagementServiceTest {
}
}
private static final class MockPermissionEnforcer extends PermissionEnforcer {
@Override
protected int checkPermission(@NonNull String permission,
@NonNull AttributionSource source) {
String[] granted = new String [] {
android.Manifest.permission.NETWORK_SETTINGS,
android.Manifest.permission.OBSERVE_NETWORK_POLICY,
android.Manifest.permission.SHUTDOWN
};
for (String p : granted) {
if (p.equals(permission)) {
return PermissionCheckerManager.PERMISSION_GRANTED;
}
}
return PermissionCheckerManager.PERMISSION_HARD_DENIED;
}
}
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
@@ -122,6 +144,13 @@ public class NetworkManagementServiceTest {
doReturn(Context.CONNECTIVITY_SERVICE).when(mContext).getSystemServiceName(
eq(ConnectivityManager.class));
doReturn(mCm).when(mContext).getSystemService(eq(Context.CONNECTIVITY_SERVICE));
// The AIDL stub will use PermissionEnforcer to check permission from the caller.
// Mock the service. See MockPermissionEnforcer above.
doReturn(Context.PERMISSION_ENFORCER_SERVICE).when(mContext).getSystemServiceName(
eq(PermissionEnforcer.class));
doReturn(mPermissionEnforcer).when(mContext).getSystemService(
eq(Context.PERMISSION_ENFORCER_SERVICE));
// Start the service and wait until it connects to our socket.
mNMService = NetworkManagementService.create(mContext, mDeps);
}