mirror of
https://github.com/u-boot/u-boot.git
synced 2025-04-16 01:44:34 +00:00

This fixture name is quite long and results in lots of verbose code. We know this is U-Boot so the 'u_boot_' part is not necessary. But it is also a bit of a misnomer, since it provides access to all the information available to tests. It is not just the console. It would be too confusing to use con as it would be confused with config and it is probably too short. So shorten it to 'ubman'. Signed-off-by: Simon Glass <sjg@chromium.org> Link: https://lore.kernel.org/u-boot/CAFLszTgPa4aT_J9h9pqeTtLCVn4x2JvLWRcWRD8NaN3uoSAtyA@mail.gmail.com/
137 lines
4.2 KiB
Python
137 lines
4.2 KiB
Python
# SPDX-License-Identifier: GPL-2.0
|
|
# (C) Copyright 2023, Advanced Micro Devices, Inc.
|
|
|
|
"""
|
|
Note: This test doesn't rely on boardenv_* configuration value but they can
|
|
change test behavior.
|
|
|
|
For example:
|
|
|
|
# Setup env__saveenv_test_skip to True if saveenv test is not possible or
|
|
# desired and should be skipped.
|
|
env__saveenv_test_skip = True
|
|
|
|
# Setup env__saveenv_test to set the bootmode if 'modeboot' u-boot environment
|
|
# variable is not set. Test will be skipped if bootmode is not set in both
|
|
# places i.e, boardenv and modeboot u-boot environment variable
|
|
env__saveenv_test = {
|
|
'bootmode': 'qspiboot',
|
|
}
|
|
|
|
# This test will be also skipped if the bootmode is detected to JTAG.
|
|
"""
|
|
|
|
import pytest
|
|
import random
|
|
import ipaddress
|
|
import string
|
|
import uuid
|
|
|
|
# Setup the env
|
|
def setup_saveenv_env(ubman):
|
|
if ubman.config.env.get('env__saveenv_test_skip', False):
|
|
pytest.skip('saveenv test is not enabled')
|
|
|
|
output = ubman.run_command('echo $modeboot')
|
|
if output:
|
|
bootmode = output
|
|
else:
|
|
f = ubman.config.env.get('env__saveenv_test', None)
|
|
if not f:
|
|
pytest.skip('bootmode cannot be determined')
|
|
bootmode = f.get('bootmode', 'jtagboot')
|
|
|
|
if 'jtag' in bootmode:
|
|
pytest.skip('skipping saveenv test due to jtag bootmode')
|
|
|
|
# Check return code
|
|
def ret_code(ubman):
|
|
return ubman.run_command('echo $?')
|
|
|
|
# Verify env variable
|
|
def check_env(ubman, var_name, var_value):
|
|
if var_value:
|
|
output = ubman.run_command(f'printenv {var_name}')
|
|
var_value = str(var_value)
|
|
if (var_value.startswith("'") and var_value.endswith("'")) or (
|
|
var_value.startswith('"') and var_value.endswith('"')
|
|
):
|
|
var_value = var_value.split(var_value[-1])[1]
|
|
assert var_value in output
|
|
assert ret_code(ubman).endswith('0')
|
|
else:
|
|
ubman.p.send(f'printenv {var_name}\n')
|
|
output = ubman.p.expect(['not defined'])
|
|
assert output == 0
|
|
assert ret_code(ubman).endswith('1')
|
|
|
|
# Set env variable
|
|
def set_env(ubman, var_name, var_value):
|
|
ubman.run_command(f'setenv {var_name} {var_value}')
|
|
assert ret_code(ubman).endswith('0')
|
|
check_env(ubman, var_name, var_value)
|
|
|
|
@pytest.mark.buildconfigspec('cmd_saveenv')
|
|
@pytest.mark.buildconfigspec('hush_parser')
|
|
def test_saveenv(ubman):
|
|
"""Test the saveenv command in non-JTAG bootmode.
|
|
It saves the U-Boot environment in persistent storage.
|
|
"""
|
|
setup_saveenv_env(ubman)
|
|
|
|
# Set env for random mac address
|
|
rand_mac = '%02x:%02x:%02x:%02x:%02x:%02x' % (
|
|
random.randint(0, 255),
|
|
random.randint(0, 255),
|
|
random.randint(0, 255),
|
|
random.randint(0, 255),
|
|
random.randint(0, 255),
|
|
random.randint(0, 255),
|
|
)
|
|
set_env(ubman, 'mac_addr', rand_mac)
|
|
|
|
# Set env for random IPv4 address
|
|
rand_ipv4 = ipaddress.IPv4Address._string_from_ip_int(
|
|
random.randint(0, ipaddress.IPv4Address._ALL_ONES)
|
|
)
|
|
set_env(ubman, 'ipv4_addr', rand_ipv4)
|
|
|
|
# Set env for random IPv6 address
|
|
rand_ipv6 = ipaddress.IPv6Address._string_from_ip_int(
|
|
random.randint(0, ipaddress.IPv6Address._ALL_ONES)
|
|
)
|
|
set_env(ubman, 'ipv6_addr', rand_ipv6)
|
|
|
|
# Set env for random number
|
|
rand_num = random.randrange(1, 10**9)
|
|
set_env(ubman, 'num_var', rand_num)
|
|
|
|
# Set env for uuid
|
|
uuid_str = uuid.uuid4().hex.lower()
|
|
set_env(ubman, 'uuid_var', uuid_str)
|
|
|
|
# Set env for random string including special characters
|
|
sc = "!#%&()*+,-./:;<=>?@[\\]^_`{|}~"
|
|
rand_str = ''.join(
|
|
random.choices(' ' + string.ascii_letters + sc + string.digits, k=300)
|
|
)
|
|
set_env(ubman, 'str_var', f'"{rand_str}"')
|
|
|
|
# Set env for empty string
|
|
set_env(ubman, 'empty_var', '')
|
|
|
|
# Save the env variables
|
|
ubman.run_command('saveenv')
|
|
assert ret_code(ubman).endswith('0')
|
|
|
|
# Reboot
|
|
ubman.run_command('reset', wait_for_reboot=True)
|
|
|
|
# Verify the saved env variables
|
|
check_env(ubman, 'mac_addr', rand_mac)
|
|
check_env(ubman, 'ipv4_addr', rand_ipv4)
|
|
check_env(ubman, 'ipv6_addr', rand_ipv6)
|
|
check_env(ubman, 'num_var', rand_num)
|
|
check_env(ubman, 'uuid_var', uuid_str)
|
|
check_env(ubman, 'str_var', rand_str)
|
|
check_env(ubman, 'empty_var', '')
|