Fix flaky tests.
Because message queue is used, it is possible that the user start message is not yet processed when there's another update to the DeviceConfig, this patch uses the TestLooper to manually force all messages processed when there is a dependency or race condition. Bug: b/194262212 Test: atest GameManagerServiceTests Change-Id: I21f342ea3ad802a24500fea47121aa067450022d
This commit is contained in:
@@ -852,7 +852,7 @@ public final class GameManagerService extends IGameManagerService.Stub {
|
||||
* @hide
|
||||
*/
|
||||
@VisibleForTesting
|
||||
public void updateConfigsForUser(int userId, String ...packageNames) {
|
||||
void updateConfigsForUser(int userId, String ...packageNames) {
|
||||
try {
|
||||
synchronized (mDeviceConfigLock) {
|
||||
for (final String packageName : packageNames) {
|
||||
|
||||
@@ -37,6 +37,7 @@ android_test {
|
||||
],
|
||||
|
||||
static_libs: [
|
||||
"frameworks-base-testutils",
|
||||
"services.core",
|
||||
"services.devicepolicy",
|
||||
"services.net",
|
||||
|
||||
@@ -34,6 +34,7 @@ import android.content.pm.ApplicationInfo;
|
||||
import android.content.pm.PackageInfo;
|
||||
import android.content.pm.PackageManager;
|
||||
import android.os.Bundle;
|
||||
import android.os.test.TestLooper;
|
||||
import android.platform.test.annotations.Presubmit;
|
||||
import android.provider.DeviceConfig;
|
||||
import android.util.ArraySet;
|
||||
@@ -67,6 +68,7 @@ public class GameManagerServiceTests {
|
||||
|
||||
private MockitoSession mMockingSession;
|
||||
private String mPackageName;
|
||||
private TestLooper mTestLooper;
|
||||
@Mock
|
||||
private PackageManager mMockPackageManager;
|
||||
|
||||
@@ -132,6 +134,7 @@ public class GameManagerServiceTests {
|
||||
|
||||
@Before
|
||||
public void setUp() throws Exception {
|
||||
mTestLooper = new TestLooper();
|
||||
mMockingSession = mockitoSession()
|
||||
.initMocks(this)
|
||||
.mockStatic(DeviceConfig.class)
|
||||
@@ -161,6 +164,11 @@ public class GameManagerServiceTests {
|
||||
}
|
||||
}
|
||||
|
||||
private void startUser(GameManagerService gameManagerService, int userId) {
|
||||
gameManagerService.onUserStarting(userId);
|
||||
mTestLooper.dispatchAll();
|
||||
}
|
||||
|
||||
private void mockModifyGameModeGranted() {
|
||||
mMockContext.setPermission(Manifest.permission.MANAGE_GAME_MODE,
|
||||
PackageManager.PERMISSION_GRANTED);
|
||||
@@ -301,9 +309,10 @@ public class GameManagerServiceTests {
|
||||
*/
|
||||
@Test
|
||||
public void testGameModeDefaultValue() {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
mockModifyGameModeGranted();
|
||||
|
||||
assertEquals(GameManager.GAME_MODE_UNSUPPORTED,
|
||||
@@ -315,9 +324,10 @@ public class GameManagerServiceTests {
|
||||
*/
|
||||
@Test
|
||||
public void testDefaultValueForNonexistentUser() {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
mockModifyGameModeGranted();
|
||||
|
||||
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_STANDARD, USER_ID_2);
|
||||
@@ -330,8 +340,11 @@ public class GameManagerServiceTests {
|
||||
*/
|
||||
@Test
|
||||
public void testGameMode() {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
mockModifyGameModeGranted();
|
||||
assertEquals(GameManager.GAME_MODE_UNSUPPORTED,
|
||||
@@ -353,8 +366,10 @@ public class GameManagerServiceTests {
|
||||
*/
|
||||
@Test
|
||||
public void testGetGameModeInvalidPackageName() {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
try {
|
||||
assertEquals(GameManager.GAME_MODE_UNSUPPORTED,
|
||||
gameManagerService.getGameMode(PACKAGE_NAME_INVALID,
|
||||
@@ -375,8 +390,9 @@ public class GameManagerServiceTests {
|
||||
public void testSetGameModePermissionDenied() {
|
||||
mockModifyGameModeGranted();
|
||||
mockDeviceConfigAll();
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
|
||||
// Update the game mode so we can read back something valid.
|
||||
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_STANDARD, USER_ID_1);
|
||||
@@ -408,9 +424,11 @@ public class GameManagerServiceTests {
|
||||
public void testGameModeMultipleUsers() {
|
||||
mockModifyGameModeGranted();
|
||||
mockDeviceConfigAll();
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
gameManagerService.onUserStarting(USER_ID_2);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
startUser(gameManagerService, USER_ID_2);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_2, mPackageName);
|
||||
|
||||
@@ -437,8 +455,10 @@ public class GameManagerServiceTests {
|
||||
}
|
||||
|
||||
private void checkReportedModes(int ...requiredModes) {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
ArraySet<Integer> reportedModes = new ArraySet<>();
|
||||
int[] modes = gameManagerService.getAvailableGameModes(mPackageName);
|
||||
@@ -453,8 +473,10 @@ public class GameManagerServiceTests {
|
||||
}
|
||||
|
||||
private void checkDownscaling(int gameMode, String scaling) {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
GameManagerService.GamePackageConfiguration config =
|
||||
gameManagerService.getConfig(mPackageName);
|
||||
@@ -643,8 +665,10 @@ public class GameManagerServiceTests {
|
||||
*/
|
||||
@Test
|
||||
public void testInterventionAllowAngleDefault() throws Exception {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService = new GameManagerService(
|
||||
mMockContext, mTestLooper.getLooper());
|
||||
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
mockDeviceConfigPerformance();
|
||||
mockModifyGameModeGranted();
|
||||
checkAngleEnabled(gameManagerService, GameManager.GAME_MODE_PERFORMANCE, false);
|
||||
@@ -655,7 +679,8 @@ public class GameManagerServiceTests {
|
||||
*/
|
||||
@Test
|
||||
public void testInterventionAllowAngleFalse() throws Exception {
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
mockDeviceConfigPerformanceEnableAngle();
|
||||
mockInterventionAllowAngleFalse();
|
||||
@@ -672,8 +697,9 @@ public class GameManagerServiceTests {
|
||||
mockDeviceConfigPerformanceEnableAngle();
|
||||
mockInterventionAllowAngleTrue();
|
||||
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
mockModifyGameModeGranted();
|
||||
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
|
||||
assertEquals(GameManager.GAME_MODE_PERFORMANCE,
|
||||
@@ -691,8 +717,9 @@ public class GameManagerServiceTests {
|
||||
mockDeviceConfigPerformance();
|
||||
mockGameModeOptInPerformance();
|
||||
mockModifyGameModeGranted();
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
GameManagerService.GamePackageConfiguration config =
|
||||
gameManagerService.getConfig(mPackageName);
|
||||
@@ -707,8 +734,9 @@ public class GameManagerServiceTests {
|
||||
public void testUnsetInvalidGameMode() throws Exception {
|
||||
mockDeviceConfigNone();
|
||||
mockModifyGameModeGranted();
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_PERFORMANCE, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
assertEquals(GameManager.GAME_MODE_UNSUPPORTED,
|
||||
@@ -723,8 +751,9 @@ public class GameManagerServiceTests {
|
||||
public void testResetInvalidGameMode() throws Exception {
|
||||
mockDeviceConfigPerformance();
|
||||
mockModifyGameModeGranted();
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_BATTERY, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
assertEquals(GameManager.GAME_MODE_STANDARD,
|
||||
@@ -739,8 +768,9 @@ public class GameManagerServiceTests {
|
||||
public void testSetValidGameMode() throws Exception {
|
||||
mockDeviceConfigPerformance();
|
||||
mockModifyGameModeGranted();
|
||||
GameManagerService gameManagerService = new GameManagerService(mMockContext);
|
||||
gameManagerService.onUserStarting(USER_ID_1);
|
||||
GameManagerService gameManagerService =
|
||||
new GameManagerService(mMockContext, mTestLooper.getLooper());
|
||||
startUser(gameManagerService, USER_ID_1);
|
||||
gameManagerService.setGameMode(mPackageName, GameManager.GAME_MODE_UNSUPPORTED, USER_ID_1);
|
||||
gameManagerService.updateConfigsForUser(USER_ID_1, mPackageName);
|
||||
assertEquals(GameManager.GAME_MODE_STANDARD,
|
||||
|
||||
Reference in New Issue
Block a user