summaryrefslogtreecommitdiffstats
path: root/updater_sample/tools
diff options
context:
space:
mode:
Diffstat (limited to 'updater_sample/tools')
-rwxr-xr-xupdater_sample/tools/gen_update_config.py51
-rwxr-xr-xupdater_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()