Rewriting failure investigator database in a more readable way

Change-Id: Iccf2e8e0a45dbbcd8f2600d9094d6a10eabaf3da
This commit is contained in:
vadimt 2020-01-30 19:25:03 -08:00
parent 01372013d3
commit e2446c8cad
1 changed files with 58 additions and 33 deletions

View File

@ -32,12 +32,62 @@ class FailureInvestigator {
return Pattern.compile(regex).matcher(string).find(); return Pattern.compile(regex).matcher(string).find();
} }
static class LogcatMatch {
String logcatPattern;
int bug;
LogcatMatch(String logcatPattern, int bug) {
this.logcatPattern = logcatPattern;
this.bug = bug;
}
}
static class ExceptionMatch {
String exceptionPattern;
LogcatMatch[] logcatMatches;
ExceptionMatch(String exceptionPattern, LogcatMatch[] logcatMatches) {
this.exceptionPattern = exceptionPattern;
this.logcatMatches = logcatMatches;
}
}
private static final ExceptionMatch[] EXCEPTION_MATCHES = {
new ExceptionMatch(
"java.lang.AssertionError: http://go/tapl : Tests are broken by a "
+ "non-Launcher system error: Phone is locked",
new LogcatMatch[]{
new LogcatMatch(
"BroadcastQueue: Can't deliver broadcast to com.android"
+ ".systemui.*Crashing it",
147845913),
new LogcatMatch(
"Attempt to invoke virtual method 'boolean android\\"
+ ".graphics\\.Bitmap\\.isRecycled\\(\\)' on a null "
+ "object reference",
148424291),
new LogcatMatch(
"java\\.lang\\.IllegalArgumentException\\: Ranking map "
+ "doesn't contain key",
148570537),
}),
new ExceptionMatch("Launcher didn't initialize",
new LogcatMatch[]{
new LogcatMatch(
"ActivityManager: Reason: executing service com.google"
+ ".android.apps.nexuslauncher/com.android.launcher3"
+ ".notification.NotificationListener",
148238677),
}),
};
static int getBugForFailure(CharSequence exception) { static int getBugForFailure(CharSequence exception) {
if ("com.google.android.setupwizard".equals( if ("com.google.android.setupwizard".equals(
UiDevice.getInstance(getInstrumentation()).getLauncherPackageName())) { UiDevice.getInstance(getInstrumentation()).getLauncherPackageName())) {
return 145935261; return 145935261;
} }
final String logSinceBoot; final String logSinceBoot;
try { try {
final String systemBootTime = final String systemBootTime =
@ -51,39 +101,14 @@ class FailureInvestigator {
return 0; return 0;
} }
if (matches( for (ExceptionMatch exceptionMatch : EXCEPTION_MATCHES) {
"java.lang.AssertionError: http://go/tapl : Tests are broken by a non-Launcher " if (matches(exceptionMatch.exceptionPattern, exception)) {
+ "system error: Phone is locked", for (LogcatMatch logcatMatch : exceptionMatch.logcatMatches) {
exception)) { if (matches(logcatMatch.logcatPattern, logSinceBoot)) {
if (matches( return logcatMatch.bug;
"BroadcastQueue: Can't deliver broadcast to com.android.systemui.*Crashing it", }
logSinceBoot)) { }
return 147845913; break;
}
if (matches(
"Attempt to invoke virtual method 'boolean android\\.graphics\\.Bitmap\\"
+ ".isRecycled\\(\\)' on a null object reference",
logSinceBoot)) {
return 148424291;
}
if (matches(
"java\\.lang\\.IllegalArgumentException\\: Ranking map doesn't contain key",
logSinceBoot)) {
return 148570537;
}
} else if (matches("java.lang.AssertionError: Launcher build match not found", exception)) {
if (matches(
"TestStabilityRule: Launcher package: com.google.android.setupwizard",
logSinceBoot)) {
return 145935261;
}
} else if (matches("Launcher didn't initialize", exception)) {
if (matches(
"ActivityManager: Reason: executing service com.google.android.apps"
+ ".nexuslauncher/com.android.launcher3.notification"
+ ".NotificationListener",
logSinceBoot)) {
return 148238677;
} }
} }