[PATCH v2 0/8] test: Avoid needing sudo for image-creation

This series rebases and tidies up a series sent by Richard Weinberger to use unpriviliged code to build the test images.
Link: https://patchwork.ozlabs.org/project/uboot/list/?series=417786
Changes in v2: - Fix a few pylint errors - Split out image-size patch and default to 20MB - Attempt to reduce the diff, for easier review - Add new patch to drop exception handling - Add new patch to use the built mkimage - Separate out patch to drop support for fallback files - Add patch to remove prepared images
Richard Weinberger (3): test_fs: Allow running unprivileged test_fs: Rename mount dir to scratch test_ut: Allow running unprivileged
Simon Glass (5): test_ut: Add an image size to setup_image() test_ut: Drop exeception handling test_ut: Use the built mkimage test_ut: Drop support for fallback files bootstd: Remove prepared images
test/py/tests/bootstd/flash1.img.xz | Bin 4924 -> 0 bytes test/py/tests/bootstd/mmc1.img.xz | Bin 4480 -> 0 bytes test/py/tests/bootstd/mmc4.img.xz | Bin 7072 -> 0 bytes test/py/tests/fs_helper.py | 11 +- test/py/tests/test_fs/conftest.py | 225 +++++++------------------ test/py/tests/test_ut.py | 245 ++++++++++------------------ 6 files changed, 157 insertions(+), 324 deletions(-) delete mode 100644 test/py/tests/bootstd/flash1.img.xz delete mode 100644 test/py/tests/bootstd/mmc1.img.xz delete mode 100644 test/py/tests/bootstd/mmc4.img.xz

