diff options
author | Zhomart Mukhamejanov <zhomart@google.com> | 2018-05-04 21:17:01 +0200 |
---|---|---|
committer | Zhomart Mukhamejanov <zhomart@google.com> | 2018-05-08 23:13:34 +0200 |
commit | 96eb59e4b13b07a18fc1a6a85786f2c287bd21db (patch) | |
tree | 5fe427b593f4ae9c39692082ab03e45c272ce077 /updater_sample/tools | |
parent | Merge "recovery: Remove unneeded include of minui.h." (diff) | |
download | android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.tar android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.tar.gz android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.tar.bz2 android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.tar.lz android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.tar.xz android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.tar.zst android_bootable_recovery-96eb59e4b13b07a18fc1a6a85786f2c287bd21db.zip |
Diffstat (limited to 'updater_sample/tools')
-rwxr-xr-x | updater_sample/tools/gen_update_config.py | 51 | ||||
-rwxr-xr-x | updater_sample/tools/test_gen_update_config.py (renamed from updater_sample/tools/gen_update_config_test.py) | 26 |
2 files changed, 38 insertions, 39 deletions
diff --git a/updater_sample/tools/gen_update_config.py b/updater_sample/tools/gen_update_config.py index 057812479..4efa9f1c4 100755 --- a/updater_sample/tools/gen_update_config.py +++ b/updater_sample/tools/gen_update_config.py @@ -17,11 +17,13 @@ """ Given a OTA package file, produces update config JSON file. -Example: tools/gen_update_config.py \\ - --ab_install_type=STREAMING \\ - ota-build-001.zip \\ - my-config-001.json \\ - http://foo.bar/ota-builds/ota-build-001.zip +Example: + $ PYTHONPATH=$ANDROID_BUILD_TOP/build/make/tools/releasetools:$PYTHONPATH \\ + bootable/recovery/updater_sample/tools/gen_update_config.py \\ + --ab_install_type=STREAMING \\ + ota-build-001.zip \\ + my-config-001.json \\ + http://foo.bar/ota-builds/ota-build-001.zip """ import argparse @@ -30,6 +32,8 @@ import os.path import sys import zipfile +import ota_from_target_files # pylint: disable=import-error + class GenUpdateConfig(object): """ @@ -41,7 +45,6 @@ class GenUpdateConfig(object): AB_INSTALL_TYPE_STREAMING = 'STREAMING' AB_INSTALL_TYPE_NON_STREAMING = 'NON_STREAMING' - METADATA_NAME = 'META-INF/com/android/metadata' def __init__(self, package, url, ab_install_type): self.package = package @@ -82,37 +85,27 @@ class GenUpdateConfig(object): def _gen_ab_streaming_metadata(self): """Builds metadata for files required for streaming update.""" with zipfile.ZipFile(self.package, 'r') as package_zip: - property_files = self._get_property_files(package_zip) - metadata = { - 'property_files': property_files + 'property_files': self._get_property_files(package_zip) } return metadata - def _get_property_files(self, zip_file): + @staticmethod + def _get_property_files(package_zip): """Constructs the property-files list for A/B streaming metadata.""" - def compute_entry_offset_size(name): - """Computes the zip entry offset and size.""" - info = zip_file.getinfo(name) - offset = info.header_offset + len(info.FileHeader()) - size = info.file_size - return { - 'filename': os.path.basename(name), - 'offset': offset, - 'size': size, - } - + ab_ota = ota_from_target_files.AbOtaPropertyFiles() + property_str = ab_ota.GetPropertyFilesString(package_zip, False) property_files = [] - for entry in self.streaming_required: - property_files.append(compute_entry_offset_size(entry)) - for entry in self.streaming_optional: - if entry in zip_file.namelist(): - property_files.append(compute_entry_offset_size(entry)) - - # 'META-INF/com/android/metadata' is required - property_files.append(compute_entry_offset_size(GenUpdateConfig.METADATA_NAME)) + for file in property_str.split(','): + filename, offset, size = file.split(':') + inner_file = { + 'filename': filename, + 'offset': int(offset), + 'size': int(size) + } + property_files.append(inner_file) return property_files diff --git a/updater_sample/tools/gen_update_config_test.py b/updater_sample/tools/test_gen_update_config.py index 951d4c4a7..c907cf2f9 100755 --- a/updater_sample/tools/gen_update_config_test.py +++ b/updater_sample/tools/test_gen_update_config.py @@ -15,7 +15,11 @@ # limitations under the License. """ -Tests gen_update_config.py +Tests gen_update_config.py. + +Example: + $ PYTHONPATH=$ANDROID_BUILD_TOP/build/make/tools/releasetools:$PYTHONPATH \\ + python3 -m unittest test_gen_update_config """ import os.path @@ -29,15 +33,21 @@ class GenUpdateConfigTest(unittest.TestCase): # pylint: disable=missing-docstrin """tests if streaming property files' offset and size are generated properly""" config, package = self._generate_config() property_files = config['ab_streaming_metadata']['property_files'] - self.assertEqual(len(property_files), 5) + self.assertEqual(len(property_files), 6) with open(package, 'rb') as pkg_file: for prop in property_files: filename, offset, size = prop['filename'], prop['offset'], prop['size'] pkg_file.seek(offset) - data = pkg_file.read(size).decode('ascii') - # data in the archive are just uppercase filenames without extension - expected_data = filename.split('.')[0].upper() - self.assertEqual(data, expected_data) + raw_data = pkg_file.read(size) + if filename in ['payload.bin', 'payload_metadata.bin']: + pass + elif filename == 'payload_properties.txt': + pass + elif filename == 'metadata': + self.assertEqual(raw_data.decode('ascii'), 'META-INF/COM/ANDROID/METADATA') + else: + expected_data = filename.replace('.', '-').upper() + self.assertEqual(raw_data.decode('ascii'), expected_data) @staticmethod def _generate_config(): @@ -49,7 +59,3 @@ class GenUpdateConfigTest(unittest.TestCase): # pylint: disable=missing-docstrin GenUpdateConfig.AB_INSTALL_TYPE_STREAMING) gen.run() return gen.config, ota_package - - -if __name__ == '__main__': - unittest.main() |