Mock permission checks for NetworkManagementServiceTest
NetworkManagementService has been migrated to use AIDL annotations for permission enforcement. Mock the PermissionEnforcer to ensure the control of which permission are checked. Pass down the current PermissionEnforcer to the parent Stub class via the constructor. Bug: 259341026 Test: atest FrameworksServicesTests:com.android.server.NetworkManagementServiceTest Change-Id: I83aabf22cbf0d34a683c51f3d09110fbd5daae6d
This commit is contained in:
@@ -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;
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user