From: Richard Weinberger richard@nod.at
There is no need to mount the filesystem on the host side. All filesystem tools offer some way to fill the fs without mounting.
So, create the content on the host side, create and fill the fs without mounting. No more sudo or guestmount needed.
This new approach works because the tests don't care about user IDs and no device files are needed. If user IDs start to matter it's still possible to use wrapper tools like fakeroot in future while filling the fs.
Signed-off-by: Richard Weinberger richard@nod.at Signed-off-by: Simon Glass sjg@chromium.org Tested-by: Mattijs Korpershoek mkorpershoek@baylibre.com ---
Changes in v2: - Fix a few pylint errors
test/py/tests/fs_helper.py | 11 +- test/py/tests/test_fs/conftest.py | 175 ++++++------------------------ test/py/tests/test_ut.py | 4 +- 3 files changed, 47 insertions(+), 143 deletions(-)
diff --git a/test/py/tests/fs_helper.py b/test/py/tests/fs_helper.py index 380f4c4dca3..ccfc0201a49 100644 --- a/test/py/tests/fs_helper.py +++ b/test/py/tests/fs_helper.py @@ -9,7 +9,7 @@ import re import os from subprocess import call, check_call, check_output, CalledProcessError
-def mk_fs(config, fs_type, size, prefix, size_gran = 0x100000): +def mk_fs(config, fs_type, size, prefix, src_dir=None, size_gran = 0x100000): """Create a file system volume
Args: @@ -17,6 +17,7 @@ def mk_fs(config, fs_type, size, prefix, size_gran = 0x100000): fs_type (str): File system type, e.g. 'ext4' size (int): Size of file system in bytes prefix (str): Prefix string of volume's file name + src_dir (str): Root directory to use, or None for none size_gran (int): Size granularity of file system image in bytes
Raises: @@ -39,6 +40,12 @@ def mk_fs(config, fs_type, size, prefix, size_gran = 0x100000): else: fs_lnxtype = fs_type
+ if src_dir: + if fs_lnxtype == 'ext4': + mkfs_opt = mkfs_opt + ' -d ' + src_dir + elif fs_lnxtype != 'vfat': + raise ValueError(f'src_dir not implemented for fs {fs_lnxtype}') + count = (size + size_gran - 1) // size_gran
# Some distributions do not add /sbin to the default PATH, where mkfs lives @@ -55,6 +62,8 @@ def mk_fs(config, fs_type, size, prefix, size_gran = 0x100000): shell=True).decode() if 'metadata_csum' in sb_content: check_call(f'tune2fs -O ^metadata_csum {fs_img}', shell=True) + elif fs_lnxtype == 'vfat' and src_dir: + check_call(f'mcopy -i {fs_img} -vsmpQ {src_dir}/* ::/', shell=True) return fs_img except CalledProcessError: call(f'rm -f {fs_img}', shell=True) diff --git a/test/py/tests/test_fs/conftest.py b/test/py/tests/test_fs/conftest.py index fca54488374..59342a6e3dd 100644 --- a/test/py/tests/test_fs/conftest.py +++ b/test/py/tests/test_fs/conftest.py @@ -156,64 +156,6 @@ def tool_is_in_path(tool): return True return False
-fuse_mounted = False - -def mount_fs(fs_type, device, mount_point): - """Mount a volume. - - Args: - fs_type: File system type. - device: Volume's file name. - mount_point: Mount point. - - Return: - Nothing. - """ - global fuse_mounted - - try: - check_call('guestmount --pid-file guestmount.pid -a %s -m /dev/sda %s' - % (device, mount_point), shell=True) - fuse_mounted = True - return - except CalledProcessError: - fuse_mounted = False - - mount_opt = 'loop,rw' - if re.match('fat', fs_type): - mount_opt += ',umask=0000' - - check_call('sudo mount -o %s %s %s' - % (mount_opt, device, mount_point), shell=True) - - # may not be effective for some file systems - check_call('sudo chmod a+rw %s' % mount_point, shell=True) - -def umount_fs(mount_point): - """Unmount a volume. - - Args: - mount_point: Mount point. - - Return: - Nothing. - """ - if fuse_mounted: - call('sync') - call('guestunmount %s' % mount_point, shell=True) - - try: - with open("guestmount.pid", "r") as pidfile: - pid = int(pidfile.read()) - util.waitpid(pid, kill=True) - os.remove("guestmount.pid") - - except FileNotFoundError: - pass - - else: - call('sudo umount %s' % mount_point, shell=True) - # # Fixture for basic fs test # derived from test/fs/fs-test.sh @@ -241,14 +183,6 @@ def fs_obj_basic(request, u_boot_config): small_file = mount_dir + '/' + SMALL_FILE big_file = mount_dir + '/' + BIG_FILE
- try: - - # 3GiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0xc0000000, '3GB') - except CalledProcessError as err: - pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) - return - try: check_call('mkdir -p %s' % mount_dir, shell=True) except CalledProcessError as err: @@ -256,15 +190,6 @@ def fs_obj_basic(request, u_boot_config): call('rm -f %s' % fs_img, shell=True) return
- try: - # Mount the image so we can populate it. - mount_fs(fs_type, fs_img, mount_dir) - except CalledProcessError as err: - pytest.skip('Mounting to folder failed for filesystem: ' + fs_type + '. {}'.format(err)) - call('rmdir %s' % mount_dir, shell=True) - call('rm -f %s' % fs_img, shell=True) - return - try: # Create a subdirectory. check_call('mkdir %s/SUBDIR' % mount_dir, shell=True) @@ -326,15 +251,20 @@ def fs_obj_basic(request, u_boot_config): % big_file, shell=True).decode() md5val.append(out.split()[0])
+ try: + # 3GiB volume + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0xc0000000, '3GB', mount_dir) + except CalledProcessError as err: + pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) + return + except CalledProcessError as err: pytest.skip('Setup failed for filesystem: ' + fs_type + '. {}'.format(err)) - umount_fs(mount_dir) return else: - umount_fs(mount_dir) yield [fs_ubtype, fs_img, md5val] finally: - call('rmdir %s' % mount_dir, shell=True) + call('rm -rf %s' % mount_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -363,14 +293,6 @@ def fs_obj_ext(request, u_boot_config): min_file = mount_dir + '/' + MIN_FILE tmp_file = mount_dir + '/tmpfile'
- try: - - # 128MiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB') - except CalledProcessError as err: - pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) - return - try: check_call('mkdir -p %s' % mount_dir, shell=True) except CalledProcessError as err: @@ -378,15 +300,6 @@ def fs_obj_ext(request, u_boot_config): call('rm -f %s' % fs_img, shell=True) return
- try: - # Mount the image so we can populate it. - mount_fs(fs_type, fs_img, mount_dir) - except CalledProcessError as err: - pytest.skip('Mounting to folder failed for filesystem: ' + fs_type + '. {}'.format(err)) - call('rmdir %s' % mount_dir, shell=True) - call('rm -f %s' % fs_img, shell=True) - return - try: # Create a test directory check_call('mkdir %s/dir1' % mount_dir, shell=True) @@ -427,15 +340,21 @@ def fs_obj_ext(request, u_boot_config): md5val.append(out.split()[0])
check_call('rm %s' % tmp_file, shell=True) + + try: + # 128MiB volume + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', mount_dir) + except CalledProcessError as err: + pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) + return + except CalledProcessError: pytest.skip('Setup failed for filesystem: ' + fs_type) - umount_fs(mount_dir) return else: - umount_fs(mount_dir) yield [fs_ubtype, fs_img, md5val] finally: - call('rmdir %s' % mount_dir, shell=True) + call('rm -rf %s' % mount_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -461,7 +380,7 @@ def fs_obj_mkdir(request, u_boot_config):
try: # 128MiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB') + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', None) except: pytest.skip('Setup failed for filesystem: ' + fs_type) return @@ -492,14 +411,6 @@ def fs_obj_unlink(request, u_boot_config):
mount_dir = u_boot_config.persistent_data_dir + '/mnt'
- try: - - # 128MiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB') - except CalledProcessError as err: - pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) - return - try: check_call('mkdir -p %s' % mount_dir, shell=True) except CalledProcessError as err: @@ -507,15 +418,6 @@ def fs_obj_unlink(request, u_boot_config): call('rm -f %s' % fs_img, shell=True) return
- try: - # Mount the image so we can populate it. - mount_fs(fs_type, fs_img, mount_dir) - except CalledProcessError as err: - pytest.skip('Mounting to folder failed for filesystem: ' + fs_type + '. {}'.format(err)) - call('rmdir %s' % mount_dir, shell=True) - call('rm -f %s' % fs_img, shell=True) - return - try: # Test Case 1 & 3 check_call('mkdir %s/dir1' % mount_dir, shell=True) @@ -538,15 +440,20 @@ def fs_obj_unlink(request, u_boot_config): check_call('dd if=/dev/urandom of=%s/dir5/file1 bs=1K count=1' % mount_dir, shell=True)
+ try: + # 128MiB volume + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', mount_dir) + except CalledProcessError as err: + pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) + return + except CalledProcessError: pytest.skip('Setup failed for filesystem: ' + fs_type) - umount_fs(mount_dir) return else: - umount_fs(mount_dir) yield [fs_ubtype, fs_img] finally: - call('rmdir %s' % mount_dir, shell=True) + call('rm -rf %s' % mount_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -575,14 +482,6 @@ def fs_obj_symlink(request, u_boot_config): small_file = mount_dir + '/' + SMALL_FILE medium_file = mount_dir + '/' + MEDIUM_FILE
- try: - - # 1GiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x40000000, '1GB') - except CalledProcessError as err: - pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) - return - try: check_call('mkdir -p %s' % mount_dir, shell=True) except CalledProcessError as err: @@ -590,15 +489,6 @@ def fs_obj_symlink(request, u_boot_config): call('rm -f %s' % fs_img, shell=True) return
- try: - # Mount the image so we can populate it. - mount_fs(fs_type, fs_img, mount_dir) - except CalledProcessError as err: - pytest.skip('Mounting to folder failed for filesystem: ' + fs_type + '. {}'.format(err)) - call('rmdir %s' % mount_dir, shell=True) - call('rm -f %s' % fs_img, shell=True) - return - try: # Create a subdirectory. check_call('mkdir %s/SUBDIR' % mount_dir, shell=True) @@ -621,15 +511,20 @@ def fs_obj_symlink(request, u_boot_config): % medium_file, shell=True).decode() md5val.extend([out.split()[0]])
+ try: + # 1GiB volume + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x40000000, '1GB', mount_dir) + except CalledProcessError as err: + pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) + return + except CalledProcessError: pytest.skip('Setup failed for filesystem: ' + fs_type) - umount_fs(mount_dir) return else: - umount_fs(mount_dir) yield [fs_ubtype, fs_img, md5val] finally: - call('rmdir %s' % mount_dir, shell=True) + call('rm -rf %s' % mount_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -665,7 +560,7 @@ def fs_obj_fat(request, u_boot_config):
try: # the volume size depends on the filesystem - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, fs_size, f'{fs_size}', 1024) + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, fs_size, f'{fs_size}', None, 1024) except: pytest.skip('Setup failed for filesystem: ' + fs_type) return diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index 6d44191976b..70ac012b3ad 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -540,8 +540,8 @@ def test_ut_dm_init(u_boot_console): u_boot_utils.run_and_log( u_boot_console, f'sfdisk {fn}', stdin=b'type=83')
- fs_helper.mk_fs(u_boot_console.config, 'ext2', 0x200000, '2MB') - fs_helper.mk_fs(u_boot_console.config, 'fat32', 0x100000, '1MB') + fs_helper.mk_fs(u_boot_console.config, 'ext2', 0x200000, '2MB', None) + fs_helper.mk_fs(u_boot_console.config, 'fat32', 0x100000, '1MB', None)
mmc_dev = 6 fn = os.path.join(u_boot_console.config.source_dir, f'mmc{mmc_dev}.img')

