summaryrefslogtreecommitdiff
path: root/scripts/check-qemu-install
diff options
context:
space:
mode:
Diffstat (limited to 'scripts/check-qemu-install')
-rwxr-xr-xscripts/check-qemu-install122
1 files changed, 104 insertions, 18 deletions
diff --git a/scripts/check-qemu-install b/scripts/check-qemu-install
index 11083706..53e1c74d 100755
--- a/scripts/check-qemu-install
+++ b/scripts/check-qemu-install
@@ -1,6 +1,6 @@
#!/usr/bin/env python3
#
-# Copyright (C) 2019-2024, VyOS maintainers and contributors
+# Copyright (C) 2019-2025, VyOS maintainers and contributors
#
# This program is free software; you can redistribute it and/or modify
# it under the terms of the GNU General Public License version 2 or later as
@@ -95,6 +95,14 @@ parser.add_argument('--sbtest', help='Execute Secure Boot tests',
action='store_true', default=False)
parser.add_argument('--qemu-cmd', help='Only generate QEMU launch command',
action='store_true', default=False)
+parser.add_argument('--cpu', help='Set QEMU CPU', type=int, default=2)
+parser.add_argument('--memory', help='Set QEMU memory', type=int, default=4)
+parser.add_argument('--vyconf', help='Execute testsuite with vyconfd', action='store_true',
+ default=False)
+parser.add_argument('--no-vpp', help='Execute testsuite without VPP tests',
+ action='store_true', default=False)
+parser.add_argument('--huge-page-size', help='Huge page size (e.g., 2M, 1G)', type=str)
+parser.add_argument('--huge-page-count', help='Number of huge pages to allocate', type=int)
args = parser.parse_args()
@@ -103,11 +111,13 @@ with open('data/defaults.toml', 'rb') as f:
vyos_defaults = tomli.load(f)
# This is what we got from the build
-with open('build/manifest.json', 'rb') as f:
- manifest = json.load(f)
+manifest_file = 'build/manifest.json'
+if os.path.isfile(manifest_file):
+ with open('build/manifest.json', 'rb') as f:
+ manifest = json.load(f)
-vyos_version = manifest['build_config']['version']
-vyos_codename = manifest['build_config']['release_train']
+ vyos_version = manifest['build_config']['version']
+ vyos_codename = manifest['build_config']['release_train']
class StreamToLogger(object):
"""
@@ -168,11 +178,11 @@ def get_qemu_cmd(name, enable_uefi, disk_img, raid=None, iso_img=None, tpm=False
macbase = '00:00:5E:00:53'
cmd = f'qemu-system-x86_64 \
-name "{name}" \
- -smp 2,sockets=1,cores=2,threads=1 \
+ -smp {args.cpu},sockets=1,cores={args.cpu},threads=1 \
-cpu host \
-machine {machine},accel=kvm \
{uefi} \
- -m 4G \
+ -m {args.memory}G \
-vga none \
-nographic \
{vga} {vnc}\
@@ -357,7 +367,7 @@ if args.qemu_cmd:
os.system(tmp)
exit(0)
-test_timeout = 3 *3600 # 3 hours (in seconds)
+test_timeout = 5 *3600 # 3 hours (in seconds)
tpm_process = None
try:
# Start TPM emulator
@@ -395,6 +405,32 @@ try:
loginVM(c, log)
#################################################
+ # Check for no private key contents within the image
+ #################################################
+ msg = 'Found private key - bailing out'
+ c.sendline(f'if sudo grep -rq "BEGIN PRIVATE KEY" /var/lib/shim-signed/mok; then echo {msg}; exit 1; fi')
+ tmp = c.expect([f'\n{msg}', op_mode_prompt])
+ if tmp == 0:
+ log.error(msg)
+ exit(1)
+
+ #################################################
+ # Configure boot options if required
+ #################################################
+ if args.huge_page_size and args.huge_page_count:
+ c.sendline('configure')
+ c.expect(cfg_mode_prompt)
+ c.sendline(f'set system option kernel memory hugepage-size {args.huge_page_size} hugepage-count {args.huge_page_count}')
+ c.expect(cfg_mode_prompt)
+ c.sendline('set system option kernel disable-mitigations')
+ c.expect(cfg_mode_prompt)
+ c.sendline('commit')
+ c.expect(cfg_mode_prompt)
+ c.sendline('save')
+ c.expect(cfg_mode_prompt)
+ c.sendline('exit')
+ c.expect(op_mode_prompt)
+ #################################################
# Installing into VyOS system
#################################################
log.info('Starting installer')
@@ -510,17 +546,29 @@ try:
loginVM(c, log)
+ #################################################
+ # Boot options require a reboot
+ #################################################
+ if args.huge_page_size and args.huge_page_count:
+ log.info('Rebooting to apply kernel boot options')
+ c.sendline('reboot now')
+ loginVM(c, log)
+
################################################
# Always load the WiFi simulation module
################################################
c.sendline('sudo modprobe mac80211_hwsim')
c.expect(op_mode_prompt)
+ # Inform smoketest about this environment
+ c.sendline('touch /tmp/vyos.smoketests.hint')
+ c.expect(op_mode_prompt)
+
#################################################
# Start/stop config daemon
#################################################
if args.configd:
- c.sendline('sudo systemctl start vyos-configd.service &> /dev/null')
+ c.sendline('sudo systemctl restart vyos-configd.service &> /dev/null')
else:
c.sendline('sudo systemctl stop vyos-configd.service &> /dev/null')
c.expect(op_mode_prompt)
@@ -546,16 +594,29 @@ try:
c.sendline('systemd-detect-virt')
c.expect('kvm')
c.expect(op_mode_prompt)
+ c.sendline('show system cpu')
+ c.expect(op_mode_prompt)
+ c.sendline('show system memory')
+ c.expect(op_mode_prompt)
+ c.sendline('show system memory detail | no-more')
+ c.expect(op_mode_prompt)
+ c.sendline('show configuration commands | match kernel')
+ c.expect(op_mode_prompt)
+ c.sendline('cat /proc/cmdline')
+ c.expect(op_mode_prompt)
+ c.sendline('show version all | grep -e "vpp" -e "vyos-1x"')
+ c.expect(op_mode_prompt)
#################################################
# Verify /etc/os-release via lsb_release
#################################################
c.sendline('lsb_release --short --id 2>/dev/null')
c.expect('VyOS')
- c.sendline('lsb_release --short --release 2>/dev/null')
- c.expect(vyos_version)
- c.sendline('lsb_release --short --codename 2>/dev/null')
- c.expect(vyos_codename)
+ if os.path.isfile(manifest_file):
+ c.sendline('lsb_release --short --release 2>/dev/null')
+ c.expect(vyos_version)
+ c.sendline('lsb_release --short --codename 2>/dev/null')
+ c.expect(vyos_codename)
# Ensure ephemeral key is loaded
vyos_kernel_key = 'VyOS build time autogenerated kernel key'
@@ -563,10 +624,6 @@ try:
c.expect(f'.*{vyos_kernel_key}.*')
c.expect(op_mode_prompt)
- # Inform smoketest about this environment
- c.sendline('touch /tmp/vyos.smoketests.hint')
- c.expect(op_mode_prompt)
-
#################################################
# Executing test-suite
#################################################
@@ -783,6 +840,15 @@ try:
# remove interface tests as they consume a lot of time
c.sendline('sudo rm -f /usr/libexec/vyos/tests/smoke/cli/test_interfaces_*')
c.expect(op_mode_prompt)
+ if args.no_vpp:
+ # remove VPP tests
+ c.sendline('sudo rm -f /usr/libexec/vyos/tests/smoke/cli/test_vpp*')
+ c.expect(op_mode_prompt)
+
+ if args.vyconf:
+ c.sendline('sudo /usr/libexec/vyos/set_vyconf_backend.py --no-prompt &> /dev/null')
+ c.expect(op_mode_prompt)
+ log.info('Smoketests will be run using vyconfd/vyos-commitd')
log.info('Executing VyOS smoketests')
c.sendline('/usr/bin/vyos-smoketest')
@@ -809,6 +875,26 @@ try:
# else, run configtest suite
elif args.configtest:
+ # Remove config-tests that we don't want to run
+ if args.match:
+ if args.match.startswith("!"):
+ # Exclude mode — delete only the matched names
+ names = args.match[1:].split("|")
+ match_str = '-o '.join([f'-name "{name}"' for name in names])
+ cleanup_config_dir_cmd = f'sudo find /usr/libexec/vyos/tests/config -mindepth 1 -maxdepth 1 \\( {match_str} \\) -exec rm -rf {{}} +'
+ cleanup_config_tests_dir_cmd = f'sudo find /usr/libexec/vyos/tests/config-tests -mindepth 1 -maxdepth 1 \\( {match_str} \\) -exec rm -rf {{}} +'
+ else:
+ # Include mode — keep only the matched names, delete the rest
+ names = args.match.split("|")
+ match_str = '-o '.join([f'-name "{name}"' for name in names])
+ cleanup_config_dir_cmd = f'sudo find /usr/libexec/vyos/tests/config -mindepth 1 -maxdepth 1 ! \\( {match_str} \\) -exec rm -rf {{}} +'
+ cleanup_config_tests_dir_cmd = f'sudo find /usr/libexec/vyos/tests/config-tests -mindepth 1 -maxdepth 1 ! \\( {match_str} \\) -exec rm -rf {{}} +'
+
+ c.sendline(cleanup_config_dir_cmd)
+ c.expect(op_mode_prompt)
+ c.sendline(cleanup_config_tests_dir_cmd)
+ c.expect(op_mode_prompt)
+
log.info('Adding a legacy WireGuard default keypair for migrations')
c.sendline('sudo mkdir -p /config/auth/wireguard/default')
c.expect(op_mode_prompt)
@@ -868,7 +954,7 @@ except pexpect.exceptions.ExceptionPexpect:
EXCEPTION = 1
except Exception:
- log.error('Unknown error occured while VyOS!')
+ log.error('Unknown error occured!')
traceback.print_exc()
EXCEPTION = 1