Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit dd9add8e authored by Eric Biggers's avatar Eric Biggers
Browse files

Make the Factory Reset Protection unit tests work on TV

Some unit tests in LockscreenFrpTest and SyntheticPasswordTests are
broken on cf_x86_tv-userdebug because TV has
config_enableCredentialFactoryResetProtection set to false.  This isn't
a recent breakage -- it's been like this for a long time.

Fix this by mocking out the Resources so that the locksettings unit
tests work the same way on TV as on phone.

Bug: 272294822
Bug: 272295113
Test: atest com.android.server.locksettings # with cf_x86_tv-userdebug
Change-Id: I6296ca007112178867ed450057d5d2db8c94a09f
parent 2acd6320
Loading
Loading
Loading
Loading
+20 −1
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import android.content.ComponentName;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.hardware.authsecret.IAuthSecret;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
@@ -97,6 +98,7 @@ public abstract class BaseLockSettingsServiceTests {
    MockLockSettingsContext mContext;
    LockSettingsStorageTestable mStorage;

    Resources mResources;
    FakeGateKeeperService mGateKeeperService;
    NotificationManager mNotificationManager;
    UserManager mUserManager;
@@ -122,6 +124,7 @@ public abstract class BaseLockSettingsServiceTests {

    @Before
    public void setUp_baseServices() throws Exception {
        mResources = createMockResources();
        mGateKeeperService = new FakeGateKeeperService();
        mNotificationManager = mock(NotificationManager.class);
        mUserManager = mock(UserManager.class);
@@ -146,7 +149,7 @@ public abstract class BaseLockSettingsServiceTests {
        LocalServices.addService(WindowManagerInternal.class, mMockWindowManager);

        final Context origContext = InstrumentationRegistry.getContext();
        mContext = new MockLockSettingsContext(origContext,
        mContext = new MockLockSettingsContext(origContext, mResources,
                mSettingsRule.mockContentResolver(origContext), mUserManager, mNotificationManager,
                mDevicePolicyManager, mock(StorageManager.class), mock(TrustManager.class),
                mock(KeyguardManager.class), mFingerprintManager, mFaceManager, mPackageManager);
@@ -245,6 +248,22 @@ public abstract class BaseLockSettingsServiceTests {
        mLocalService = LocalServices.getService(LockSettingsInternal.class);
    }

    private Resources createMockResources() {
        Resources res = mock(Resources.class);

        // Set up some default configs, copied from core/res/res/values/config.xml
        when(res.getBoolean(eq(com.android.internal.R.bool.config_disableLockscreenByDefault)))
                .thenReturn(false);
        when(res.getBoolean(
                eq(com.android.internal.R.bool.config_enableCredentialFactoryResetProtection)))
                .thenReturn(true);
        when(res.getBoolean(eq(com.android.internal.R.bool.config_isMainUserPermanentAdmin)))
                .thenReturn(true);
        when(res.getBoolean(eq(com.android.internal.R.bool.config_strongAuthRequiredOnBoot)))
                .thenReturn(true);
        return res;
    }

    protected void setDeviceProvisioned(boolean provisioned) {
        Settings.Global.putInt(mContext.getContentResolver(),
                Settings.Global.DEVICE_PROVISIONED, provisioned ? 1 : 0);
+3 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import android.app.trust.TrustManager;
import android.content.Context;
import android.content.pm.PackageManager;
import android.content.pm.UserInfo;
import android.content.res.Resources;
import android.database.sqlite.SQLiteDatabase;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
@@ -106,8 +107,8 @@ public class LockSettingsStorageTests {
        when(mockUserManager.getProfileParent(eq(3))).thenReturn(new UserInfo(0, "name", 0));

        MockLockSettingsContext context = new MockLockSettingsContext(origContext,
                mSettingsRule.mockContentResolver(origContext), mockUserManager,
                mock(NotificationManager.class), mock(DevicePolicyManager.class),
                mock(Resources.class), mSettingsRule.mockContentResolver(origContext),
                mockUserManager, mock(NotificationManager.class), mock(DevicePolicyManager.class),
                mock(StorageManager.class), mock(TrustManager.class), mock(KeyguardManager.class),
                mock(FingerprintManager.class), mock(FaceManager.class),
                mock(PackageManager.class));
+14 −6
Original line number Diff line number Diff line
@@ -27,6 +27,7 @@ import android.content.ContextWrapper;
import android.content.Intent;
import android.content.IntentFilter;
import android.content.pm.PackageManager;
import android.content.res.Resources;
import android.hardware.face.FaceManager;
import android.hardware.fingerprint.FingerprintManager;
import android.os.Handler;
@@ -36,6 +37,7 @@ import android.os.storage.StorageManager;

public class MockLockSettingsContext extends ContextWrapper {

    private final Resources mResources;
    private final ContentResolver mContentResolver;
    private final UserManager mUserManager;
    private final NotificationManager mNotificationManager;
@@ -47,13 +49,14 @@ public class MockLockSettingsContext extends ContextWrapper {
    private final FaceManager mFaceManager;
    private final PackageManager mPackageManager;

    public MockLockSettingsContext(Context base, ContentResolver contentResolver,
            UserManager userManager, NotificationManager notificationManager,
            DevicePolicyManager devicePolicyManager, StorageManager storageManager,
            TrustManager trustManager, KeyguardManager keyguardManager,
            FingerprintManager fingerprintManager, FaceManager faceManager,
            PackageManager packageManager) {
    public MockLockSettingsContext(Context base, Resources resources,
            ContentResolver contentResolver, UserManager userManager,
            NotificationManager notificationManager, DevicePolicyManager devicePolicyManager,
            StorageManager storageManager, TrustManager trustManager,
            KeyguardManager keyguardManager, FingerprintManager fingerprintManager,
            FaceManager faceManager, PackageManager packageManager) {
        super(base);
        mResources = resources;
        mContentResolver = contentResolver;
        mUserManager = userManager;
        mNotificationManager = notificationManager;
@@ -66,6 +69,11 @@ public class MockLockSettingsContext extends ContextWrapper {
        mPackageManager = packageManager;
    }

    @Override
    public Resources getResources() {
        return mResources;
    }

    @Override
    public ContentResolver getContentResolver() {
        return mContentResolver;