test/py: net: Add a test for 'pxe get' command

Execute the 'pxe get' command to download a pxe configuration file from
the TFTP server and validate its interpretation.

Signed-off-by: Love Kumar <love.kumar@amd.com>
Reviewed-by: Ramon Fried <rfried.dev@gmail.com>
Link: https://lore.kernel.org/r/b5d263cf61282b158052ba87bde1fb4a227c0bb7.1696338593.git.love.kumar@amd.com
Signed-off-by: Michal Simek <michal.simek@amd.com>
This commit is contained in:
Love Kumar 2023-10-03 18:42:46 +05:30 committed by Michal Simek
parent 950fc4a58b
commit 7a82bfff5e

View file

@ -6,6 +6,7 @@
import pytest
import u_boot_utils
import uuid
"""
Note: This test relies on boardenv_* containing configuration values to define
@ -61,6 +62,16 @@ env__net_nfs_readable_file = {
'crc32': 'c2244b26',
}
# Details regarding a file that may be read from a TFTP server. This variable
# may be omitted or set to None if PXE testing is not possible or desired.
env__net_pxe_readable_file = {
'fn': 'default',
'addr': 0x2000000,
'size': 74,
'timeout': 50000,
'pattern': 'Linux',
}
# True if a router advertisement service is connected to the network, and should
# be tested. If router advertisement testing is not possible or desired, this
variable may be omitted or set to False.
@ -260,3 +271,58 @@ def test_net_nfs(u_boot_console):
output = u_boot_console.run_command('crc32 %x $filesize' % addr)
assert expected_crc in output
@pytest.mark.buildconfigspec("cmd_net")
@pytest.mark.buildconfigspec("cmd_pxe")
def test_net_pxe_get(u_boot_console):
"""Test the pxe get command.
A pxe configuration file is downloaded from the TFTP server and interpreted
to boot the images mentioned in pxe configuration file.
The details of the file to download are provided by the boardenv_* file;
see the comment at the beginning of this file.
"""
if not net_set_up:
pytest.skip("Network not initialized")
test_net_setup_static(u_boot_console)
f = u_boot_console.config.env.get("env__net_pxe_readable_file", None)
if not f:
pytest.skip("No PXE readable file to read")
addr = f.get("addr", None)
timeout = f.get("timeout", u_boot_console.p.timeout)
pxeuuid = uuid.uuid1()
u_boot_console.run_command(f"setenv pxeuuid {pxeuuid}")
expected_text_uuid = f"Retrieving file: pxelinux.cfg/{pxeuuid}"
ethaddr = u_boot_console.run_command("echo $ethaddr")
ethaddr = ethaddr.replace(':', '-')
expected_text_ethaddr = f"Retrieving file: pxelinux.cfg/01-{ethaddr}"
ip = u_boot_console.run_command("echo $ipaddr")
ip = ip.split('.')
ipaddr_file = "".join(['%02x' % int(x) for x in ip]).upper()
expected_text_ipaddr = f"Retrieving file: pxelinux.cfg/{ipaddr_file}"
expected_text_default = f"Retrieving file: pxelinux.cfg/default"
with u_boot_console.temporary_timeout(timeout):
output = u_boot_console.run_command("pxe get")
assert "TIMEOUT" not in output
assert expected_text_uuid in output
assert expected_text_ethaddr in output
assert expected_text_ipaddr in output
i = 1
for i in range(0, len(ipaddr_file) - 1):
expected_text_ip = f"Retrieving file: pxelinux.cfg/{ipaddr_file[:-i]}"
assert expected_text_ip in output
i += 1
assert expected_text_default in output
assert "Config file 'default.boot' found" in output