[PATCH] usb: Fix test failure with multiple partitions
Andrew Goodbody
andrew.goodbody at linaro.org
Thu Oct 31 12:20:56 CET 2024
On 16/10/2024 11:14, Kumar, Love wrote:
> On 15/10/24, 10:25 PM, Marek Vasut <marex at denx.de> wrote:
>
> On 10/15/24 2:19 PM, Andrew Goodbody wrote:
>> When test_usb_load finds multiple partitions of the same type then
>> it will cause a test failure. The call to write the test file will
>> write a different test file to each partition but only return the
>> name and size of the last one written. So the test then fails to
>> load the test file from the first partition as it uses the name of
>> a file on a different partition.
>>
>> Refactor the code so that only one test file is written at a time
>> and is written to only the partition being tested at that time. This
>> allows the correct file name to always be available to the code that
>> runs the load command. This reduces the number of files written and
>> also the number of calls to crc32 needed.
>>
>> Fixes: 1c5b6edad381 ("test/py: usb: Add tests for USB device")
>> Signed-off-by: Andrew Goodbody <andrew.goodbody at linaro.org>
>> ---
>>
>> test/py/tests/test_usb.py | 166 +++++++++++++++++++-------------------
>> 1 file changed, 82 insertions(+), 84 deletions(-)
>>
>> diff --git a/test/py/tests/test_usb.py b/test/py/tests/test_usb.py
>> index fb3d20f082..e7966cad2b 100644
>> --- a/test/py/tests/test_usb.py
>> +++ b/test/py/tests/test_usb.py
>> @@ -288,6 +288,47 @@ def test_usb_fatls_fatinfo(u_boot_console):
>> if not part_detect:
>> pytest.skip('No %s partition detected' % fs.upper())
>>
>> +def usb_fatload_fatwrite(u_boot_console, fs, x, part):
>> + addr = u_boot_utils.find_ram_base(u_boot_console)
>> + size = random.randint(4, 1 * 1024 * 1024)
>> + output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
>> + m = re.search('==> (.+?)', output)
>> + if not m:
>> + pytest.fail('CRC32 failed')
>> + expected_crc32 = m.group(1)
>> +
>> + file = '%s_%d' % ('uboot_test', size)
>> + output = u_boot_console.run_command(
>> + '%swrite usb %d:%s %x %s %x' % (fs, x, part, addr, file, size)
>> + )
>> + assert 'Unable to write' not in output
>> + assert 'Error' not in output
>> + assert 'overflow' not in output
>> + expected_text = '%d bytes written' % size
>> + assert expected_text in output
>> +
>> + alignment = int(
>> + u_boot_console.config.buildconfig.get(
>> + 'config_sys_cacheline_size', 128
>> + )
>> + )
>> + offset = random.randrange(alignment, 1024, alignment)
>> + output = u_boot_console.run_command(
>> + '%sload usb %d:%s %x %s' % (fs, x, part, addr + offset, file)
>> + )
>> + assert 'Invalid FAT entry' not in output
>> + assert 'Unable to read file' not in output
>> + assert 'Misaligned buffer address' not in output
>> + expected_text = '%d bytes read' % size
>> + assert expected_text in output
>> +
>> + output = u_boot_console.run_command(
>> + 'crc32 %x $filesize' % (addr + offset)
>> + )
>> + assert expected_crc32 in output
>> +
>> + return file, size, expected_crc32
>> +
>> @pytest.mark.buildconfigspec('cmd_usb')
>> @pytest.mark.buildconfigspec('cmd_fat')
>> @pytest.mark.buildconfigspec('cmd_memory')
>> @@ -309,49 +350,11 @@ def test_usb_fatload_fatwrite(u_boot_console):
>>
>> for part in partitions:
>> part_detect = 1
>> - addr = u_boot_utils.find_ram_base(u_boot_console)
>> - size = random.randint(4, 1 * 1024 * 1024)
>> - output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
>> - m = re.search('==> (.+?)', output)
>> - if not m:
>> - pytest.fail('CRC32 failed')
>> - expected_crc32 = m.group(1)
>> -
>> - file = '%s_%d' % ('uboot_test', size)
>> - output = u_boot_console.run_command(
>> - '%swrite usb %d:%s %x %s %x' % (fs, x, part, addr, file, size)
>> - )
>> - assert 'Unable to write' not in output
>> - assert 'Error' not in output
>> - assert 'overflow' not in output
>> - expected_text = '%d bytes written' % size
>> - assert expected_text in output
>> -
>> - alignment = int(
>> - u_boot_console.config.buildconfig.get(
>> - 'config_sys_cacheline_size', 128
>> - )
>> - )
>> - offset = random.randrange(alignment, 1024, alignment)
>> - output = u_boot_console.run_command(
>> - '%sload usb %d:%s %x %s' % (fs, x, part, addr + offset, file)
>> - )
>> - assert 'Invalid FAT entry' not in output
>> - assert 'Unable to read file' not in output
>> - assert 'Misaligned buffer address' not in output
>> - expected_text = '%d bytes read' % size
>> - assert expected_text in output
>> -
>> - output = u_boot_console.run_command(
>> - 'crc32 %x $filesize' % (addr + offset)
>> - )
>> - assert expected_crc32 in output
>> + usb_fatload_fatwrite(u_boot_console, fs, x, part)
>>
>> if not part_detect:
>> pytest.skip('No %s partition detected' % fs.upper())
>>
>> - return file, size
>> -
>> @pytest.mark.buildconfigspec('cmd_usb')
>> @pytest.mark.buildconfigspec('cmd_ext4')
>> def test_usb_ext4ls(u_boot_console):
>> @@ -380,6 +383,39 @@ def test_usb_ext4ls(u_boot_console):
>> if not part_detect:
>> pytest.skip('No %s partition detected' % fs.upper())
>>
>> +def usb_ext4load_ext4write(u_boot_console, fs, x, part):
>> + addr = u_boot_utils.find_ram_base(u_boot_console)
>> + size = random.randint(4, 1 * 1024 * 1024)
>> + output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
>> + m = re.search('==> (.+?)', output)
>> + if not m:
>> + pytest.fail('CRC32 failed')
>> + expected_crc32 = m.group(1)
>> + file = '%s_%d' % ('uboot_test', size)
>> +
>> + output = u_boot_console.run_command(
>> + '%swrite usb %d:%s %x /%s %x' % (fs, x, part, addr, file, size)
>> + )
>> + assert 'Unable to write' not in output
>> + assert 'Error' not in output
>> + assert 'overflow' not in output
>> + expected_text = '%d bytes written' % size
>> + assert expected_text in output
>> +
>> + offset = random.randrange(128, 1024, 128)
>> + output = u_boot_console.run_command(
>> + '%sload usb %d:%s %x /%s' % (fs, x, part, addr + offset, file)
>> + )
>> + expected_text = '%d bytes read' % size
>> + assert expected_text in output
>> +
>> + output = u_boot_console.run_command(
>> + 'crc32 %x $filesize' % (addr + offset)
>> + )
>> + assert expected_crc32 in output
>> +
>> + return file, size, expected_crc32
>> +
>> @pytest.mark.buildconfigspec('cmd_usb')
>> @pytest.mark.buildconfigspec('cmd_ext4')
>> @pytest.mark.buildconfigspec('ext4_write')
>> @@ -402,41 +438,11 @@ def test_usb_ext4load_ext4write(u_boot_console):
>>
>> for part in partitions:
>> part_detect = 1
>> - addr = u_boot_utils.find_ram_base(u_boot_console)
>> - size = random.randint(4, 1 * 1024 * 1024)
>> - output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
>> - m = re.search('==> (.+?)', output)
>> - if not m:
>> - pytest.fail('CRC32 failed')
>> - expected_crc32 = m.group(1)
>> - file = '%s_%d' % ('uboot_test', size)
>> -
>> - output = u_boot_console.run_command(
>> - '%swrite usb %d:%s %x /%s %x' % (fs, x, part, addr, file, size)
>> - )
>> - assert 'Unable to write' not in output
>> - assert 'Error' not in output
>> - assert 'overflow' not in output
>> - expected_text = '%d bytes written' % size
>> - assert expected_text in output
>> -
>> - offset = random.randrange(128, 1024, 128)
>> - output = u_boot_console.run_command(
>> - '%sload usb %d:%s %x /%s' % (fs, x, part, addr + offset, file)
>> - )
>> - expected_text = '%d bytes read' % size
>> - assert expected_text in output
>> -
>> - output = u_boot_console.run_command(
>> - 'crc32 %x $filesize' % (addr + offset)
>> - )
>> - assert expected_crc32 in output
>> + usb_ext4load_ext4write(u_boot_console, fs, x, part)
>>
>> if not part_detect:
>> pytest.skip('No %s partition detected' % fs.upper())
>>
>> - return file, size
>> -
>> @pytest.mark.buildconfigspec('cmd_usb')
>> @pytest.mark.buildconfigspec('cmd_ext2')
>> def test_usb_ext2ls(u_boot_console):
>> @@ -473,7 +479,6 @@ def test_usb_ext2ls(u_boot_console):
>> @pytest.mark.buildconfigspec('cmd_memory')
>> def test_usb_ext2load(u_boot_console):
>> devices, controllers, storage_device = test_usb_part(u_boot_console)
>> - file, size = test_usb_ext4load_ext4write(u_boot_console)
>>
>> if not devices:
>> pytest.skip('No devices detected')
>> @@ -491,12 +496,9 @@ def test_usb_ext2load(u_boot_console):
>>
>> for part in partitions:
>> part_detect = 1
>> + file, size, expected_crc32 = \
>> + usb_ext4load_ext4write(u_boot_console, 'ext4', x, part)
>> addr = u_boot_utils.find_ram_base(u_boot_console)
>> - output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
>> - m = re.search('==> (.+?)', output)
>> - if not m:
>> - pytest.fail('CRC32 failed')
>> - expected_crc32 = m.group(1)
>>
>> offset = random.randrange(128, 1024, 128)
>> output = u_boot_console.run_command(
>> @@ -565,15 +567,11 @@ def test_usb_load(u_boot_console):
>> addr = u_boot_utils.find_ram_base(u_boot_console)
>>
>> if fs == 'fat':
>> - file, size = test_usb_fatload_fatwrite(u_boot_console)
>> + file, size, expected_crc32 = \
>> + usb_fatload_fatwrite(u_boot_console, fs, x, part)
>> elif fs == 'ext4':
>> - file, size = test_usb_ext4load_ext4write(u_boot_console)
>> -
>> - output = u_boot_console.run_command('crc32 %x %x' % (addr, size))
>> - m = re.search('==> (.+?)', output)
>> - if not m:
>> - pytest.fail('CRC32 failed')
>> - expected_crc32 = m.group(1)
>> + file, size, expected_crc32 = \
>> + usb_ext4load_ext4write(u_boot_console, fs, x, part)
>>
>> offset = random.randrange(128, 1024, 128)
>> output = u_boot_console.run_command(
>
> +CC Simon the test expert
>
> Looks good for me.
>
> Reviewed-by: Love Kumar <love.kumar at amd.com <mailto:love.kumar at amd.com>>
>
>
> Regards,
> Love Kumar
>
Ping
More information about the U-Boot
mailing list