There is quite some code duplication between the image creation for mmc7.img and mmc8.img. If we want to add more images, this will be even more duplication.
Add a common function, create_gpt_image() which removes all the code duplication. Signed-off-by: Mattijs Korpershoek <[email protected]> --- test/py/tests/test_android/android_image.py | 78 +++++++---------------------- 1 file changed, 19 insertions(+), 59 deletions(-) diff --git a/test/py/tests/test_android/android_image.py b/test/py/tests/test_android/android_image.py index 14dfd26fffd8..b5fede8ebf0b 100644 --- a/test/py/tests/test_android/android_image.py +++ b/test/py/tests/test_android/android_image.py @@ -7,13 +7,12 @@ import os import utils from test_android import test_abootimg -def setup_android_image(ubman): +Partition = collections.namedtuple('part', 'start,size,name') + +def create_gpt_image(ubman, mmc_dev, required_parts, images): """Create a 20MB disk image with Android partitions""" - Partition = collections.namedtuple('part', 'start,size,name') parts = {} disk_data = None - - mmc_dev = 7 fname = os.path.join(ubman.config.source_dir, f'mmc{mmc_dev}.img') utils.run_and_log(ubman, f'qemu-img create {fname} 20M') utils.run_and_log(ubman, f'cgpt create {fname}') @@ -24,14 +23,6 @@ def setup_android_image(ubman): sect_size = 512 sect_1mb = (1 << 20) // sect_size - required_parts = [ - {'num': 1, 'label':'misc', 'size': '1M'}, - {'num': 2, 'label':'boot_a', 'size': '4M'}, - {'num': 3, 'label':'boot_b', 'size': '4M'}, - {'num': 4, 'label':'vendor_boot_a', 'size': '4M'}, - {'num': 5, 'label':'vendor_boot_b', 'size': '4M'}, - ] - for part in required_parts: size_str = part['size'] if 'M' in size_str: @@ -54,10 +45,6 @@ def setup_android_image(ubman): with open(fname, 'rb') as inf: disk_data = inf.read() - images = [ - (2, 'bootv4.img', test_abootimg.boot_img_hex), - (4, 'vendor_boot.img', test_abootimg.vboot_img_hex), - ] for partnum, img_name, hex_data in images: test_abootimg.AbootimgTestDiskImage(ubman, img_name, hex_data) img_path = os.path.join(ubman.config.result_dir, img_name) @@ -69,55 +56,28 @@ def setup_android_image(ubman): with open(fname, 'wb') as outf: outf.write(disk_data) - mmc_dev = 8 - fname = os.path.join(ubman.config.source_dir, f'mmc{mmc_dev}.img') - utils.run_and_log(ubman, f'qemu-img create {fname} 20M') - utils.run_and_log(ubman, f'cgpt create {fname}') - - ptr = 40 - - # Number of sectors in 1MB - sect_size = 512 - sect_1mb = (1 << 20) // sect_size - +def setup_android_image(ubman): + mmc_dev = 7 required_parts = [ {'num': 1, 'label':'misc', 'size': '1M'}, {'num': 2, 'label':'boot_a', 'size': '4M'}, {'num': 3, 'label':'boot_b', 'size': '4M'}, + {'num': 4, 'label':'vendor_boot_a', 'size': '4M'}, + {'num': 5, 'label':'vendor_boot_b', 'size': '4M'}, ] + images = [ + (2, 'bootv4.img', test_abootimg.boot_img_hex), + (4, 'vendor_boot.img', test_abootimg.vboot_img_hex), + ] + create_gpt_image(ubman, mmc_dev, required_parts, images) - for part in required_parts: - size_str = part['size'] - if 'M' in size_str: - size = int(size_str[:-1]) * sect_1mb - else: - size = int(size_str) - utils.run_and_log( - ubman, - f"cgpt add -i {part['num']} -b {ptr} -s {size} -l {part['label']} -t basicdata {fname}") - ptr += size - - utils.run_and_log(ubman, f'cgpt boot -p {fname}') - out = utils.run_and_log(ubman, f'cgpt show -q {fname}') - - # Create a dict (indexed by partition number) containing the above info - for line in out.splitlines(): - start, size, num, name = line.split(maxsplit=3) - parts[int(num)] = Partition(int(start), int(size), name) - - with open(fname, 'rb') as inf: - disk_data = inf.read() - + mmc_dev = 8 + required_parts = [ + {'num': 1, 'label':'misc', 'size': '1M'}, + {'num': 2, 'label':'boot_a', 'size': '4M'}, + {'num': 3, 'label':'boot_b', 'size': '4M'}, + ] images = [ (2, 'boot.img', test_abootimg.img_hex), ] - for partnum, img_name, hex_data in images: - test_abootimg.AbootimgTestDiskImage(ubman, img_name, hex_data) - img_path = os.path.join(ubman.config.result_dir, img_name) - with open(img_path, 'rb') as inf: - data = inf.read() - start = parts[partnum].start * sect_size - disk_data = disk_data[:start] + data + disk_data[start + len(data):] - - with open(fname, 'wb') as outf: - outf.write(disk_data) + create_gpt_image(ubman, mmc_dev, required_parts, images) -- 2.56.0
