From dd9add8ef345baf6582eb0e3fc830053d213e04c Mon Sep 17 00:00:00 2001 From: Eric Biggers Date: Wed, 8 Mar 2023 22:38:34 +0000 Subject: [PATCH] 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 --- .../BaseLockSettingsServiceTests.java | 21 ++++++++++++++++++- .../LockSettingsStorageTests.java | 5 +++-- .../locksettings/MockLockSettingsContext.java | 20 ++++++++++++------ 3 files changed, 37 insertions(+), 9 deletions(-) diff --git a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java index c9612cd80ac62..ad63da516b156 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/BaseLockSettingsServiceTests.java @@ -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); diff --git a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java index 05208441e3f2c..10ed882f343ff 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/LockSettingsStorageTests.java @@ -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)); diff --git a/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java b/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java index 21c367b3a6e2f..96d7cbe004295 100644 --- a/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java +++ b/services/tests/servicestests/src/com/android/server/locksettings/MockLockSettingsContext.java @@ -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;