tests/functional/aspeed: unify boot completion detection on 'login:' prompt

The boot completion check in AspeedTest waits for the systemd
"Hostname set to" message, which occasionally causes intermittent test
timeouts, e.g. on ast2500 SoC machines. The root cause seems to be
console output interleaving of both systemd and the getty login
process. This results in the expected pattern string being broken up.

Unify and simplify all boot completion checks by looking for the
generic 'login:' substring in AspeedTest.wait_for_boot_complete().
With the override gone, remove the redundant FacebookAspeedTest class
and update the Anacapa, Bletchley, and Catalina tests to inherit
directly from AspeedTest. Also drop the now-dead image_hostname
parameter from do_test_arm_aspeed_openbmc().

Reported-by: Peter Maydell <peter.maydell@linaro.org>
Resolves: https://gitlab.com/qemu-project/qemu/-/work_items/3117
Signed-off-by: Cédric Le Goater <clg@redhat.com>
Reviewed-by: Thomas Huth <thuth@redhat.com>
Message-ID: <20260617042718.2883655-1-clg@redhat.com>
Signed-off-by: Thomas Huth <th.huth@posteo.eu>
This commit is contained in:
Cédric Le Goater
2026-06-17 06:27:18 +02:00
committed by Thomas Huth
parent e579bb528c
commit d1edce955d
5 changed files with 14 additions and 28 deletions

View File

@@ -5,10 +5,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
from qemu_test import Asset
from aspeed import FacebookAspeedTest
from aspeed import AspeedTest
class AnacapaMachine(FacebookAspeedTest):
class AnacapaMachine(AspeedTest):
ASSET_ANACAPA_FLASH = Asset(
'https://github.com/legoater/qemu-aspeed-boot/raw/3fa3212827b04be4034d43b5adeef57c27d6ab18/images/anacapa-bmc/openbmc-20260512025228/obmc-phosphor-image-anacapa-20260512025228.static.mtd.xz',
@@ -22,4 +22,4 @@ class AnacapaMachine(FacebookAspeedTest):
soc='AST2600 rev A3')
if __name__ == '__main__':
FacebookAspeedTest.main()
AspeedTest.main()

View File

@@ -5,10 +5,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
from qemu_test import Asset
from aspeed import FacebookAspeedTest
from aspeed import AspeedTest
class BletchleyMachine(FacebookAspeedTest):
class BletchleyMachine(AspeedTest):
ASSET_BLETCHLEY_FLASH = Asset(
'https://github.com/legoater/qemu-aspeed-boot/raw/master/images/bletchley-bmc/openbmc-20250128071329/obmc-phosphor-image-bletchley-20250128071329.static.mtd.xz',
@@ -22,4 +22,4 @@ class BletchleyMachine(FacebookAspeedTest):
soc='AST2600 rev A3')
if __name__ == '__main__':
FacebookAspeedTest.main()
AspeedTest.main()

View File

@@ -5,10 +5,10 @@
# SPDX-License-Identifier: GPL-2.0-or-later
from qemu_test import Asset
from aspeed import FacebookAspeedTest
from aspeed import AspeedTest
class CatalinaMachine(FacebookAspeedTest):
class CatalinaMachine(AspeedTest):
ASSET_CATALINA_FLASH = Asset(
'https://github.com/legoater/qemu-aspeed-boot/raw/a866feb5ef81245b4827a214584bf6bcc72939f6/images/catalina-bmc/obmc-phosphor-image-catalina-20250619123021.static.mtd.xz',
@@ -22,4 +22,4 @@ class CatalinaMachine(FacebookAspeedTest):
soc='AST2600 rev A3')
if __name__ == '__main__':
FacebookAspeedTest.main()
AspeedTest.main()

View File

@@ -19,8 +19,7 @@ class GB200Machine(AspeedTest):
self.do_test_arm_aspeed_openbmc('gb200nvl-bmc', image=image_path,
uboot='2019.04', cpu_id='0xf00',
soc='AST2600 rev A3',
image_hostname='gb200nvl-obmc')
soc='AST2600 rev A3')
if __name__ == '__main__':
AspeedTest.main()

View File

@@ -8,14 +8,7 @@ from qemu_test import LinuxKernelTest
class AspeedTest(LinuxKernelTest):
def do_test_arm_aspeed_openbmc(self, machine, image, uboot='2019.04',
cpu_id='0x0', soc='AST2500 rev A1',
image_hostname=None):
# Allow for the image hostname to not end in "-bmc"
if image_hostname is not None:
hostname = image_hostname
else:
hostname = machine.removesuffix('-bmc')
cpu_id='0x0', soc='AST2500 rev A1'):
self.set_machine(machine)
self.vm.set_console()
self.vm.add_args('-drive', f'file={image},if=mtd,format=raw',
@@ -28,10 +21,10 @@ class AspeedTest(LinuxKernelTest):
self.wait_for_console_pattern(f'Booting Linux on physical CPU {cpu_id}')
self.wait_for_console_pattern(f'ASPEED {soc}')
self.wait_for_console_pattern('/init as init process')
self.wait_for_boot_complete(hostname)
self.wait_for_boot_complete()
def wait_for_boot_complete(self, hostname):
self.wait_for_console_pattern(f'systemd[1]: Hostname set to <{hostname}>.')
def wait_for_boot_complete(self):
self.wait_for_console_pattern('login:')
def do_test_arm_aspeed_buildroot_start(self, image, cpu_id, pattern='Aspeed EVB'):
self.require_netdev('user')
@@ -71,9 +64,3 @@ class AspeedTest(LinuxKernelTest):
with open(path, "wb") as f:
f.write(pattern)
return path
class FacebookAspeedTest(AspeedTest):
def wait_for_boot_complete(self, hostname):
self.wait_for_console_pattern(f'{hostname} login:')