Merge "Do not actually reboot the device in VTS test." into sc-dev

This commit is contained in:
Kohsuke Yatoh
2021-04-22 03:59:40 +00:00
committed by Android (Google) Code Review
5 changed files with 46 additions and 16 deletions

View File

@@ -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();

View File

@@ -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:

View File

@@ -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();

View File

@@ -380,6 +380,21 @@ public final class UpdatableFontDirTest {
.isEqualTo(dir.getFontFileMap().get("foo.ttf"));
}
@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();

View File

@@ -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 {