OTA: Support A/B devices custom images update.
Add a new custom_image option to configure which custom images to use to
update custom partitions in A/B update.
This change also moves oem_settings to common option as A/B update will
use it to set oem properties too.
BUG: 171225290
Test: unittest pass, generate OTAs, flash to devices and check results
Change-Id: I279477d6b2954fb3705d7efede0a8bcd330c108b
diff --git a/tools/releasetools/test_ota_from_target_files.py b/tools/releasetools/test_ota_from_target_files.py
index 9752c2b..8bf7778 100644
--- a/tools/releasetools/test_ota_from_target_files.py
+++ b/tools/releasetools/test_ota_from_target_files.py
@@ -27,6 +27,7 @@
FinalizeMetadata, GetPackageMetadata, PropertyFiles)
from ota_from_target_files import (
_LoadOemDicts, AbOtaPropertyFiles,
+ GetTargetFilesZipForCustomImagesUpdates,
GetTargetFilesZipForPartialUpdates,
GetTargetFilesZipForSecondaryImages,
GetTargetFilesZipWithoutPostinstallConfig,
@@ -545,6 +546,46 @@
with zipfile.ZipFile(target_file) as verify_zip:
self.assertNotIn(POSTINSTALL_CONFIG, verify_zip.namelist())
+ @test_utils.SkipIfExternalToolsUnavailable()
+ def test_GetTargetFilesZipForCustomImagesUpdates_oemDefaultImage(self):
+ input_file = construct_target_files()
+ with zipfile.ZipFile(input_file, 'a', allowZip64=True) as append_zip:
+ common.ZipWriteStr(append_zip, 'IMAGES/oem.img', 'oem')
+ common.ZipWriteStr(append_zip, 'IMAGES/oem_test.img', 'oem_test')
+
+ target_file = GetTargetFilesZipForCustomImagesUpdates(
+ input_file, {'oem': 'oem.img'})
+
+ with zipfile.ZipFile(target_file) as verify_zip:
+ namelist = verify_zip.namelist()
+ ab_partitions = verify_zip.read('META/ab_partitions.txt').decode()
+ oem_image = verify_zip.read('IMAGES/oem.img').decode()
+
+ self.assertIn('META/ab_partitions.txt', namelist)
+ self.assertEqual('boot\nsystem\nvendor\nbootloader\nmodem', ab_partitions)
+ self.assertIn('IMAGES/oem.img', namelist)
+ self.assertEqual('oem', oem_image)
+
+ @test_utils.SkipIfExternalToolsUnavailable()
+ def test_GetTargetFilesZipForCustomImagesUpdates_oemTestImage(self):
+ input_file = construct_target_files()
+ with zipfile.ZipFile(input_file, 'a', allowZip64=True) as append_zip:
+ common.ZipWriteStr(append_zip, 'IMAGES/oem.img', 'oem')
+ common.ZipWriteStr(append_zip, 'IMAGES/oem_test.img', 'oem_test')
+
+ target_file = GetTargetFilesZipForCustomImagesUpdates(
+ input_file, {'oem': 'oem_test.img'})
+
+ with zipfile.ZipFile(target_file) as verify_zip:
+ namelist = verify_zip.namelist()
+ ab_partitions = verify_zip.read('META/ab_partitions.txt').decode()
+ oem_image = verify_zip.read('IMAGES/oem.img').decode()
+
+ self.assertIn('META/ab_partitions.txt', namelist)
+ self.assertEqual('boot\nsystem\nvendor\nbootloader\nmodem', ab_partitions)
+ self.assertIn('IMAGES/oem.img', namelist)
+ self.assertEqual('oem_test', oem_image)
+
def _test_FinalizeMetadata(self, large_entry=False):
entries = [
'required-entry1',