summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKohsuke Yatoh <kyatoh@google.com>2021-04-21 16:36:38 -0700
committerKohsuke Yatoh <kyatoh@google.com>2021-04-22 00:23:28 +0000
commit679a824773aee8c4424787e9f36d10de1f984112 (patch)
treecb08ab236f2a5e6cc41768fa4028177c304d584f
parentf0a7847318ff7ec2b950a907ffaa10d6120c0ad6 (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
-rw-r--r--services/core/java/com/android/server/graphics/fonts/FontManagerService.java4
-rw-r--r--services/core/java/com/android/server/graphics/fonts/FontManagerShellCommand.java19
-rw-r--r--services/core/java/com/android/server/graphics/fonts/UpdatableFontDir.java8
-rw-r--r--services/tests/servicestests/src/com/android/server/graphics/fonts/UpdatableFontDirTest.java15
-rw-r--r--tests/UpdatableSystemFontTest/src/com/android/updatablesystemfont/UpdatableSystemFontTest.java16
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 {