summaryrefslogtreecommitdiff
path: root/test/py
diff options
context:
space:
mode:
Diffstat (limited to 'test/py')
-rw-r--r--test/py/requirements.txt28
-rw-r--r--test/py/tests/test_fs/conftest.py121
-rw-r--r--test/py/tests/test_fs/fstest_helpers.py2
-rw-r--r--test/py/tests/test_fs/test_rename.py372
-rw-r--r--test/py/tests/test_spi.py44
-rw-r--r--test/py/tests/test_suite.py34
-rw-r--r--test/py/tests/test_ums.py40
-rw-r--r--test/py/tests/test_usb.py2
8 files changed, 564 insertions, 79 deletions
diff --git a/test/py/requirements.txt b/test/py/requirements.txt
index 75760f96e56..acfe17dce9f 100644
--- a/test/py/requirements.txt
+++ b/test/py/requirements.txt
@@ -1,30 +1,4 @@
-atomicwrites==1.4.1
-attrs==19.3.0
-concurrencytest==0.1.2
-coverage==6.2
-extras==1.0.0
filelock==3.0.12
-fixtures==3.0.0
-importlib-metadata==0.23
-linecache2==1.0.0
-more-itertools==7.2.0
-packaging==24.1
-pbr==5.4.3
-pluggy==0.13.0
-py==1.11.0
-pycryptodomex==3.19.1
-pyelftools==0.27
-pygit2==1.13.3
-pyparsing==3.0.7
+pycryptodomex==3.21.0
pytest==6.2.5
pytest-xdist==2.5.0
-python-mimeparse==1.6.0
-python-subunit==1.3.0
-requests==2.32.3
-setuptools==70.3.0
-six==1.16.0
-testtools==2.3.0
-traceback2==1.4.0
-unittest2==1.1.0
-wcwidth==0.1.7
-zipp==3.19.2
diff --git a/test/py/tests/test_fs/conftest.py b/test/py/tests/test_fs/conftest.py
index af2adaf1645..7bfcf41ed6f 100644
--- a/test/py/tests/test_fs/conftest.py
+++ b/test/py/tests/test_fs/conftest.py
@@ -18,6 +18,7 @@ supported_fs_fat = ['fat12', 'fat16']
supported_fs_mkdir = ['fat12', 'fat16', 'fat32']
supported_fs_unlink = ['fat12', 'fat16', 'fat32']
supported_fs_symlink = ['ext4']
+supported_fs_rename = ['fat12', 'fat16', 'fat32']
#
# Filesystem test specific setup
@@ -55,6 +56,7 @@ def pytest_configure(config):
global supported_fs_mkdir
global supported_fs_unlink
global supported_fs_symlink
+ global supported_fs_rename
def intersect(listA, listB):
return [x for x in listA if x in listB]
@@ -68,6 +70,7 @@ def pytest_configure(config):
supported_fs_mkdir = intersect(supported_fs, supported_fs_mkdir)
supported_fs_unlink = intersect(supported_fs, supported_fs_unlink)
supported_fs_symlink = intersect(supported_fs, supported_fs_symlink)
+ supported_fs_rename = intersect(supported_fs, supported_fs_rename)
def pytest_generate_tests(metafunc):
"""Parametrize fixtures, fs_obj_xxx
@@ -99,6 +102,9 @@ def pytest_generate_tests(metafunc):
if 'fs_obj_symlink' in metafunc.fixturenames:
metafunc.parametrize('fs_obj_symlink', supported_fs_symlink,
indirect=True, scope='module')
+ if 'fs_obj_rename' in metafunc.fixturenames:
+ metafunc.parametrize('fs_obj_rename', supported_fs_rename,
+ indirect=True, scope='module')
#
# Helper functions
@@ -528,6 +534,121 @@ def fs_obj_symlink(request, u_boot_config):
call('rm -f %s' % fs_img, shell=True)
#
+# Fixture for rename test
+#
+@pytest.fixture()
+def fs_obj_rename(request, u_boot_config):
+ """Set up a file system to be used in rename tests.
+
+ Args:
+ request: Pytest request object.
+ u_boot_config: U-Boot configuration.
+
+ Return:
+ A fixture for rename tests, i.e. a triplet of file system type,
+ volume file name, and dictionary of test identifier and md5val.
+ """
+ def new_rand_file(path):
+ check_call('dd if=/dev/urandom of=%s bs=1K count=1' % path, shell=True)
+
+ def file_hash(path):
+ out = check_output(
+ 'dd if=%s bs=1K skip=0 count=1 2> /dev/null | md5sum' % path,
+ shell=True
+ )
+ return out.decode().split()[0]
+
+ fs_type = request.param
+ fs_img = ''
+
+ fs_ubtype = fstype_to_ubname(fs_type)
+ check_ubconfig(u_boot_config, fs_ubtype)
+
+ mount_dir = u_boot_config.persistent_data_dir + '/scratch'
+
+ try:
+ check_call('mkdir -p %s' % mount_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)
+ return
+
+ try:
+ md5val = {}
+ # Test Case 1
+ check_call('mkdir %s/test1' % mount_dir, shell=True)
+ new_rand_file('%s/test1/file1' % mount_dir)
+ md5val['test1'] = file_hash('%s/test1/file1' % mount_dir)
+
+ # Test Case 2
+ check_call('mkdir %s/test2' % mount_dir, shell=True)
+ new_rand_file('%s/test2/file1' % mount_dir)
+ new_rand_file('%s/test2/file_exist' % mount_dir)
+ md5val['test2'] = file_hash('%s/test2/file1' % mount_dir)
+
+ # Test Case 3
+ check_call('mkdir -p %s/test3/dir1' % mount_dir, shell=True)
+ new_rand_file('%s/test3/dir1/file1' % mount_dir)
+ md5val['test3'] = file_hash('%s/test3/dir1/file1' % mount_dir)
+
+ # Test Case 4
+ check_call('mkdir -p %s/test4/dir1' % mount_dir, shell=True)
+ check_call('mkdir -p %s/test4/dir2/dir1' % mount_dir, shell=True)
+ new_rand_file('%s/test4/dir1/file1' % mount_dir)
+ md5val['test4'] = file_hash('%s/test4/dir1/file1' % mount_dir)
+
+ # Test Case 5
+ check_call('mkdir -p %s/test5/dir1' % mount_dir, shell=True)
+ new_rand_file('%s/test5/file2' % mount_dir)
+ md5val['test5'] = file_hash('%s/test5/file2' % mount_dir)
+
+ # Test Case 6
+ check_call('mkdir -p %s/test6/dir2/existing' % mount_dir, shell=True)
+ new_rand_file('%s/test6/existing' % mount_dir)
+ md5val['test6'] = file_hash('%s/test6/existing' % mount_dir)
+
+ # Test Case 7
+ check_call('mkdir -p %s/test7/dir1' % mount_dir, shell=True)
+ check_call('mkdir -p %s/test7/dir2/dir1' % mount_dir, shell=True)
+ new_rand_file('%s/test7/dir2/dir1/file1' % mount_dir)
+ md5val['test7'] = file_hash('%s/test7/dir2/dir1/file1' % mount_dir)
+
+ # Test Case 8
+ check_call('mkdir -p %s/test8/dir1' % mount_dir, shell=True)
+ new_rand_file('%s/test8/dir1/file1' % mount_dir)
+ md5val['test8'] = file_hash('%s/test8/dir1/file1' % mount_dir)
+
+ # Test Case 9
+ check_call('mkdir -p %s/test9/dir1/nested/inner' % mount_dir, shell=True)
+ new_rand_file('%s/test9/dir1/nested/inner/file1' % mount_dir)
+
+ # Test Case 10
+ check_call('mkdir -p %s/test10' % mount_dir, shell=True)
+ new_rand_file('%s/test10/file1' % mount_dir)
+ md5val['test10'] = file_hash('%s/test10/file1' % mount_dir)
+
+ # Test Case 11
+ check_call('mkdir -p %s/test11/dir1' % mount_dir, shell=True)
+ new_rand_file('%s/test11/dir1/file1' % mount_dir)
+ md5val['test11'] = file_hash('%s/test11/dir1/file1' % mount_dir)
+
+ 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)
+ return
+ else:
+ yield [fs_ubtype, fs_img, md5val]
+ finally:
+ call('rm -rf %s' % mount_dir, shell=True)
+ call('rm -f %s' % fs_img, shell=True)
+
+#
# Fixture for fat test
#
@pytest.fixture()
diff --git a/test/py/tests/test_fs/fstest_helpers.py b/test/py/tests/test_fs/fstest_helpers.py
index faec2982489..c1447b4d43e 100644
--- a/test/py/tests/test_fs/fstest_helpers.py
+++ b/test/py/tests/test_fs/fstest_helpers.py
@@ -9,5 +9,7 @@ def assert_fs_integrity(fs_type, fs_img):
try:
if fs_type == 'ext4':
check_call('fsck.ext4 -n -f %s' % fs_img, shell=True)
+ elif fs_type in ['fat12', 'fat16', 'fat32']:
+ check_call('fsck.fat -n %s' % fs_img, shell=True)
except CalledProcessError:
raise
diff --git a/test/py/tests/test_fs/test_rename.py b/test/py/tests/test_fs/test_rename.py
new file mode 100644
index 00000000000..df2b2fd2945
--- /dev/null
+++ b/test/py/tests/test_fs/test_rename.py
@@ -0,0 +1,372 @@
+# SPDX-License-Identifier: GPL-2.0+
+# Copyright 2025 Gabriel Dalimonte <gabriel.dalimonte@gmail.com>
+#
+# U-Boot File System:rename Test
+
+
+import pytest
+
+from fstest_defs import *
+from fstest_helpers import assert_fs_integrity
+
+@pytest.mark.boardspec('sandbox')
+@pytest.mark.slow
+class TestRename(object):
+ def test_rename1(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 1 - rename a file (successful mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 1 - rename a file'):
+ d = 'test1'
+ src = '%s/file1' % d
+ dst = '%s/file2' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s' % (ADDR, dst),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('file1' not in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test1'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename2(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 2 - rename a file to an existing file (successful mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 2 - rename a file to an existing file'):
+ d = 'test2'
+ src = '%s/file1' % d
+ dst = '%s/file_exist' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s' % (ADDR, dst),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('file1' not in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test2'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename3(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 3 - rename a directory (successful mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 3 - rename a directory'):
+ d = 'test3'
+ src = '%s/dir1' % d
+ dst = '%s/dir2' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s/file1' % (ADDR, dst),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir1' not in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test3'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename4(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 4 - rename a directory to an existing directory (successful
+ mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 4 - rename a directory to an existing directory'):
+ d = 'test4'
+ src = '%s/dir1' % d
+ dst = '%s/dir2' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s/dir1/file1' % (ADDR, dst),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir1' not in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test4'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename5(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 5 - rename a directory to an existing file (failed mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 5 - rename a directory to an existing file'):
+ d = 'test5'
+ src = '%s/dir1' % d
+ dst = '%s/file2' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir1' in ''.join(output))
+ assert('file2' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s' % (ADDR, dst),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test5'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename6(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 6 - rename a file to an existing empty directory (failed mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 6 - rename a file to an existing empty directory'):
+ d = 'test6'
+ src = '%s/existing' % d
+ dst = '%s/dir2' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s' % (ADDR, src),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir2' in ''.join(output))
+ assert('existing' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test6'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename7(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 7 - rename a directory to a non-empty directory (failed mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 7 - rename a directory to a non-empty directory'):
+ d = 'test7'
+ src = '%s/dir1' % d
+ dst = '%s/dir2' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s/dir1/file1' % (ADDR, dst),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir1' in ''.join(output))
+ assert('dir2' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test7'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename8(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 8 - rename a directory inside itself (failed mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 8 - rename a directory inside itself'):
+ d = 'test8'
+ src = '%s/dir1' % d
+ dst = '%s/dir1/dir1' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s/file1' % (ADDR, src),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir1' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (src),
+ ])
+ assert('file1' in ''.join(output))
+ assert('dir1' not in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test8'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename9(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 9 - rename a directory inside itself with backtracks (failed
+ mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 9 - rename a directory inside itself with backtracks'):
+ d = 'test9'
+ src = '%s/dir1/nested' % d
+ dst = '%s/dir1/nested/inner/./../../../dir1/nested/inner/another' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, dst),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s/dir1' % (d),
+ ])
+ assert('nested' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (src),
+ ])
+ assert('inner' in ''.join(output))
+ assert('nested' not in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename10(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 10 - rename a file to itself (successful mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 10 - rename a file to itself'):
+ d = 'test10'
+ src = '%s/file1' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, src),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s' % (ADDR, src),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('file1' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test10'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
+
+ def test_rename11(self, u_boot_console, fs_obj_rename):
+ """
+ Test Case 11 - rename a directory to itself (successful mv)
+ """
+ fs_type, fs_img, md5val = fs_obj_rename
+ with u_boot_console.log.section('Test Case 11 - rename a directory to itself'):
+ # / at the end here is intentional. Ensures trailing / doesn't
+ # affect mv producing an updated dst path for fs_rename
+ d = 'test11/'
+ src = '%sdir1' % d
+ output = u_boot_console.run_command_list([
+ 'host bind 0 %s' % fs_img,
+ 'setenv filesize',
+ 'mv host 0:0 %s %s' % (src, d),
+ ])
+ assert('' == ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'load host 0:0 %x /%s/file1' % (ADDR, src),
+ 'printenv filesize'])
+ assert('filesize=400' in output)
+
+ output = u_boot_console.run_command_list([
+ 'ls host 0:0 %s' % (d),
+ ])
+ assert('dir1' in ''.join(output))
+
+ output = u_boot_console.run_command_list([
+ 'md5sum %x $filesize' % ADDR,
+ 'setenv filesize'])
+ assert(md5val['test11'] in ''.join(output))
+ assert_fs_integrity(fs_type, fs_img)
diff --git a/test/py/tests/test_spi.py b/test/py/tests/test_spi.py
index 0abdfa78b76..d57db9178e9 100644
--- a/test/py/tests/test_spi.py
+++ b/test/py/tests/test_spi.py
@@ -119,37 +119,35 @@ def spi_pre_commands(u_boot_console, freq):
pytest.fail('Not recognized the SPI flash part name')
m = re.search('page size (.+?) Bytes', output)
- if m:
- try:
- page_size = int(m.group(1))
- except ValueError:
- pytest.fail('Not recognized the SPI page size')
+ assert m
+ try:
+ page_size = int(m.group(1))
+ except ValueError:
+ pytest.fail('Not recognized the SPI page size')
m = re.search('erase size (.+?) KiB', output)
- if m:
- try:
- erase_size = int(m.group(1))
- except ValueError:
- pytest.fail('Not recognized the SPI erase size')
-
+ assert m
+ try:
+ erase_size = int(m.group(1))
erase_size *= 1024
+ except ValueError:
+ pytest.fail('Not recognized the SPI erase size')
m = re.search('total (.+?) MiB', output)
- if m:
- try:
- total_size = int(m.group(1))
- except ValueError:
- pytest.fail('Not recognized the SPI total size')
-
+ assert m
+ try:
+ total_size = int(m.group(1))
total_size *= 1024 * 1024
+ except ValueError:
+ pytest.fail('Not recognized the SPI total size')
m = re.search('Detected (.+?) with', output)
- if m:
- try:
- flash_part = m.group(1)
- assert flash_part == part_name
- except ValueError:
- pytest.fail('Not recognized the SPI flash part')
+ assert m
+ try:
+ flash_part = m.group(1)
+ assert flash_part == part_name
+ except ValueError:
+ pytest.fail('Not recognized the SPI flash part')
global SPI_DATA
SPI_DATA = {
diff --git a/test/py/tests/test_suite.py b/test/py/tests/test_suite.py
index 73c185349b4..9ddc883394b 100644
--- a/test/py/tests/test_suite.py
+++ b/test/py/tests/test_suite.py
@@ -7,10 +7,10 @@ import re
# List of test suites we expect to find with 'ut info' and 'ut all'
EXPECTED_SUITES = [
'addrmap', 'bdinfo', 'bloblist', 'bootm', 'bootstd',
- 'cmd', 'common', 'dm', 'env', 'exit',
+ 'cmd', 'common', 'dm', 'env', 'exit', 'fdt_overlay',
'fdt', 'font', 'hush', 'lib',
'loadm', 'log', 'mbr', 'measurement', 'mem',
- 'overlay', 'pci_mps', 'setexpr', 'upl',
+ 'pci_mps', 'setexpr', 'upl',
]
@@ -66,11 +66,12 @@ def collect_info(cons, output):
msg = m.group(3)
if DEBUG_ME:
cons.log.info(f"test_name {test_name} msg '{msg}'")
- if msg == ' (flat tree)' and test_name not in tests:
- tests.add(test_name)
+ full_name = f'{cur_suite}.{test_name}'
+ if msg == ' (flat tree)' and full_name not in tests:
+ tests.add(full_name)
test_count += 1
if not msg or 'skipped as it is manual' in msg:
- tests.add(test_name)
+ tests.add(full_name)
test_count += 1
if DEBUG_ME:
cons.log.info(f'test_count {test_count}')
@@ -134,7 +135,7 @@ def xtest_suite(u_boot_console, u_boot_config):
- The number of suites matches that reported by the 'ut info'
- Where available, the number of tests is each suite matches that
- reported by 'ut info -s'
+ reported by 'ut -s info'
- The total number of tests adds up to the total that are actually run
with 'ut all'
- All suites are run with 'ut all'
@@ -166,7 +167,7 @@ def xtest_suite(u_boot_console, u_boot_config):
# Run 'ut info' and compare with the log results
with cons.log.section('Check suite test-counts'):
- output = cons.run_command('ut info -s')
+ output = cons.run_command('ut -s info')
suite_count, total_test_count, test_count = process_ut_info(cons,
output)
@@ -186,3 +187,22 @@ def xtest_suite(u_boot_console, u_boot_config):
assert suite_count == len(EXPECTED_SUITES)
assert total_test_count == len(all_tests)
+
+ # Run three suites
+ with cons.log.section('Check multiple suites'):
+ output = cons.run_command('ut bloblist,setexpr,mem')
+ assert 'Suites run: 3' in output
+
+ # Run a particular test
+ with cons.log.section('Check single test'):
+ output = cons.run_command('ut bloblist reloc')
+ assert 'Test: reloc: bloblist.c' in output
+
+ # Run tests multiple times
+ with cons.log.section('Check multiple runs'):
+ output = cons.run_command('ut -r2 bloblist')
+ lines = output.splitlines()
+ run = len([line for line in lines if 'Test:' in line])
+ count = re.search(r'Tests run: (\d*)', lines[-1]).group(1)
+
+ assert run == 2 * int(count)
diff --git a/test/py/tests/test_ums.py b/test/py/tests/test_ums.py
index 749b1606235..387571c5140 100644
--- a/test/py/tests/test_ums.py
+++ b/test/py/tests/test_ums.py
@@ -113,14 +113,12 @@ def test_ums(u_boot_console, env__usb_dev_port, env__block_devs):
mount_subdir = env__block_devs[0]['writable_fs_subdir']
part_num = env__block_devs[0]['writable_fs_partition']
host_ums_part_node = '%s-part%d' % (host_ums_dev_node, part_num)
+ test_f = u_boot_utils.PersistentRandomFile(u_boot_console, 'ums.bin',
+ 1024 * 1024);
+ mounted_test_fn = mount_point + '/' + mount_subdir + test_f.fn
else:
host_ums_part_node = host_ums_dev_node
- test_f = u_boot_utils.PersistentRandomFile(u_boot_console, 'ums.bin',
- 1024 * 1024);
- if have_writable_fs_partition:
- mounted_test_fn = mount_point + '/' + mount_subdir + test_f.fn
-
def start_ums():
"""Start U-Boot's ums shell command.
@@ -197,25 +195,23 @@ def test_ums(u_boot_console, env__usb_dev_port, env__block_devs):
ignore_errors)
ignore_cleanup_errors = True
- try:
- start_ums()
- if not have_writable_fs_partition:
- # Skip filesystem-based testing if not configured
- return
+ if have_writable_fs_partition:
try:
- mount()
- u_boot_console.log.action('Writing test file via UMS')
- cmd = ('rm', '-f', mounted_test_fn)
- u_boot_utils.run_and_log(u_boot_console, cmd)
- if os.path.exists(mounted_test_fn):
- raise Exception('Could not rm target UMS test file')
- cmd = ('cp', test_f.abs_fn, mounted_test_fn)
- u_boot_utils.run_and_log(u_boot_console, cmd)
- ignore_cleanup_errors = False
+ start_ums()
+ try:
+ mount()
+ u_boot_console.log.action('Writing test file via UMS')
+ cmd = ('rm', '-f', mounted_test_fn)
+ u_boot_utils.run_and_log(u_boot_console, cmd)
+ if os.path.exists(mounted_test_fn):
+ raise Exception('Could not rm target UMS test file')
+ cmd = ('cp', test_f.abs_fn, mounted_test_fn)
+ u_boot_utils.run_and_log(u_boot_console, cmd)
+ ignore_cleanup_errors = False
+ finally:
+ umount(ignore_errors=ignore_cleanup_errors)
finally:
- umount(ignore_errors=ignore_cleanup_errors)
- finally:
- stop_ums(ignore_errors=ignore_cleanup_errors)
+ stop_ums(ignore_errors=ignore_cleanup_errors)
ignore_cleanup_errors = True
try:
diff --git a/test/py/tests/test_usb.py b/test/py/tests/test_usb.py
index 566d73b7c64..9bef883325f 100644
--- a/test/py/tests/test_usb.py
+++ b/test/py/tests/test_usb.py
@@ -580,6 +580,8 @@ def test_usb_load(u_boot_console):
elif fs in ['ext4', 'ext2']:
file, size, expected_crc32 = \
usb_ext4load_ext4write(u_boot_console, fs, x, part)
+ else:
+ raise Exception('Unsupported filesystem type %s' % fs)
offset = random.randrange(128, 1024, 128)
output = u_boot_console.run_command(