1# Functional test that boots known good tuxboot images the same way 2# that tuxrun (www.tuxrun.org) does. This tool is used by things like 3# the LKFT project to run regression tests on kernels. 4# 5# Copyright (c) 2023 Linaro Ltd. 6# 7# Author: 8# Alex Bennée <alex.bennee@linaro.org> 9# 10# SPDX-License-Identifier: GPL-2.0-or-later 11 12import os 13import time 14import tempfile 15 16from avocado import skip, skipIf 17from avocado_qemu import QemuSystemTest 18from avocado_qemu import exec_command, exec_command_and_wait_for_pattern 19from avocado_qemu import wait_for_console_pattern 20from avocado.utils import process 21from avocado.utils.path import find_command 22 23class TuxRunBaselineTest(QemuSystemTest): 24 """ 25 :avocado: tags=accel:tcg 26 """ 27 28 KERNEL_COMMON_COMMAND_LINE = 'printk.time=0' 29 # Tests are ~10-40s, allow for --debug/--enable-gcov overhead 30 timeout = 100 31 32 def get_tag(self, tagname, default=None): 33 """ 34 Get the metadata tag or return the default. 35 """ 36 utag = self._get_unique_tag_val(tagname) 37 print(f"{tagname}/{default} -> {utag}") 38 if utag: 39 return utag 40 41 return default 42 43 def setUp(self): 44 super().setUp() 45 46 # We need zstd for all the tuxrun tests 47 # See https://github.com/avocado-framework/avocado/issues/5609 48 zstd = find_command('zstd', False) 49 if zstd is False: 50 self.cancel('Could not find "zstd", which is required to ' 51 'decompress rootfs') 52 self.zstd = zstd 53 54 # Process the TuxRun specific tags, most machines work with 55 # reasonable defaults but we sometimes need to tweak the 56 # config. To avoid open coding everything we store all these 57 # details in the metadata for each test. 58 59 # The tuxboot tag matches the root directory 60 self.tuxboot = self.get_tag('tuxboot') 61 62 # Most Linux's use ttyS0 for their serial port 63 self.console = self.get_tag('console', "ttyS0") 64 65 # Does the machine shutdown QEMU nicely on "halt" 66 self.shutdown = self.get_tag('shutdown') 67 68 # The name of the kernel Image file 69 self.image = self.get_tag('image', "Image") 70 71 self.root = self.get_tag('root', "vda") 72 73 # Occasionally we need extra devices to hook things up 74 self.extradev = self.get_tag('extradev') 75 76 self.qemu_img = super().get_qemu_img() 77 78 def wait_for_console_pattern(self, success_message, vm=None): 79 wait_for_console_pattern(self, success_message, 80 failure_message='Kernel panic - not syncing', 81 vm=vm) 82 83 def fetch_tuxrun_assets(self, csums=None, dt=None): 84 """ 85 Fetch the TuxBoot assets. They are stored in a standard way so we 86 use the per-test tags to fetch details. 87 """ 88 base_url = f"https://storage.tuxboot.com/20230331/{self.tuxboot}/" 89 90 # empty hash if we weren't passed one 91 csums = {} if csums is None else csums 92 ksum = csums.get(self.image, None) 93 isum = csums.get("rootfs.ext4.zst", None) 94 95 kernel_image = self.fetch_asset(base_url + self.image, 96 asset_hash = ksum, 97 algorithm = "sha256") 98 disk_image_zst = self.fetch_asset(base_url + "rootfs.ext4.zst", 99 asset_hash = isum, 100 algorithm = "sha256") 101 102 cmd = f"{self.zstd} -d {disk_image_zst} -o {self.workdir}/rootfs.ext4" 103 process.run(cmd) 104 105 if dt: 106 dsum = csums.get(dt, None) 107 dtb = self.fetch_asset(base_url + dt, 108 asset_hash = dsum, 109 algorithm = "sha256") 110 else: 111 dtb = None 112 113 return (kernel_image, self.workdir + "/rootfs.ext4", dtb) 114 115 def prepare_run(self, kernel, disk, drive, dtb=None, console_index=0): 116 """ 117 Setup to run and add the common parameters to the system 118 """ 119 self.vm.set_console(console_index=console_index) 120 121 # all block devices are raw ext4's 122 blockdev = "driver=raw,file.driver=file," \ 123 + f"file.filename={disk},node-name=hd0" 124 125 kcmd_line = self.KERNEL_COMMON_COMMAND_LINE 126 kcmd_line += f" root=/dev/{self.root}" 127 kcmd_line += f" console={self.console}" 128 129 self.vm.add_args('-kernel', kernel, 130 '-append', kcmd_line, 131 '-blockdev', blockdev) 132 133 # Sometimes we need extra devices attached 134 if self.extradev: 135 self.vm.add_args('-device', self.extradev) 136 137 self.vm.add_args('-device', 138 f"{drive},drive=hd0") 139 140 # Some machines need an explicit DTB 141 if dtb: 142 self.vm.add_args('-dtb', dtb) 143 144 def run_tuxtest_tests(self, haltmsg): 145 """ 146 Wait for the system to boot up, wait for the login prompt and 147 then do a few things on the console. Trigger a shutdown and 148 wait to exit cleanly. 149 """ 150 self.wait_for_console_pattern("Welcome to TuxTest") 151 time.sleep(0.2) 152 exec_command(self, 'root') 153 time.sleep(0.2) 154 exec_command(self, 'cat /proc/interrupts') 155 time.sleep(0.1) 156 exec_command(self, 'cat /proc/self/maps') 157 time.sleep(0.1) 158 exec_command(self, 'uname -a') 159 time.sleep(0.1) 160 exec_command_and_wait_for_pattern(self, 'halt', haltmsg) 161 162 # Wait for VM to shut down gracefully if it can 163 if self.shutdown == "nowait": 164 self.vm.shutdown() 165 else: 166 self.vm.wait() 167 168 def common_tuxrun(self, 169 csums=None, 170 dt=None, 171 drive="virtio-blk-device", 172 haltmsg="reboot: System halted", 173 console_index=0): 174 """ 175 Common path for LKFT tests. Unless we need to do something 176 special with the command line we can process most things using 177 the tag metadata. 178 """ 179 (kernel, disk, dtb) = self.fetch_tuxrun_assets(csums, dt) 180 181 self.prepare_run(kernel, disk, drive, dtb, console_index) 182 self.vm.launch() 183 self.run_tuxtest_tests(haltmsg) 184 185 def ppc64_common_tuxrun(self, sums, prefix): 186 # add device args to command line. 187 self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22', 188 '-device', 'virtio-net,netdev=vnet') 189 self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}', 190 '-device', '{"driver":"virtio-net-pci","netdev":' 191 '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",' 192 '"bus":"pci.0","addr":"0x9"}') 193 self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,' 194 '"id":"usb","bus":"pci.0","addr":"0x2"}') 195 self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"' 196 ',"bus":"pci.0","addr":"0x3"}') 197 self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":' 198 '"virtio-serial0","bus":"pci.0","addr":"0x4"}') 199 self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"' 200 ',"channel":0,"scsi-id":0,"lun":0,"device_id":' 201 '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}') 202 self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",' 203 '"id":"balloon0","bus":"pci.0","addr":"0x6"}') 204 self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}') 205 self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"' 206 ',"bus":"usb.0","port":"1"}') 207 self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"' 208 ',"bus":"usb.0","port":"2"}') 209 self.vm.add_args('-device', '{"driver":"VGA","id":"video0",' 210 '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}') 211 self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"' 212 ',"filename":"/dev/urandom"}', 213 '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"' 214 ',"id":"rng0","bus":"pci.0","addr":"0x8"}') 215 self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",' 216 '"id":"objcrypto0","queues":1}', 217 '-device', '{"driver":"virtio-crypto-pci",' 218 '"cryptodev":"objcrypto0","id":"crypto0","bus"' 219 ':"pci.0","addr":"0xa"}') 220 self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"' 221 ',"index":1,"id":"pci.1"}') 222 self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"' 223 ',"reg":12288}') 224 self.vm.add_args('-m', '2G,slots=32,maxmem=4G', 225 '-object', 'memory-backend-ram,id=ram1,size=1G', 226 '-device', 'pc-dimm,id=dimm1,memdev=ram1') 227 228 # Create a temporary qcow2 and launch the test-case 229 with tempfile.NamedTemporaryFile(prefix=prefix, 230 suffix='.qcow2') as qcow2: 231 process.run(self.qemu_img + ' create -f qcow2 ' + 232 qcow2.name + ' 1G') 233 234 self.vm.add_args('-drive', 'file=' + qcow2.name + 235 ',format=qcow2,if=none,id=' 236 'drive-virtio-disk1', 237 '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,' 238 'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1' 239 ',bootindex=2') 240 self.common_tuxrun(csums=sums, drive="scsi-hd") 241 242 # 243 # The tests themselves. The configuration is derived from how 244 # tuxrun invokes qemu (with minor tweaks like using -blockdev 245 # consistently). The tuxrun equivalent is something like: 246 # 247 # tuxrun --device qemu-{ARCH} \ 248 # --kernel https://storage.tuxboot.com/{TUXBOOT}/{IMAGE} 249 # 250 251 def test_arm64(self): 252 """ 253 :avocado: tags=arch:aarch64 254 :avocado: tags=cpu:cortex-a57 255 :avocado: tags=machine:virt 256 :avocado: tags=tuxboot:arm64 257 :avocado: tags=console:ttyAMA0 258 :avocado: tags=shutdown:nowait 259 """ 260 sums = {"Image" : 261 "ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7", 262 "rootfs.ext4.zst" : 263 "bbd5ed4b9c7d3f4ca19ba71a323a843c6b585e880115df3b7765769dbd9dd061"} 264 self.common_tuxrun(csums=sums) 265 266 def test_arm64be(self): 267 """ 268 :avocado: tags=arch:aarch64 269 :avocado: tags=cpu:cortex-a57 270 :avocado: tags=endian:big 271 :avocado: tags=machine:virt 272 :avocado: tags=tuxboot:arm64be 273 :avocado: tags=console:ttyAMA0 274 :avocado: tags=shutdown:nowait 275 """ 276 sums = { "Image" : 277 "e0df4425eb2cd9ea9a283e808037f805641c65d8fcecc8f6407d8f4f339561b4", 278 "rootfs.ext4.zst" : 279 "e6ffd8813c8a335bc15728f2835f90539c84be7f8f5f691a8b01451b47fb4bd7"} 280 self.common_tuxrun(csums=sums) 281 282 def test_armv5(self): 283 """ 284 :avocado: tags=arch:arm 285 :avocado: tags=cpu:arm926 286 :avocado: tags=machine:versatilepb 287 :avocado: tags=tuxboot:armv5 288 :avocado: tags=image:zImage 289 :avocado: tags=console:ttyAMA0 290 :avocado: tags=shutdown:nowait 291 """ 292 sums = { "rootfs.ext4.zst" : 293 "17177afa74e7294da0642861f08c88ca3c836764299a54bf6d1ce276cb9712a5", 294 "versatile-pb.dtb" : 295 "0bc0c0b0858cefd3c32b385c0d66d97142ded29472a496f4f490e42fc7615b25", 296 "zImage" : 297 "c95af2f27647c12265d75e9df44c22ff5228c59855f54aaa70f41ec2842e3a4d" } 298 299 self.common_tuxrun(csums=sums, 300 drive="virtio-blk-pci", 301 dt="versatile-pb.dtb") 302 303 def test_armv7(self): 304 """ 305 :avocado: tags=arch:arm 306 :avocado: tags=cpu:cortex-a15 307 :avocado: tags=machine:virt 308 :avocado: tags=tuxboot:armv7 309 :avocado: tags=image:zImage 310 :avocado: tags=console:ttyAMA0 311 :avocado: tags=shutdown:nowait 312 """ 313 sums = { "rootfs.ext4.zst" : 314 "ab1fbbeaddda1ffdd45c9405a28cd5370c20f23a7cbc809cc90dc9f243a8eb5a", 315 "zImage" : 316 "4c7a22e9f15875bec06bd2a29d822496571eb297d4f22694099ffcdb19077572" } 317 318 self.common_tuxrun(csums=sums) 319 320 def test_armv7be(self): 321 """ 322 :avocado: tags=arch:arm 323 :avocado: tags=cpu:cortex-a15 324 :avocado: tags=endian:big 325 :avocado: tags=machine:virt 326 :avocado: tags=tuxboot:armv7be 327 :avocado: tags=image:zImage 328 :avocado: tags=console:ttyAMA0 329 :avocado: tags=shutdown:nowait 330 """ 331 sums = {"rootfs.ext4.zst" : 332 "42ed46dd2d59986206c5b1f6cf35eab58fe3fd20c96b41aaa16b32f3f90a9835", 333 "zImage" : 334 "7facc62082b57af12015b08f7fdbaf2f123ba07a478367853ae12b219afc9f2f" } 335 336 self.common_tuxrun(csums=sums) 337 338 def test_i386(self): 339 """ 340 :avocado: tags=arch:i386 341 :avocado: tags=cpu:coreduo 342 :avocado: tags=machine:q35 343 :avocado: tags=tuxboot:i386 344 :avocado: tags=image:bzImage 345 :avocado: tags=shutdown:nowait 346 """ 347 sums = {"bzImage" : 348 "a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956", 349 "rootfs.ext4.zst" : 350 "f15e66b2bf673a210ec2a4b2e744a80530b36289e04f5388aab812b97f69754a" } 351 352 self.common_tuxrun(csums=sums, drive="virtio-blk-pci") 353 354 def test_mips32(self): 355 """ 356 :avocado: tags=arch:mips 357 :avocado: tags=machine:malta 358 :avocado: tags=cpu:mips32r6-generic 359 :avocado: tags=endian:big 360 :avocado: tags=tuxboot:mips32 361 :avocado: tags=image:vmlinux 362 :avocado: tags=root:sda 363 :avocado: tags=shutdown:nowait 364 """ 365 sums = { "rootfs.ext4.zst" : 366 "fc3da0b4c2f38d74c6d705123bb0f633c76ed953128f9d0859378c328a6d11a0", 367 "vmlinux" : 368 "bfd2172f8b17fb32970ca0c8c58f59c5a4ca38aa5855d920be3a69b5d16e52f0" } 369 370 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 371 372 def test_mips32el(self): 373 """ 374 :avocado: tags=arch:mipsel 375 :avocado: tags=machine:malta 376 :avocado: tags=cpu:mips32r6-generic 377 :avocado: tags=tuxboot:mips32el 378 :avocado: tags=image:vmlinux 379 :avocado: tags=root:sda 380 :avocado: tags=shutdown:nowait 381 """ 382 sums = { "rootfs.ext4.zst" : 383 "e799768e289fd69209c21f4dacffa11baea7543d5db101e8ce27e3bc2c41d90e", 384 "vmlinux" : 385 "8573867c68a8443db8de6d08bb33fb291c189ca2ca671471d3973a3e712096a3" } 386 387 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 388 389 def test_mips64(self): 390 """ 391 :avocado: tags=arch:mips64 392 :avocado: tags=machine:malta 393 :avocado: tags=tuxboot:mips64 394 :avocado: tags=endian:big 395 :avocado: tags=image:vmlinux 396 :avocado: tags=root:sda 397 :avocado: tags=shutdown:nowait 398 """ 399 sums = { "rootfs.ext4.zst" : 400 "69d91eeb04df3d8d172922c6993bb37d4deeb6496def75d8580f6f9de3e431da", 401 "vmlinux" : 402 "09010e51e4b8bcbbd2494786ffb48eca78f228e96e5c5438344b0eac4029dc61" } 403 404 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 405 406 def test_mips64el(self): 407 """ 408 :avocado: tags=arch:mips64el 409 :avocado: tags=machine:malta 410 :avocado: tags=tuxboot:mips64el 411 :avocado: tags=image:vmlinux 412 :avocado: tags=root:sda 413 :avocado: tags=shutdown:nowait 414 """ 415 sums = { "rootfs.ext4.zst" : 416 "fba585368f5915b1498ed081863474b2d7ec4e97cdd46d21bdcb2f9698f83de4", 417 "vmlinux" : 418 "d4e08965e2155c4cccce7c5f34d18fe34c636cda2f2c9844387d614950155266" } 419 420 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 421 422 def test_ppc32(self): 423 """ 424 :avocado: tags=arch:ppc 425 :avocado: tags=machine:ppce500 426 :avocado: tags=cpu:e500mc 427 :avocado: tags=tuxboot:ppc32 428 :avocado: tags=image:uImage 429 :avocado: tags=shutdown:nowait 430 """ 431 sums = { "rootfs.ext4.zst" : 432 "8885b9d999cc24d679542a02e9b6aaf48f718f2050ece6b8347074b6ee41dd09", 433 "uImage" : 434 "1a68f74b860fda022fb12e03c5efece8c2b8b590d96cca37a8481a3ae0b3f81f" } 435 436 self.common_tuxrun(csums=sums, drive="virtio-blk-pci") 437 438 def test_ppc64(self): 439 """ 440 :avocado: tags=arch:ppc64 441 :avocado: tags=machine:pseries 442 :avocado: tags=cpu:POWER10 443 :avocado: tags=endian:big 444 :avocado: tags=console:hvc0 445 :avocado: tags=tuxboot:ppc64 446 :avocado: tags=image:vmlinux 447 :avocado: tags=extradev:driver=spapr-vscsi 448 :avocado: tags=root:sda 449 """ 450 sums = { "rootfs.ext4.zst" : 451 "1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff", 452 "vmlinux" : 453 "f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728" } 454 self.ppc64_common_tuxrun(sums, prefix='tuxrun_ppc64_') 455 456 def test_ppc64le(self): 457 """ 458 :avocado: tags=arch:ppc64 459 :avocado: tags=machine:pseries 460 :avocado: tags=cpu:POWER10 461 :avocado: tags=console:hvc0 462 :avocado: tags=tuxboot:ppc64le 463 :avocado: tags=image:vmlinux 464 :avocado: tags=extradev:driver=spapr-vscsi 465 :avocado: tags=root:sda 466 """ 467 sums = { "rootfs.ext4.zst" : 468 "b442678c93fb8abe1f7d3bfa20556488de6b475c22c8fed363f42cf81a0a3906", 469 "vmlinux" : 470 "979eb61b445a010fb13e2b927126991f8ceef9c590fa2be0996c00e293e80cf2" } 471 self.ppc64_common_tuxrun(sums, prefix='tuxrun_ppc64le_') 472 473 def test_riscv32(self): 474 """ 475 :avocado: tags=arch:riscv32 476 :avocado: tags=machine:virt 477 :avocado: tags=tuxboot:riscv32 478 """ 479 sums = { "Image" : 480 "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5", 481 "fw_jump.elf" : 482 "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985", 483 "rootfs.ext4.zst" : 484 "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" } 485 486 self.common_tuxrun(csums=sums) 487 488 def test_riscv64(self): 489 """ 490 :avocado: tags=arch:riscv64 491 :avocado: tags=machine:virt 492 :avocado: tags=tuxboot:riscv64 493 """ 494 sums = { "Image" : 495 "cd634badc65e52fb63465ec99e309c0de0369f0841b7d9486f9729e119bac25e", 496 "fw_jump.elf" : 497 "6e3373abcab4305fe151b564a4c71110d833c21f2c0a1753b7935459e36aedcf", 498 "rootfs.ext4.zst" : 499 "b18e3a3bdf27be03da0b285e84cb71bf09eca071c3a087b42884b6982ed679eb" } 500 501 self.common_tuxrun(csums=sums) 502 503 def test_s390(self): 504 """ 505 :avocado: tags=arch:s390x 506 :avocado: tags=endian:big 507 :avocado: tags=tuxboot:s390 508 :avocado: tags=image:bzImage 509 :avocado: tags=shutdown:nowait 510 """ 511 sums = { "bzImage" : 512 "0414e98dd1c3dafff8496c9cd9c28a5f8d04553bb5ba37e906a812b48d442ef0", 513 "rootfs.ext4.zst" : 514 "88c37c32276677f873a25ab9ec6247895b8e3e6f8259134de2a616080b8ab3fc" } 515 516 self.common_tuxrun(csums=sums, 517 drive="virtio-blk-ccw", 518 haltmsg="Requesting system halt") 519 520 # Note: some segfaults caused by unaligned userspace access 521 @skipIf(os.getenv('GITLAB_CI'), 'Skipping unstable test on GitLab') 522 def test_sh4(self): 523 """ 524 :avocado: tags=arch:sh4 525 :avocado: tags=machine:r2d 526 :avocado: tags=cpu:sh7785 527 :avocado: tags=tuxboot:sh4 528 :avocado: tags=image:zImage 529 :avocado: tags=root:sda 530 :avocado: tags=console:ttySC1 531 """ 532 sums = { "rootfs.ext4.zst" : 533 "3592a7a3d5a641e8b9821449e77bc43c9904a56c30d45da0694349cfd86743fd", 534 "zImage" : 535 "29d9b2aba604a0f53a5dc3b5d0f2b8e35d497de1129f8ee5139eb6fdf0db692f" } 536 537 # The test is currently too unstable to do much in userspace 538 # so we skip common_tuxrun and do a minimal boot and shutdown. 539 (kernel, disk, dtb) = self.fetch_tuxrun_assets(csums=sums) 540 541 # the console comes on the second serial port 542 self.prepare_run(kernel, disk, 543 "driver=ide-hd,bus=ide.0,unit=0", 544 console_index=1) 545 self.vm.launch() 546 547 self.wait_for_console_pattern("Welcome to TuxTest") 548 time.sleep(0.1) 549 exec_command(self, 'root') 550 time.sleep(0.1) 551 exec_command_and_wait_for_pattern(self, 'halt', 552 "reboot: System halted") 553 554 def test_sparc64(self): 555 """ 556 :avocado: tags=arch:sparc64 557 :avocado: tags=tuxboot:sparc64 558 :avocado: tags=image:vmlinux 559 :avocado: tags=root:sda 560 :avocado: tags=shutdown:nowait 561 """ 562 563 sums = { "rootfs.ext4.zst" : 564 "ad2f1dc436ab51583543d25d2c210cab478645d47078d30d129a66ab0e281d76", 565 "vmlinux" : 566 "e34313e4325ff21deaa3d38a502aa09a373ef62b9bd4d7f8f29388b688225c55" } 567 568 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 569 570 def test_x86_64(self): 571 """ 572 :avocado: tags=arch:x86_64 573 :avocado: tags=machine:q35 574 :avocado: tags=cpu:Nehalem 575 :avocado: tags=tuxboot:x86_64 576 :avocado: tags=image:bzImage 577 :avocado: tags=root:sda 578 :avocado: tags=shutdown:nowait 579 """ 580 sums = { "bzImage" : 581 "2bc7480a669ee9b6b82500a236aba0c54233debe98cb968268fa230f52f03461", 582 "rootfs.ext4.zst" : 583 "b72ac729769b8f51c6dffb221113c9a063c774dbe1d66af30eb593c4e9999b4b" } 584 585 self.common_tuxrun(csums=sums, 586 drive="driver=ide-hd,bus=ide.0,unit=0") 587