Add post-install verification for BBOTAs

Similar to the assertations in file-based OTA, we perform verification
for block-based OTAs (BBOTAs) after updating a partition, for both of
the incremental and full OTAs. It increases the update time (~20s on
Nexus 6), but will capture unnoticed errors right away.

Bug: 21500869
Change-Id: I89ac8fe623b855721b7affd07cf9426a23433ab0
This commit is contained in:
Tao Bao
2015-06-01 13:40:49 -07:00
parent b7bb040c75
commit 68658c0f4f
4 changed files with 36 additions and 9 deletions

View File

@@ -1182,6 +1182,7 @@ class BlockDifference(object):
if progress:
script.ShowProgress(progress, 0)
self._WriteUpdate(script, output_zip)
self._WritePostInstallVerifyScript(script)
def WriteVerifyScript(self, script):
partition = self.partition
@@ -1220,6 +1221,21 @@ class BlockDifference(object):
script.AppendExtra(('abort("%s partition has unexpected contents");\n'
'endif;') % (partition,))
def _WritePostInstallVerifyScript(self, script):
partition = self.partition
script.Print('Verifying the updated %s image...' % (partition,))
# Unlike pre-install verification, clobbered_blocks should not be ignored.
ranges = self.tgt.care_map
ranges_str = ranges.to_string_raw()
script.AppendExtra('if range_sha1("%s", "%s") == "%s" then' % (
self.device, ranges_str,
self.tgt.TotalSha1(include_clobbered_blocks=True)))
script.Print('Verified the updated %s image.' % (partition,))
script.AppendExtra(
'else\n'
' abort("%s partition has unexpected contents after OTA update");\n'
'endif;' % (partition,))
def _WriteUpdate(self, script, output_zip):
ZipWrite(output_zip,
'{}.transfer.list'.format(self.path),