From: Richard Weinberger richard@nod.at
Since no mounting happens anymore, rename the "mnt" directory to "scratch" and the related variables.
Signed-off-by: Richard Weinberger richard@nod.at Reviewed-by: Mattijs Korpershoek mkorpershoek@baylibre.com Signed-off-by: Simon Glass sjg@chromium.org ---
(no changes since v1)
test/py/tests/test_fs/conftest.py | 66 +++++++++++++++---------------- 1 file changed, 33 insertions(+), 33 deletions(-)
diff --git a/test/py/tests/test_fs/conftest.py b/test/py/tests/test_fs/conftest.py index 59342a6e3dd..af2adaf1645 100644 --- a/test/py/tests/test_fs/conftest.py +++ b/test/py/tests/test_fs/conftest.py @@ -178,13 +178,13 @@ def fs_obj_basic(request, u_boot_config): fs_ubtype = fstype_to_ubname(fs_type) check_ubconfig(u_boot_config, fs_ubtype)
- mount_dir = u_boot_config.persistent_data_dir + '/mnt' + scratch_dir = u_boot_config.persistent_data_dir + '/scratch'
- small_file = mount_dir + '/' + SMALL_FILE - big_file = mount_dir + '/' + BIG_FILE + small_file = scratch_dir + '/' + SMALL_FILE + big_file = scratch_dir + '/' + BIG_FILE
try: - check_call('mkdir -p %s' % mount_dir, shell=True) + check_call('mkdir -p %s' % scratch_dir, shell=True) except CalledProcessError as err: pytest.skip('Preparing mount folder failed for filesystem: ' + fs_type + '. {}'.format(err)) call('rm -f %s' % fs_img, shell=True) @@ -192,7 +192,7 @@ def fs_obj_basic(request, u_boot_config):
try: # Create a subdirectory. - check_call('mkdir %s/SUBDIR' % mount_dir, shell=True) + check_call('mkdir %s/SUBDIR' % scratch_dir, shell=True)
# Create big file in this image. # Note that we work only on the start 1MB, couple MBs in the 2GB range @@ -253,7 +253,7 @@ def fs_obj_basic(request, u_boot_config):
try: # 3GiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0xc0000000, '3GB', mount_dir) + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0xc0000000, '3GB', scratch_dir) except CalledProcessError as err: pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) return @@ -264,7 +264,7 @@ def fs_obj_basic(request, u_boot_config): else: yield [fs_ubtype, fs_img, md5val] finally: - call('rm -rf %s' % mount_dir, shell=True) + call('rm -rf %s' % scratch_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -288,13 +288,13 @@ def fs_obj_ext(request, u_boot_config): fs_ubtype = fstype_to_ubname(fs_type) check_ubconfig(u_boot_config, fs_ubtype)
- mount_dir = u_boot_config.persistent_data_dir + '/mnt' + scratch_dir = u_boot_config.persistent_data_dir + '/scratch'
- min_file = mount_dir + '/' + MIN_FILE - tmp_file = mount_dir + '/tmpfile' + min_file = scratch_dir + '/' + MIN_FILE + tmp_file = scratch_dir + '/tmpfile'
try: - check_call('mkdir -p %s' % mount_dir, shell=True) + check_call('mkdir -p %s' % scratch_dir, shell=True) except CalledProcessError as err: pytest.skip('Preparing mount folder failed for filesystem: ' + fs_type + '. {}'.format(err)) call('rm -f %s' % fs_img, shell=True) @@ -302,7 +302,7 @@ def fs_obj_ext(request, u_boot_config):
try: # Create a test directory - check_call('mkdir %s/dir1' % mount_dir, shell=True) + check_call('mkdir %s/dir1' % scratch_dir, shell=True)
# Create a small file and calculate md5 check_call('dd if=/dev/urandom of=%s bs=1K count=20' @@ -343,7 +343,7 @@ def fs_obj_ext(request, u_boot_config):
try: # 128MiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', mount_dir) + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', scratch_dir) except CalledProcessError as err: pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) return @@ -354,7 +354,7 @@ def fs_obj_ext(request, u_boot_config): else: yield [fs_ubtype, fs_img, md5val] finally: - call('rm -rf %s' % mount_dir, shell=True) + call('rm -rf %s' % scratch_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -409,10 +409,10 @@ def fs_obj_unlink(request, u_boot_config): fs_ubtype = fstype_to_ubname(fs_type) check_ubconfig(u_boot_config, fs_ubtype)
- mount_dir = u_boot_config.persistent_data_dir + '/mnt' + scratch_dir = u_boot_config.persistent_data_dir + '/scratch'
try: - check_call('mkdir -p %s' % mount_dir, shell=True) + check_call('mkdir -p %s' % scratch_dir, shell=True) except CalledProcessError as err: pytest.skip('Preparing mount folder failed for filesystem: ' + fs_type + '. {}'.format(err)) call('rm -f %s' % fs_img, shell=True) @@ -420,29 +420,29 @@ def fs_obj_unlink(request, u_boot_config):
try: # Test Case 1 & 3 - check_call('mkdir %s/dir1' % mount_dir, shell=True) + check_call('mkdir %s/dir1' % scratch_dir, shell=True) check_call('dd if=/dev/urandom of=%s/dir1/file1 bs=1K count=1' - % mount_dir, shell=True) + % scratch_dir, shell=True) check_call('dd if=/dev/urandom of=%s/dir1/file2 bs=1K count=1' - % mount_dir, shell=True) + % scratch_dir, shell=True)
# Test Case 2 - check_call('mkdir %s/dir2' % mount_dir, shell=True) + check_call('mkdir %s/dir2' % scratch_dir, shell=True) for i in range(0, 20): check_call('mkdir %s/dir2/0123456789abcdef%02x' - % (mount_dir, i), shell=True) + % (scratch_dir, i), shell=True)
# Test Case 4 - check_call('mkdir %s/dir4' % mount_dir, shell=True) + check_call('mkdir %s/dir4' % scratch_dir, shell=True)
# Test Case 5, 6 & 7 - check_call('mkdir %s/dir5' % mount_dir, shell=True) + check_call('mkdir %s/dir5' % scratch_dir, shell=True) check_call('dd if=/dev/urandom of=%s/dir5/file1 bs=1K count=1' - % mount_dir, shell=True) + % scratch_dir, shell=True)
try: # 128MiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', mount_dir) + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x8000000, '128MB', scratch_dir) except CalledProcessError as err: pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) return @@ -453,7 +453,7 @@ def fs_obj_unlink(request, u_boot_config): else: yield [fs_ubtype, fs_img] finally: - call('rm -rf %s' % mount_dir, shell=True) + call('rm -rf %s' % scratch_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
# @@ -477,13 +477,13 @@ def fs_obj_symlink(request, u_boot_config): fs_ubtype = fstype_to_ubname(fs_type) check_ubconfig(u_boot_config, fs_ubtype)
- mount_dir = u_boot_config.persistent_data_dir + '/mnt' + scratch_dir = u_boot_config.persistent_data_dir + '/scratch'
- small_file = mount_dir + '/' + SMALL_FILE - medium_file = mount_dir + '/' + MEDIUM_FILE + small_file = scratch_dir + '/' + SMALL_FILE + medium_file = scratch_dir + '/' + MEDIUM_FILE
try: - check_call('mkdir -p %s' % mount_dir, shell=True) + check_call('mkdir -p %s' % scratch_dir, shell=True) except CalledProcessError as err: pytest.skip('Preparing mount folder failed for filesystem: ' + fs_type + '. {}'.format(err)) call('rm -f %s' % fs_img, shell=True) @@ -491,7 +491,7 @@ def fs_obj_symlink(request, u_boot_config):
try: # Create a subdirectory. - check_call('mkdir %s/SUBDIR' % mount_dir, shell=True) + check_call('mkdir %s/SUBDIR' % scratch_dir, shell=True)
# Create a small file in this image. check_call('dd if=/dev/urandom of=%s bs=1M count=1' @@ -513,7 +513,7 @@ def fs_obj_symlink(request, u_boot_config):
try: # 1GiB volume - fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x40000000, '1GB', mount_dir) + fs_img = fs_helper.mk_fs(u_boot_config, fs_type, 0x40000000, '1GB', scratch_dir) except CalledProcessError as err: pytest.skip('Creating failed for filesystem: ' + fs_type + '. {}'.format(err)) return @@ -524,7 +524,7 @@ def fs_obj_symlink(request, u_boot_config): else: yield [fs_ubtype, fs_img, md5val] finally: - call('rm -rf %s' % mount_dir, shell=True) + call('rm -rf %s' % scratch_dir, shell=True) call('rm -f %s' % fs_img, shell=True)
#

