Wait after putting a display to sleep in ApfIntegrationTest in Automotive Multi Display configuration instead of polling for interactiveness
Testing if a display has been put to sleep does not yet work in Automotive Multi Display configuration as PowerManager#isInteractive is not yet per-display. This is a pre-condition changelist to enable CtsNetTestCases for secondary users on secondary displays. Bug: 374210153 Bug: 330610015 Test: atest CtsNetTestCases:android.net.cts.ApfIntegrationTest Flag: TEST_ONLY Change-Id: I3197b051002fcf20309692eab682a0c7db7844f7
This commit is contained in:
parent
92071eea46
commit
799aed88ad
1 changed files with 29 additions and 5 deletions
|
|
@ -20,6 +20,8 @@
|
|||
package android.net.cts
|
||||
|
||||
import android.Manifest.permission.WRITE_DEVICE_CONFIG
|
||||
import android.content.pm.PackageManager
|
||||
import android.content.pm.PackageManager.FEATURE_AUTOMOTIVE
|
||||
import android.content.pm.PackageManager.FEATURE_WIFI
|
||||
import android.net.ConnectivityManager
|
||||
import android.net.Network
|
||||
|
|
@ -49,6 +51,7 @@ import android.os.Build
|
|||
import android.os.Handler
|
||||
import android.os.HandlerThread
|
||||
import android.os.PowerManager
|
||||
import android.os.UserManager
|
||||
import android.platform.test.annotations.AppModeFull
|
||||
import android.provider.DeviceConfig
|
||||
import android.provider.DeviceConfig.NAMESPACE_CONNECTIVITY
|
||||
|
|
@ -140,15 +143,34 @@ class ApfIntegrationTest {
|
|||
fun turnScreenOff() {
|
||||
if (!wakeLock.isHeld()) wakeLock.acquire()
|
||||
runShellCommandOrThrow("input keyevent KEYCODE_SLEEP")
|
||||
val result = pollingCheck({ !powerManager.isInteractive() }, timeout_ms = 2000)
|
||||
assertThat(result).isTrue()
|
||||
waitForInteractiveState(false)
|
||||
}
|
||||
|
||||
fun turnScreenOn() {
|
||||
if (wakeLock.isHeld()) wakeLock.release()
|
||||
runShellCommandOrThrow("input keyevent KEYCODE_WAKEUP")
|
||||
val result = pollingCheck({ powerManager.isInteractive() }, timeout_ms = 2000)
|
||||
assertThat(result).isTrue()
|
||||
waitForInteractiveState(true)
|
||||
}
|
||||
|
||||
private fun waitForInteractiveState(interactive: Boolean) {
|
||||
// TODO(b/366037029): This test condition should be removed once
|
||||
// PowerManager#isInteractive is fully implemented on automotive
|
||||
// form factor with visible background user.
|
||||
if (isAutomotiveWithVisibleBackgroundUser()) {
|
||||
// Wait for 2 seconds to ensure the interactive state is updated.
|
||||
// This is a workaround for b/366037029.
|
||||
Thread.sleep(2000L)
|
||||
} else {
|
||||
val result = pollingCheck({ powerManager.isInteractive() }, timeout_ms = 2000)
|
||||
assertThat(result).isEqualTo(interactive)
|
||||
}
|
||||
}
|
||||
|
||||
private fun isAutomotiveWithVisibleBackgroundUser(): Boolean {
|
||||
val packageManager = context.getPackageManager()
|
||||
val userManager = context.getSystemService(UserManager::class.java)!!
|
||||
return (packageManager.hasSystemFeature(FEATURE_AUTOMOTIVE)
|
||||
&& userManager.isVisibleBackgroundUsersSupported)
|
||||
}
|
||||
|
||||
@BeforeClass
|
||||
|
|
@ -156,9 +178,11 @@ class ApfIntegrationTest {
|
|||
@Suppress("ktlint:standard:no-multi-spaces")
|
||||
fun setupOnce() {
|
||||
// TODO: assertions thrown in @BeforeClass / @AfterClass are not well supported in the
|
||||
// test infrastructure. Consider saving excepion and throwing it in setUp().
|
||||
// test infrastructure. Consider saving exception and throwing it in setUp().
|
||||
|
||||
// APF must run when the screen is off and the device is not interactive.
|
||||
turnScreenOff()
|
||||
|
||||
// Wait for APF to become active.
|
||||
Thread.sleep(1000)
|
||||
// TODO: check that there is no active wifi network. Otherwise, ApfFilter has already been
|
||||
|
|
|
|||
Loading…
Reference in a new issue