Hi Mattijs,

On Thu, Oct 15, 2026 at 3:55 PM Mattijs Korpershoek
<[email protected]> wrote:
>
> 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
>

Reviewed-by: Igor Opaniuk <[email protected]>

Reply via email to