Add a parameter to indicate the size of the image to build.
Signed-off-by: Simon Glass sjg@chromium.org Signed-off-by: Richard Weinberger richard@nod.at ---
Changes in v2: - Split out image-size patch and default to 20MB
test/py/tests/test_ut.py | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-)
diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index 70ac012b3ad..0b716f4029c 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -28,13 +28,15 @@ def mkdir_cond(dirname): if not os.path.exists(dirname): os.mkdir(dirname)
-def setup_image(cons, devnum, part_type, second_part=False, basename='mmc'): - """Create a 20MB disk image with a single partition +def setup_image(cons, devnum, part_type, img_size=20, second_part=False, + basename='mmc'): + """Create a disk image with a single partition
Args: cons (ConsoleBase): Console to use devnum (int): Device number to use, e.g. 1 part_type (int): Partition type, e.g. 0xc for FAT32 + img_size (int): Image size in MiB second_part (bool): True to contain a small second partition basename (str): Base name to use in the filename, e.g. 'mmc'
@@ -47,11 +49,11 @@ def setup_image(cons, devnum, part_type, second_part=False, basename='mmc'): mnt = os.path.join(cons.config.persistent_data_dir, 'mnt') mkdir_cond(mnt)
- spec = f'type={part_type:x}, size=18M, bootable' + spec = f'type={part_type:x}, size={img_size - 2}M, start=1M, bootable' if second_part: spec += '\ntype=c'
- u_boot_utils.run_and_log(cons, f'qemu-img create {fname} 20M') + u_boot_utils.run_and_log(cons, f'qemu-img create {fname} {img_size}M') u_boot_utils.run_and_log(cons, f'sudo sfdisk {fname}', stdin=spec.encode('utf-8')) return fname, mnt

----- Ursprüngliche Mail -----
Von: "Simon Glass" sjg@chromium.org An: "u-boot" u-boot@lists.denx.de CC: "Tom Rini" trini@konsulko.com, "richard" richard@nod.at, "Simon Glass" sjg@chromium.org, "Francis Laniel" francis.laniel@amarulasolutions.com, "Guillaume La Roque" glaroque@baylibre.com, "Mattijs Korpershoek" mkorpershoek@baylibre.com Gesendet: Donnerstag, 21. November 2024 23:32:09 Betreff: [PATCH v2 3/8] test_ut: Add an image size to setup_image()
Add a parameter to indicate the size of the image to build.
Signed-off-by: Simon Glass sjg@chromium.org Signed-off-by: Richard Weinberger richard@nod.at
This SoB chain is odd. I think "Co-developed-by: Richard Weinberger richard@nod.at" is more correct. Same for 7/8.
Thanks, //richard

