Files
avbroot/e2e
Andrew Gunnerson 296df25fb9 Ensure that PrepatchedImagePatcher runs before other patchers
On older devices, like the Pixel 4a, where `boot` is used for both
Android and recovery mode, the image will be patched by OtaCertPatcher
and PrepatchedImagePatcher. OtaCertPatcher was always set to run first,
so when PrepatchedImagePatcher used the user-supplied image as-is, prior
modifications got wiped out. This made is so users could no longer flash
further patched OTAs.

This is an unfortunate regression that was introduced in avbroot 2.0.0.
The e2e tests never caught this issue because the --prepatched test was
being fed the boot image previously patched by --magisk. That already
had valid certs so the result of OtaCertPatcher's modifications being
lost were not visible. This commit also fixes the e2e tests so that this
type of issue will be caught in the future.

Fixes: #356

Signed-off-by: Andrew Gunnerson <accounts+github@chiller3.com>
2024-09-21 18:17:46 -04:00
..

End-to-end tests

avbroot's output file is reproducible for a given input file. e2e.toml lists some profiles for generating mock OTA images with unique properties and the expected checksums before and after patching. These tests use pregenerated, hardcoded test keys for signing. These keys should NEVER be used for any other purpose.

For each profile listed in the config, the test process will:

  1. Generate a mock OTA based on the specification
  2. Verify tha original OTA checksum
  3. Run avbroot against the OTA using --magisk (with a mock Magisk APK)
  4. Verify the patched OTA checksum
  5. Extract the AVB-related partitions from the patched OTA
  6. Run avbroot against the OTA again using --prepatched
  7. Verify the patched OTA checksum again

The default profiles shipped with the project mimic how various stock OTAs for Pixel devices are built. The generated mock OTAs have valid signatures and data structures for all components, but without any actual data where possible. For example, most files in the ramdisks are empty files. To ensure the mock OTAs cannot be mistakenly installed on a real device, the OTA metadata lists a fake device name in the preconditions section.

Running the tests

To test against the profiles listed in e2e.toml, run:

# To test all profiles
cargo run --release -- test -a
# Or to test against specific profiles
cargo run --release -- test -p pixel_v4_gki -p pixel_v4_non_gki