Enable lockUserTest

Code such that after lockUserTest is run, we assert that the keyguard
was successfully dismissed so that the device can return to it's pretest
state. All tests run in <5s now.

Test: atest TrustTests --iterations
Bug: 221155933
Change-Id: I20bf7671f8deeb6c70a977e7c2fc7cbc5395fe4b
This commit is contained in:
Your Name
2022-03-08 23:18:23 +00:00
parent 3e2a850fa6
commit c83a7fd623
3 changed files with 35 additions and 19 deletions

View File

@@ -23,7 +23,9 @@
<uses-permission android:name="android.permission.BIND_DEVICE_ADMIN" />
<uses-permission android:name="android.permission.CONTROL_KEYGUARD" />
<uses-permission android:name="android.permission.DEVICE_POWER" />
<uses-permission android:name="android.permission.DISABLE_KEYGUARD" />
<uses-permission android:name="android.permission.INTERACT_ACROSS_USERS_FULL" />
<uses-permission android:name="android.permission.MANAGE_USERS" />
<uses-permission android:name="android.permission.PROVIDE_TRUST_AGENT" />
<uses-permission android:name="android.permission.TRUST_LISTENER" />

View File

@@ -25,7 +25,6 @@ import android.util.Log
import androidx.test.ext.junit.rules.ActivityScenarioRule
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.google.common.truth.Truth.assertThat
import org.junit.Ignore
import org.junit.Rule
import org.junit.Test
import org.junit.rules.RuleChain
@@ -49,7 +48,6 @@ class LockUserTest {
.around(lockStateTrackingRule)
.around(trustAgentRule)
@Ignore("Causes issues with subsequent tests") // TODO: Enable test
@Test
fun lockUser_locksTheDevice() {
Log.i(TAG, "Locking user")

View File

@@ -20,6 +20,8 @@ import android.content.Context
import android.util.Log
import android.view.WindowManagerGlobal
import androidx.test.core.app.ApplicationProvider.getApplicationContext
import androidx.test.platform.app.InstrumentationRegistry.getInstrumentation
import androidx.test.uiautomator.UiDevice
import com.android.internal.widget.LockPatternUtils
import com.android.internal.widget.LockscreenCredential
import com.google.common.truth.Truth.assertWithMessage
@@ -32,6 +34,7 @@ import org.junit.runners.model.Statement
*/
class ScreenLockRule : TestRule {
private val context: Context = getApplicationContext()
private val uiDevice = UiDevice.getInstance(getInstrumentation())
private val windowManager = WindowManagerGlobal.getWindowManagerService()
private val lockPatternUtils = LockPatternUtils(context)
private var instantLockSavedValue = false
@@ -48,19 +51,21 @@ class ScreenLockRule : TestRule {
} finally {
removeScreenLock()
revertLockOnPowerButton()
verifyKeyguardDismissed()
}
}
}
private fun verifyNoScreenLockAlreadySet() {
assertWithMessage("Screen Lock must not already be set on device")
.that(lockPatternUtils.isSecure(context.userId))
.isFalse()
.that(lockPatternUtils.isSecure(context.userId))
.isFalse()
}
private fun verifyKeyguardDismissed() {
val maxWaits = 30
var waitCount = 0
while (windowManager.isKeyguardLocked && waitCount < maxWaits) {
Log.i(TAG, "Keyguard still showing; attempting to dismiss and wait 50ms ($waitCount)")
windowManager.dismissKeyguard(null, null)
@@ -68,19 +73,19 @@ class ScreenLockRule : TestRule {
waitCount++
}
assertWithMessage("Keyguard should be unlocked")
.that(windowManager.isKeyguardLocked)
.isFalse()
.that(windowManager.isKeyguardLocked)
.isFalse()
}
private fun setScreenLock() {
lockPatternUtils.setLockCredential(
LockscreenCredential.createPin(PIN),
LockscreenCredential.createNone(),
context.userId
LockscreenCredential.createPin(PIN),
LockscreenCredential.createNone(),
context.userId
)
assertWithMessage("Screen Lock should now be set")
.that(lockPatternUtils.isSecure(context.userId))
.isTrue()
.that(lockPatternUtils.isSecure(context.userId))
.isTrue()
Log.i(TAG, "Device PIN set to $PIN")
}
@@ -90,14 +95,25 @@ class ScreenLockRule : TestRule {
}
private fun removeScreenLock() {
lockPatternUtils.setLockCredential(
LockscreenCredential.createNone(),
LockscreenCredential.createPin(PIN),
context.userId
)
Log.i(TAG, "Device PIN cleared; waiting 50 ms then dismissing Keyguard")
Thread.sleep(50)
windowManager.dismissKeyguard(null, null)
var lockCredentialUnset = lockPatternUtils.setLockCredential(
LockscreenCredential.createNone(),
LockscreenCredential.createPin(PIN),
context.userId)
Thread.sleep(100)
assertWithMessage("Lock screen credential should be unset")
.that(lockCredentialUnset)
.isTrue()
lockPatternUtils.setLockScreenDisabled(true, context.userId)
Thread.sleep(100)
assertWithMessage("Lockscreen needs to be disabled")
.that(lockPatternUtils.isLockScreenDisabled(context.userId))
.isTrue()
// this is here because somehow it helps the keyguard not get stuck
uiDevice.sleep()
Thread.sleep(500) // delay added to avoid initiating camera by double clicking power
uiDevice.wakeUp()
}
private fun revertLockOnPowerButton() {