Merge "AndroidPackageParsingTestBase: Re-throw failures in setUpPackages in individual tests" into rvc-dev
diff --git a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt
index d7b02f4..19bf9b6 100644
--- a/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt
+++ b/services/tests/servicestests/src/com/android/server/pm/parsing/AndroidPackageParsingTestBase.kt
@@ -91,24 +91,35 @@
lateinit var newPackages: List<AndroidPackage>
+ var failureInBeforeClass: Throwable? = null
+
@Suppress("ConstantConditionIf")
@JvmStatic
@BeforeClass
fun setUpPackages() {
- this.oldPackages = apks.map {
- packageParser.parsePackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false)
- }
+ failureInBeforeClass = null
+ try {
+ this.oldPackages = apks.map {
+ packageParser.parsePackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false)
+ }
- this.newPackages = apks.map {
- packageParser2.parsePackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false)
- }
+ this.newPackages = apks.map {
+ packageParser2.parsePackage(it, PackageParser.PARSE_IS_SYSTEM_DIR, false)
+ }
- if (DUMP_HPROF_TO_EXTERNAL) {
- System.gc()
- Environment.getExternalStorageDirectory()
- .resolve("${AndroidPackageParsingTestBase::class.java.simpleName}.hprof")
- .absolutePath
- .run(Debug::dumpHprofData)
+ if (DUMP_HPROF_TO_EXTERNAL) {
+ System.gc()
+ Environment.getExternalStorageDirectory()
+ .resolve(
+ "${AndroidPackageParsingTestBase::class.java.simpleName}.hprof")
+ .absolutePath
+ .run(Debug::dumpHprofData)
+ }
+ } catch (t: Throwable) {
+ // If we crash here we cause a tool failure (because we don't run any of the tests
+ // in the subclasses, leading to a difference between expected and actual test
+ // result counts).
+ failureInBeforeClass = t
}
}
@@ -137,6 +148,13 @@
}
}
+ @org.junit.Before
+ fun verifySetUpPackages() {
+ failureInBeforeClass?.let {
+ throw AssertionError("setUpPackages failed:", it)
+ }
+ }
+
// The following methods dump an exact set of fields from the object to compare, because
// 1. comprehensive equals/toStrings do not exist on all of the Info objects, and
// 2. the test must only verify fields that [PackageParser.Package] can actually fill, as