diff options
author | Kohsuke Yatoh <kyatoh@google.com> | 2021-04-21 16:36:38 -0700 |
---|---|---|
committer | Kohsuke Yatoh <kyatoh@google.com> | 2021-04-22 00:23:28 +0000 |
commit | 679a824773aee8c4424787e9f36d10de1f984112 (patch) | |
tree | cb08ab236f2a5e6cc41768fa4028177c304d584f | |
parent | f0a7847318ff7ec2b950a907ffaa10d6120c0ad6 (diff) |
Do not actually reboot the device in VTS test.
- Sometimes reboot takes longer time and makes following tests fail.
- If the device has a screen lock, tests get stuck there.
This is not a new issue, but a recently added test (#launchApp) tries
to start an Activity and it fails when the device is still booting or at
a screen lock.
Bug: 185483743
Bug: 185576411
Test: atest FrameworksServicesTests:UpdatableFontDirTest
Test: atest UpdatableSystemFontTest
Change-Id: I86d4be1761e648114503b5f3560992a89c0b34d7
5 files changed, 46 insertions, 16 deletions
diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java index 7269a8f021f6..91581997849e 100644 --- a/services/core/java/com/android/server/graphics/fonts/FontManagerService.java +++ b/services/core/java/com/android/server/graphics/fonts/FontManagerService.java @@ -314,6 +314,10 @@ public final class FontManagerService extends IFontManager.Stub { } } + /* package */ void restart() { + initialize(); + } + /* package */ Map<String, File> getFontFileMap() { if (mUpdatableFontDir == null) { return Collections.emptyMap(); diff --git a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java index 5457ef2c77a9..8508aa786926 100644 --- a/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java +++ b/services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java @@ -95,6 +95,15 @@ public class FontManagerShellCommand extends ShellCommand { w.println(); w.println("clear"); w.println(" Remove all installed font files and reset to the initial state."); + w.println(); + w.println("restart"); + w.println(" Restart FontManagerService emulating device reboot."); + w.println(" WARNING: this is not a safe operation. Other processes may misbehave if"); + w.println(" they are using fonts updated by FontManagerService."); + w.println(" This command exists merely for testing."); + w.println(); + w.println("status"); + w.println(" Prints status of current system font configuration."); } /* package */ void dumpAll(@NonNull IndentingPrintWriter w) { @@ -368,7 +377,13 @@ public class FontManagerShellCommand extends ShellCommand { return 0; } - private int status(ShellCommand shell) throws SystemFontException { + private int restart(ShellCommand shell) { + mService.restart(); + shell.getOutPrintWriter().println("Success"); + return 0; + } + + private int status(ShellCommand shell) { final IndentingPrintWriter writer = new IndentingPrintWriter(shell.getOutPrintWriter(), " "); FontConfig config = mService.getSystemFontConfig(); @@ -396,6 +411,8 @@ public class FontManagerShellCommand extends ShellCommand { return update(shell); case "clear": return clear(shell); + case "restart": + return restart(shell); case "status": return status(shell); default: diff --git a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java index c0ab09319a06..b39bd7db797d 100644 --- a/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java +++ b/services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java @@ -125,7 +125,7 @@ final class UpdatableFontDir { private final Supplier<Long> mCurrentTimeSupplier; private long mLastModifiedMillis; - private int mConfigVersion = 1; + private int mConfigVersion; /** * A mutable map containing mapping from font file name (e.g. "NotoColorEmoji.ttf") to {@link @@ -152,9 +152,15 @@ final class UpdatableFontDir { mCurrentTimeSupplier = currentTimeSupplier; } + /** + * Loads fonts from file system, validate them, and delete obsolete font files. + * Note that this method may be called by multiple times in integration tests via {@link + * FontManagerService#restart()}. + */ /* package */ void loadFontFileMap() { mFontFileInfoMap.clear(); mLastModifiedMillis = 0; + mConfigVersion = 1; boolean success = false; try { PersistentSystemFontConfig.Config config = new PersistentSystemFontConfig.Config(); diff --git a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java index 8e5136d9659b..f1e5782f110d 100644 --- a/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java +++ b/services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java @@ -381,6 +381,21 @@ public final class UpdatableFontDirTest { } @Test + public void loadFontFileMap_twice() throws Exception { + FakeFontFileParser parser = new FakeFontFileParser(); + FakeFsverityUtil fakeFsverityUtil = new FakeFsverityUtil(); + UpdatableFontDir dir = new UpdatableFontDir( + mUpdatableFontFilesDir, mPreinstalledFontDirs, parser, fakeFsverityUtil, + mConfigFile, mCurrentTimeSupplier); + dir.loadFontFileMap(); + dir.update(Collections.singletonList(newFontUpdateRequest("test.ttf,1", GOOD_SIGNATURE))); + assertThat(dir.getFontFileMap()).containsKey("test.ttf"); + File fontFile = dir.getFontFileMap().get("test.ttf"); + dir.loadFontFileMap(); + assertThat(dir.getFontFileMap().get("test.ttf")).isEqualTo(fontFile); + } + + @Test public void installFontFile() throws Exception { FakeFontFileParser parser = new FakeFontFileParser(); FakeFsverityUtil fakeFsverityUtil = new FakeFsverityUtil(); diff --git a/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java b/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java index 19dfdabd936f..74f6bca4d7a0 100644 --- a/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java +++ b/tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java @@ -196,9 +196,8 @@ public class UpdatableSystemFontTest extends BaseHostJUnit4Test { String fontPath = getFontPath(NOTO_COLOR_EMOJI_TTF); assertThat(fontPath).startsWith(DATA_FONTS_DIR); - expectRemoteCommandToSucceed("stop"); - expectRemoteCommandToSucceed("start"); - waitUntilFontCommandIsReady(); + // Emulate reboot by 'cmd font restart'. + expectRemoteCommandToSucceed("cmd font restart"); String fontPathAfterReboot = getFontPath(NOTO_COLOR_EMOJI_TTF); assertThat(fontPathAfterReboot).isEqualTo(fontPath); } @@ -242,17 +241,6 @@ public class UpdatableSystemFontTest extends BaseHostJUnit4Test { .isNotEqualTo(CommandStatus.SUCCESS); } - private void waitUntilFontCommandIsReady() { - waitUntil(SECONDS.toMillis(30), () -> { - try { - return getDevice().executeShellV2Command("cmd font status").getStatus() - == CommandStatus.SUCCESS; - } catch (DeviceNotAvailableException e) { - return false; - } - }); - } - private void waitUntil(long timeoutMillis, ThrowingSupplier<Boolean> func) { long untilMillis = System.currentTimeMillis() + timeoutMillis; do { |