From: Richard Weinberger richard@nod.at
Like for test_fs, no need to mess with loop mounts.
Signed-off-by: Richard Weinberger richard@nod.at Tweaks to reduce diff (keep mnt variable): Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Attempt to reduce the diff, for easier review
test/py/tests/test_ut.py | 86 ++++++++++++---------------------------- 1 file changed, 26 insertions(+), 60 deletions(-)
diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index 0b716f4029c..d449d0baf5e 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -8,7 +8,6 @@ test one at a time, as well setting up some files needed by the tests. # Copyright (c) 2016, NVIDIA CORPORATION. All rights reserved. """ import collections -import getpass import gzip import os import os.path @@ -43,44 +42,21 @@ def setup_image(cons, devnum, part_type, img_size=20, second_part=False, Returns: tuple: str: Filename of MMC image - str: Directory name of 'mnt' directory + str: Directory name of scratch directory """ fname = os.path.join(cons.config.source_dir, f'{basename}{devnum}.img') - mnt = os.path.join(cons.config.persistent_data_dir, 'mnt') + mnt = os.path.join(cons.config.persistent_data_dir, 'scratch') mkdir_cond(mnt)
spec = f'type={part_type:x}, size={img_size - 2}M, start=1M, bootable' if second_part: spec += '\ntype=c'
- u_boot_utils.run_and_log(cons, f'qemu-img create {fname} {img_size}M') - u_boot_utils.run_and_log(cons, f'sudo sfdisk {fname}', + u_boot_utils.run_and_log(cons, f'qemu-img create {fname} 20M') + u_boot_utils.run_and_log(cons, f'sfdisk {fname}', stdin=spec.encode('utf-8')) return fname, mnt
-def mount_image(cons, fname, mnt, fstype): - """Create a filesystem and mount it on partition 1 - - Args: - cons (ConsoleBase): Console to use - fname (str): Filename of MMC image - mnt (str): Directory name of 'mnt' directory - fstype (str): Filesystem type ('vfat' or 'ext4') - - Returns: - str: Name of loop device used - """ - out = u_boot_utils.run_and_log(cons, f'sudo losetup --show -f -P {fname}') - loop = out.strip() - part = f'{loop}p1' - u_boot_utils.run_and_log(cons, f'sudo mkfs.{fstype} {part}') - opts = '' - if fstype == 'vfat': - opts += f' -o uid={os.getuid()},gid={os.getgid()}' - u_boot_utils.run_and_log(cons, f'sudo mount -o loop {part} {mnt}{opts}') - u_boot_utils.run_and_log(cons, f'sudo chown {getpass.getuser()} {mnt}') - return loop - def copy_prepared_image(cons, devnum, fname, basename='mmc'): """Use a prepared image since we cannot create one
@@ -102,13 +78,8 @@ def setup_bootmenu_image(cons): mmc_dev = 4 fname, mnt = setup_image(cons, mmc_dev, 0x83)
- loop = None - mounted = False complete = False try: - loop = mount_image(cons, fname, mnt, 'ext4') - mounted = True - script = '''# DO NOT EDIT THIS FILE # # Please edit /boot/armbianEnv.txt to set supported parameters @@ -212,15 +183,16 @@ booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} cons, f'echo here {kernel} {symlink}') os.symlink(kernel, symlink)
+ fsfile = 'ext18M.img' + u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') + u_boot_utils.run_and_log(cons, f'mkfs.ext4 {fsfile} -d {mnt}') + u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') complete = True - except ValueError as exc: print(f'Falled to create image, failing back to prepared copy: {exc}') finally: - if mounted: - u_boot_utils.run_and_log(cons, f'sudo umount --lazy {mnt}') - if loop: - u_boot_utils.run_and_log(cons, f'sudo losetup -d {loop}') + u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') + u_boot_utils.run_and_log(cons, f'rm -f {fsfile}')
if not complete: copy_prepared_image(cons, mmc_dev, fname) @@ -230,13 +202,8 @@ def setup_bootflow_image(cons): mmc_dev = 1 fname, mnt = setup_image(cons, mmc_dev, 0xc, second_part=True)
- loop = None - mounted = False complete = False try: - loop = mount_image(cons, fname, mnt, 'vfat') - mounted = True - vmlinux = 'vmlinuz-5.3.7-301.fc31.armv7hl' initrd = 'initramfs-5.3.7-301.fc31.armv7hl.img' dtbdir = 'dtb-5.3.7-301.fc31.armv7hl' @@ -274,19 +241,21 @@ label Fedora-Workstation-armhfp-31-1.9 (5.3.7-301.fc31.armv7hl) dtb_file = os.path.join(mnt, f'{dtbdir}/sandbox.dtb') u_boot_utils.run_and_log( cons, f'dtc -o {dtb_file}', stdin=b'/dts-v1/; / {};') + + fsfile = 'vfat18M.img' + u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') + u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') + u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -i {fsfile} {mnt}/* ::/']) + u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') complete = True except ValueError as exc: print(f'Falled to create image, failing back to prepared copy: {exc}') finally: - if mounted: - u_boot_utils.run_and_log(cons, f'sudo umount --lazy {mnt}') - if loop: - u_boot_utils.run_and_log(cons, f'sudo losetup -d {loop}') - + u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') + u_boot_utils.run_and_log(cons, f'rm -f {fsfile}') if not complete: copy_prepared_image(cons, mmc_dev, fname)
- def setup_cros_image(cons): """Create a 20MB disk image with ChromiumOS partitions""" Partition = collections.namedtuple('part', 'start,size,name') @@ -336,8 +305,6 @@ def setup_cros_image(cons): mmc_dev = 5 fname = os.path.join(cons.config.source_dir, f'mmc{mmc_dev}.img') u_boot_utils.run_and_log(cons, f'qemu-img create {fname} 20M') - #mnt = os.path.join(cons.config.persistent_data_dir, 'mnt') - #mkdir_cond(mnt) u_boot_utils.run_and_log(cons, f'cgpt create {fname}')
uuid_state = 'ebd0a0a2-b9e5-4433-87c0-68b6b72699c7' @@ -559,31 +526,30 @@ def setup_efi_image(cons): fname, mnt = setup_image(cons, devnum, 0xc, second_part=True, basename=basename)
- loop = None - mounted = False complete = False try: - loop = mount_image(cons, fname, mnt, 'ext4') - mounted = True efi_dir = os.path.join(mnt, 'EFI') mkdir_cond(efi_dir) bootdir = os.path.join(efi_dir, 'BOOT') mkdir_cond(bootdir) efi_src = os.path.join(cons.config.build_dir, - f'lib/efi_loader/testapp.efi') + 'lib/efi_loader/testapp.efi') efi_dst = os.path.join(bootdir, 'BOOTSBOX.EFI') with open(efi_src, 'rb') as inf: with open(efi_dst, 'wb') as outf: outf.write(inf.read()) + fsfile = 'vfat18M.img' + u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') + u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') + u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -vs -i {fsfile} {mnt}/* ::/']) + u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') complete = True except ValueError as exc: print(f'Falled to create image, failing back to prepared copy: {exc}')
finally: - if mounted: - u_boot_utils.run_and_log(cons, 'sudo umount --lazy %s' % mnt) - if loop: - u_boot_utils.run_and_log(cons, 'sudo losetup -d %s' % loop) + u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') + u_boot_utils.run_and_log(cons, f'rm -f {fsfile}')
if not complete: copy_prepared_image(cons, devnum, fname, basename)

We don't need the fallback anymore. As a first step to removing it, drop the try...except clauses and unindent the code.
This produces a large diff but there are no other code changes.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Add new patch to drop exception handling
test/py/tests/test_ut.py | 175 ++++++++++++++++++--------------------- 1 file changed, 81 insertions(+), 94 deletions(-)
diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index d449d0baf5e..82cedbef039 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -79,8 +79,7 @@ def setup_bootmenu_image(cons): fname, mnt = setup_image(cons, mmc_dev, 0x83)
complete = False - try: - script = '''# DO NOT EDIT THIS FILE + script = '''# DO NOT EDIT THIS FILE # # Please edit /boot/armbianEnv.txt to set supported parameters # @@ -154,45 +153,42 @@ booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} # Recompile with: # mkimage -C none -A arm -T script -d /boot/boot.cmd /boot/boot.scr ''' - bootdir = os.path.join(mnt, 'boot') - mkdir_cond(bootdir) - cmd_fname = os.path.join(bootdir, 'boot.cmd') - scr_fname = os.path.join(bootdir, 'boot.scr') - with open(cmd_fname, 'w', encoding='ascii') as outf: - print(script, file=outf) - - infname = os.path.join(cons.config.source_dir, - 'test/py/tests/bootstd/armbian.bmp.xz') - bmp_file = os.path.join(bootdir, 'boot.bmp') - u_boot_utils.run_and_log( - cons, - ['sh', '-c', f'xz -dc {infname} >{bmp_file}']) + bootdir = os.path.join(mnt, 'boot') + mkdir_cond(bootdir) + cmd_fname = os.path.join(bootdir, 'boot.cmd') + scr_fname = os.path.join(bootdir, 'boot.scr') + with open(cmd_fname, 'w', encoding='ascii') as outf: + print(script, file=outf)
- u_boot_utils.run_and_log( - cons, f'mkimage -C none -A arm -T script -d {cmd_fname} {scr_fname}') + infname = os.path.join(cons.config.source_dir, + 'test/py/tests/bootstd/armbian.bmp.xz') + bmp_file = os.path.join(bootdir, 'boot.bmp') + u_boot_utils.run_and_log( + cons, + ['sh', '-c', f'xz -dc {infname} >{bmp_file}'])
- kernel = 'vmlinuz-5.15.63-rockchip64' - target = os.path.join(bootdir, kernel) - with open(target, 'wb') as outf: - print('kernel', outf) + u_boot_utils.run_and_log( + cons, f'mkimage -C none -A arm -T script -d {cmd_fname} {scr_fname}')
- symlink = os.path.join(bootdir, 'Image') - if os.path.exists(symlink): - os.remove(symlink) - u_boot_utils.run_and_log( - cons, f'echo here {kernel} {symlink}') - os.symlink(kernel, symlink) - - fsfile = 'ext18M.img' - u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') - u_boot_utils.run_and_log(cons, f'mkfs.ext4 {fsfile} -d {mnt}') - u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') - complete = True - except ValueError as exc: - print(f'Falled to create image, failing back to prepared copy: {exc}') - finally: - u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') - u_boot_utils.run_and_log(cons, f'rm -f {fsfile}') + kernel = 'vmlinuz-5.15.63-rockchip64' + target = os.path.join(bootdir, kernel) + with open(target, 'wb') as outf: + print('kernel', outf) + + symlink = os.path.join(bootdir, 'Image') + if os.path.exists(symlink): + os.remove(symlink) + u_boot_utils.run_and_log( + cons, f'echo here {kernel} {symlink}') + os.symlink(kernel, symlink) + + fsfile = 'ext18M.img' + u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') + u_boot_utils.run_and_log(cons, f'mkfs.ext4 {fsfile} -d {mnt}') + u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') + complete = True + u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') + u_boot_utils.run_and_log(cons, f'rm -f {fsfile}')
if not complete: copy_prepared_image(cons, mmc_dev, fname) @@ -203,11 +199,10 @@ def setup_bootflow_image(cons): fname, mnt = setup_image(cons, mmc_dev, 0xc, second_part=True)
complete = False - try: - vmlinux = 'vmlinuz-5.3.7-301.fc31.armv7hl' - initrd = 'initramfs-5.3.7-301.fc31.armv7hl.img' - dtbdir = 'dtb-5.3.7-301.fc31.armv7hl' - script = '''# extlinux.conf generated by appliance-creator + vmlinux = 'vmlinuz-5.3.7-301.fc31.armv7hl' + initrd = 'initramfs-5.3.7-301.fc31.armv7hl.img' + dtbdir = 'dtb-5.3.7-301.fc31.armv7hl' + script = '''# extlinux.conf generated by appliance-creator ui menu.c32 menu autoboot Welcome to Fedora-Workstation-armhfp-31-1.9. Automatic boot in # second{,s}. Press a key for options. menu title Fedora-Workstation-armhfp-31-1.9 Boot Options. @@ -220,39 +215,36 @@ label Fedora-Workstation-armhfp-31-1.9 (5.3.7-301.fc31.armv7hl) append ro root=UUID=9732b35b-4cd5-458b-9b91-80f7047e0b8a rhgb quiet LANG=en_US.UTF-8 cma=192MB cma=256MB fdtdir /%s/ initrd /%s''' % (vmlinux, dtbdir, initrd) - ext = os.path.join(mnt, 'extlinux') - mkdir_cond(ext) + ext = os.path.join(mnt, 'extlinux') + mkdir_cond(ext)
- conf = os.path.join(ext, 'extlinux.conf') - with open(conf, 'w', encoding='ascii') as fd: - print(script, file=fd) + conf = os.path.join(ext, 'extlinux.conf') + with open(conf, 'w', encoding='ascii') as fd: + print(script, file=fd)
- inf = os.path.join(cons.config.persistent_data_dir, 'inf') - with open(inf, 'wb') as fd: - fd.write(gzip.compress(b'vmlinux')) - u_boot_utils.run_and_log( - cons, f'mkimage -f auto -d {inf} {os.path.join(mnt, vmlinux)}') + inf = os.path.join(cons.config.persistent_data_dir, 'inf') + with open(inf, 'wb') as fd: + fd.write(gzip.compress(b'vmlinux')) + u_boot_utils.run_and_log( + cons, f'mkimage -f auto -d {inf} {os.path.join(mnt, vmlinux)}')
- with open(os.path.join(mnt, initrd), 'w', encoding='ascii') as fd: - print('initrd', file=fd) + with open(os.path.join(mnt, initrd), 'w', encoding='ascii') as fd: + print('initrd', file=fd)
- mkdir_cond(os.path.join(mnt, dtbdir)) + mkdir_cond(os.path.join(mnt, dtbdir))
- dtb_file = os.path.join(mnt, f'{dtbdir}/sandbox.dtb') - u_boot_utils.run_and_log( - cons, f'dtc -o {dtb_file}', stdin=b'/dts-v1/; / {};') - - fsfile = 'vfat18M.img' - u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') - u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') - u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -i {fsfile} {mnt}/* ::/']) - u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') - complete = True - except ValueError as exc: - print(f'Falled to create image, failing back to prepared copy: {exc}') - finally: - u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') - u_boot_utils.run_and_log(cons, f'rm -f {fsfile}') + dtb_file = os.path.join(mnt, f'{dtbdir}/sandbox.dtb') + u_boot_utils.run_and_log( + cons, f'dtc -o {dtb_file}', stdin=b'/dts-v1/; / {};') + + fsfile = 'vfat18M.img' + u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') + u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') + u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -i {fsfile} {mnt}/* ::/']) + u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') + complete = True + u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') + u_boot_utils.run_and_log(cons, f'rm -f {fsfile}') if not complete: copy_prepared_image(cons, mmc_dev, fname)
@@ -527,29 +519,24 @@ def setup_efi_image(cons): basename=basename)
complete = False - try: - efi_dir = os.path.join(mnt, 'EFI') - mkdir_cond(efi_dir) - bootdir = os.path.join(efi_dir, 'BOOT') - mkdir_cond(bootdir) - efi_src = os.path.join(cons.config.build_dir, - 'lib/efi_loader/testapp.efi') - efi_dst = os.path.join(bootdir, 'BOOTSBOX.EFI') - with open(efi_src, 'rb') as inf: - with open(efi_dst, 'wb') as outf: - outf.write(inf.read()) - fsfile = 'vfat18M.img' - u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') - u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') - u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -vs -i {fsfile} {mnt}/* ::/']) - u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') - complete = True - except ValueError as exc: - print(f'Falled to create image, failing back to prepared copy: {exc}') - - finally: - u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') - u_boot_utils.run_and_log(cons, f'rm -f {fsfile}') + efi_dir = os.path.join(mnt, 'EFI') + mkdir_cond(efi_dir) + bootdir = os.path.join(efi_dir, 'BOOT') + mkdir_cond(bootdir) + efi_src = os.path.join(cons.config.build_dir, + 'lib/efi_loader/testapp.efi') + efi_dst = os.path.join(bootdir, 'BOOTSBOX.EFI') + with open(efi_src, 'rb') as inf: + with open(efi_dst, 'wb') as outf: + outf.write(inf.read()) + fsfile = 'vfat18M.img' + u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') + u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') + u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -vs -i {fsfile} {mnt}/* ::/']) + u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') + complete = True + u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') + u_boot_utils.run_and_log(cons, f'rm -f {fsfile}')
if not complete: copy_prepared_image(cons, devnum, fname, basename)

The mkimage tool is not present in the docker image. Use the one in the build directory.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Add new patch to use the built mkimage
test/py/tests/test_ut.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index 82cedbef039..6c3b360d5fd 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -167,8 +167,9 @@ booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} cons, ['sh', '-c', f'xz -dc {infname} >{bmp_file}'])
+ mkimage = cons.config.build_dir + '/tools/mkimage' u_boot_utils.run_and_log( - cons, f'mkimage -C none -A arm -T script -d {cmd_fname} {scr_fname}') + cons, f'{mkimage} -C none -A arm -T script -d {cmd_fname} {scr_fname}')
kernel = 'vmlinuz-5.15.63-rockchip64' target = os.path.join(bootdir, kernel) @@ -225,8 +226,9 @@ label Fedora-Workstation-armhfp-31-1.9 (5.3.7-301.fc31.armv7hl) inf = os.path.join(cons.config.persistent_data_dir, 'inf') with open(inf, 'wb') as fd: fd.write(gzip.compress(b'vmlinux')) + mkimage = cons.config.build_dir + '/tools/mkimage' u_boot_utils.run_and_log( - cons, f'mkimage -f auto -d {inf} {os.path.join(mnt, vmlinux)}') + cons, f'{mkimage} -f auto -d {inf} {os.path.join(mnt, vmlinux)}')
with open(os.path.join(mnt, initrd), 'w', encoding='ascii') as fd: print('initrd', file=fd)

We don't need the fallback anymore. Remove the code which uses these files.
Signed-off-by: Simon Glass sjg@chromium.org Signed-off-by: Richard Weinberger richard@nod.at ---
Changes in v2: - Separate out patch to drop support for fallback files
test/py/tests/test_ut.py | 28 ---------------------------- 1 file changed, 28 deletions(-)
diff --git a/test/py/tests/test_ut.py b/test/py/tests/test_ut.py index 6c3b360d5fd..9b6b6b20c85 100644 --- a/test/py/tests/test_ut.py +++ b/test/py/tests/test_ut.py @@ -57,19 +57,6 @@ def setup_image(cons, devnum, part_type, img_size=20, second_part=False, stdin=spec.encode('utf-8')) return fname, mnt
-def copy_prepared_image(cons, devnum, fname, basename='mmc'): - """Use a prepared image since we cannot create one - - Args: - cons (ConsoleBase): Console touse - devnum (int): device number - fname (str): Filename of MMC image - basename (str): Base name to use in the filename, e.g. 'mmc' - """ - infname = os.path.join(cons.config.source_dir, - f'test/py/tests/bootstd/{basename}{devnum}.img.xz') - u_boot_utils.run_and_log(cons, ['sh', '-c', f'xz -dc {infname} >{fname}']) - def setup_bootmenu_image(cons): """Create a 20MB disk image with a single ext4 partition
@@ -78,7 +65,6 @@ def setup_bootmenu_image(cons): mmc_dev = 4 fname, mnt = setup_image(cons, mmc_dev, 0x83)
- complete = False script = '''# DO NOT EDIT THIS FILE # # Please edit /boot/armbianEnv.txt to set supported parameters @@ -187,19 +173,14 @@ booti ${kernel_addr_r} ${ramdisk_addr_r} ${fdt_addr_r} u_boot_utils.run_and_log(cons, f'fallocate -l 18M {fsfile}') u_boot_utils.run_and_log(cons, f'mkfs.ext4 {fsfile} -d {mnt}') u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') - complete = True u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') u_boot_utils.run_and_log(cons, f'rm -f {fsfile}')
- if not complete: - copy_prepared_image(cons, mmc_dev, fname) - def setup_bootflow_image(cons): """Create a 20MB disk image with a single FAT partition""" mmc_dev = 1 fname, mnt = setup_image(cons, mmc_dev, 0xc, second_part=True)
- complete = False vmlinux = 'vmlinuz-5.3.7-301.fc31.armv7hl' initrd = 'initramfs-5.3.7-301.fc31.armv7hl.img' dtbdir = 'dtb-5.3.7-301.fc31.armv7hl' @@ -244,11 +225,8 @@ label Fedora-Workstation-armhfp-31-1.9 (5.3.7-301.fc31.armv7hl) u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -i {fsfile} {mnt}/* ::/']) u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') - complete = True u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') u_boot_utils.run_and_log(cons, f'rm -f {fsfile}') - if not complete: - copy_prepared_image(cons, mmc_dev, fname)
def setup_cros_image(cons): """Create a 20MB disk image with ChromiumOS partitions""" @@ -520,7 +498,6 @@ def setup_efi_image(cons): fname, mnt = setup_image(cons, devnum, 0xc, second_part=True, basename=basename)
- complete = False efi_dir = os.path.join(mnt, 'EFI') mkdir_cond(efi_dir) bootdir = os.path.join(efi_dir, 'BOOT') @@ -536,14 +513,9 @@ def setup_efi_image(cons): u_boot_utils.run_and_log(cons, f'mkfs.vfat {fsfile}') u_boot_utils.run_and_log(cons, ['sh', '-c', f'mcopy -vs -i {fsfile} {mnt}/* ::/']) u_boot_utils.run_and_log(cons, f'dd if={fsfile} of={fname} bs=1M seek=1') - complete = True u_boot_utils.run_and_log(cons, f'rm -rf {mnt}') u_boot_utils.run_and_log(cons, f'rm -f {fsfile}')
- if not complete: - copy_prepared_image(cons, devnum, fname, basename) - - @pytest.mark.buildconfigspec('cmd_bootflow') @pytest.mark.buildconfigspec('sandbox') def test_ut_dm_init_bootstd(u_boot_console):

These are no-longer used. Drop them.
Signed-off-by: Simon Glass sjg@chromium.org ---
Changes in v2: - Add patch to remove prepared images
test/py/tests/bootstd/flash1.img.xz | Bin 4924 -> 0 bytes test/py/tests/bootstd/mmc1.img.xz | Bin 4480 -> 0 bytes test/py/tests/bootstd/mmc4.img.xz | Bin 7072 -> 0 bytes 3 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 test/py/tests/bootstd/flash1.img.xz delete mode 100644 test/py/tests/bootstd/mmc1.img.xz delete mode 100644 test/py/tests/bootstd/mmc4.img.xz
diff --git a/test/py/tests/bootstd/flash1.img.xz b/test/py/tests/bootstd/flash1.img.xz deleted file mode 100644 index 29b78c62a9bf264fa8b795b82b432bf3ab4e2765..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001
literal 4924 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 YhlPdFIp0xdukLa_CjZAFrJ4EP0QdZp5dZ)H
diff --git a/test/py/tests/bootstd/mmc1.img.xz b/test/py/tests/bootstd/mmc1.img.xz deleted file mode 100644 index cebf7b9c53b3ed2370dbc65f0d26dd9bf096fab8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001
literal 4480 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 LKYtbgI|lnVW!bv$
diff --git a/test/py/tests/bootstd/mmc4.img.xz b/test/py/tests/bootstd/mmc4.img.xz deleted file mode 100644 index f4db011969fa8bea352ee2b8318dfdd72ccf72d8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001
literal 7072 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

----- Ursprüngliche Mail -----
Von: "Simon Glass" sjg@chromium.org
This series rebases and tidies up a series sent by Richard Weinberger to use unpriviliged code to build the test images.
Link: https://patchwork.ozlabs.org/project/uboot/list/?series=417786
Changes in v2:
- Fix a few pylint errors
- Split out image-size patch and default to 20MB
- Attempt to reduce the diff, for easier review
- Add new patch to drop exception handling
- Add new patch to use the built mkimage
- Separate out patch to drop support for fallback files
- Add patch to remove prepared images
Thanks a lot for finishing this!
Thanks, //richard

On Thu, 21 Nov 2024 15:32:06 -0700, Simon Glass wrote:
This series rebases and tidies up a series sent by Richard Weinberger to use unpriviliged code to build the test images.
Link: https://patchwork.ozlabs.org/project/uboot/list/?series=417786
Changes in v2:
- Fix a few pylint errors
- Split out image-size patch and default to 20MB
- Attempt to reduce the diff, for easier review
- Add new patch to drop exception handling
- Add new patch to use the built mkimage
- Separate out patch to drop support for fallback files
- Add patch to remove prepared images
[...]
Applied to u-boot/next, thanks!
participants (3)
-
Richard Weinberger
-
Simon Glass
-
Tom Rini