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.require_netdev('user') 188 self.vm.add_args('-netdev', 'user,id=vnet,hostfwd=:127.0.0.1:0-:22', 189 '-device', 'virtio-net,netdev=vnet') 190 self.vm.add_args('-netdev', '{"type":"user","id":"hostnet0"}', 191 '-device', '{"driver":"virtio-net-pci","netdev":' 192 '"hostnet0","id":"net0","mac":"52:54:00:4c:e3:86",' 193 '"bus":"pci.0","addr":"0x9"}') 194 self.vm.add_args('-device', '{"driver":"qemu-xhci","p2":15,"p3":15,' 195 '"id":"usb","bus":"pci.0","addr":"0x2"}') 196 self.vm.add_args('-device', '{"driver":"virtio-scsi-pci","id":"scsi0"' 197 ',"bus":"pci.0","addr":"0x3"}') 198 self.vm.add_args('-device', '{"driver":"virtio-serial-pci","id":' 199 '"virtio-serial0","bus":"pci.0","addr":"0x4"}') 200 self.vm.add_args('-device', '{"driver":"scsi-cd","bus":"scsi0.0"' 201 ',"channel":0,"scsi-id":0,"lun":0,"device_id":' 202 '"drive-scsi0-0-0-0","id":"scsi0-0-0-0"}') 203 self.vm.add_args('-device', '{"driver":"virtio-balloon-pci",' 204 '"id":"balloon0","bus":"pci.0","addr":"0x6"}') 205 self.vm.add_args('-audiodev', '{"id":"audio1","driver":"none"}') 206 self.vm.add_args('-device', '{"driver":"usb-tablet","id":"input0"' 207 ',"bus":"usb.0","port":"1"}') 208 self.vm.add_args('-device', '{"driver":"usb-kbd","id":"input1"' 209 ',"bus":"usb.0","port":"2"}') 210 self.vm.add_args('-device', '{"driver":"VGA","id":"video0",' 211 '"vgamem_mb":16,"bus":"pci.0","addr":"0x7"}') 212 self.vm.add_args('-object', '{"qom-type":"rng-random","id":"objrng0"' 213 ',"filename":"/dev/urandom"}', 214 '-device', '{"driver":"virtio-rng-pci","rng":"objrng0"' 215 ',"id":"rng0","bus":"pci.0","addr":"0x8"}') 216 self.vm.add_args('-object', '{"qom-type":"cryptodev-backend-builtin",' 217 '"id":"objcrypto0","queues":1}', 218 '-device', '{"driver":"virtio-crypto-pci",' 219 '"cryptodev":"objcrypto0","id":"crypto0","bus"' 220 ':"pci.0","addr":"0xa"}') 221 self.vm.add_args('-device', '{"driver":"spapr-pci-host-bridge"' 222 ',"index":1,"id":"pci.1"}') 223 self.vm.add_args('-device', '{"driver":"spapr-vscsi","id":"scsi1"' 224 ',"reg":12288}') 225 self.vm.add_args('-m', '2G,slots=32,maxmem=4G', 226 '-object', 'memory-backend-ram,id=ram1,size=1G', 227 '-device', 'pc-dimm,id=dimm1,memdev=ram1') 228 229 # Create a temporary qcow2 and launch the test-case 230 with tempfile.NamedTemporaryFile(prefix=prefix, 231 suffix='.qcow2') as qcow2: 232 process.run(self.qemu_img + ' create -f qcow2 ' + 233 qcow2.name + ' 1G') 234 235 self.vm.add_args('-drive', 'file=' + qcow2.name + 236 ',format=qcow2,if=none,id=' 237 'drive-virtio-disk1', 238 '-device', 'virtio-blk-pci,scsi=off,bus=pci.0,' 239 'addr=0xb,drive=drive-virtio-disk1,id=virtio-disk1' 240 ',bootindex=2') 241 self.common_tuxrun(csums=sums, drive="scsi-hd") 242 243 # 244 # The tests themselves. The configuration is derived from how 245 # tuxrun invokes qemu (with minor tweaks like using -blockdev 246 # consistently). The tuxrun equivalent is something like: 247 # 248 # tuxrun --device qemu-{ARCH} \ 249 # --kernel https://storage.tuxboot.com/{TUXBOOT}/{IMAGE} 250 # 251 252 def test_arm64(self): 253 """ 254 :avocado: tags=arch:aarch64 255 :avocado: tags=cpu:cortex-a57 256 :avocado: tags=machine:virt 257 :avocado: tags=tuxboot:arm64 258 :avocado: tags=console:ttyAMA0 259 :avocado: tags=shutdown:nowait 260 """ 261 sums = {"Image" : 262 "ce95a7101a5fecebe0fe630deee6bd97b32ba41bc8754090e9ad8961ea8674c7", 263 "rootfs.ext4.zst" : 264 "bbd5ed4b9c7d3f4ca19ba71a323a843c6b585e880115df3b7765769dbd9dd061"} 265 self.common_tuxrun(csums=sums) 266 267 def test_arm64be(self): 268 """ 269 :avocado: tags=arch:aarch64 270 :avocado: tags=cpu:cortex-a57 271 :avocado: tags=endian:big 272 :avocado: tags=machine:virt 273 :avocado: tags=tuxboot:arm64be 274 :avocado: tags=console:ttyAMA0 275 :avocado: tags=shutdown:nowait 276 """ 277 sums = { "Image" : 278 "e0df4425eb2cd9ea9a283e808037f805641c65d8fcecc8f6407d8f4f339561b4", 279 "rootfs.ext4.zst" : 280 "e6ffd8813c8a335bc15728f2835f90539c84be7f8f5f691a8b01451b47fb4bd7"} 281 self.common_tuxrun(csums=sums) 282 283 def test_armv5(self): 284 """ 285 :avocado: tags=arch:arm 286 :avocado: tags=cpu:arm926 287 :avocado: tags=machine:versatilepb 288 :avocado: tags=tuxboot:armv5 289 :avocado: tags=image:zImage 290 :avocado: tags=console:ttyAMA0 291 :avocado: tags=shutdown:nowait 292 """ 293 sums = { "rootfs.ext4.zst" : 294 "17177afa74e7294da0642861f08c88ca3c836764299a54bf6d1ce276cb9712a5", 295 "versatile-pb.dtb" : 296 "0bc0c0b0858cefd3c32b385c0d66d97142ded29472a496f4f490e42fc7615b25", 297 "zImage" : 298 "c95af2f27647c12265d75e9df44c22ff5228c59855f54aaa70f41ec2842e3a4d" } 299 300 self.common_tuxrun(csums=sums, 301 drive="virtio-blk-pci", 302 dt="versatile-pb.dtb") 303 304 def test_armv7(self): 305 """ 306 :avocado: tags=arch:arm 307 :avocado: tags=cpu:cortex-a15 308 :avocado: tags=machine:virt 309 :avocado: tags=tuxboot:armv7 310 :avocado: tags=image:zImage 311 :avocado: tags=console:ttyAMA0 312 :avocado: tags=shutdown:nowait 313 """ 314 sums = { "rootfs.ext4.zst" : 315 "ab1fbbeaddda1ffdd45c9405a28cd5370c20f23a7cbc809cc90dc9f243a8eb5a", 316 "zImage" : 317 "4c7a22e9f15875bec06bd2a29d822496571eb297d4f22694099ffcdb19077572" } 318 319 self.common_tuxrun(csums=sums) 320 321 def test_armv7be(self): 322 """ 323 :avocado: tags=arch:arm 324 :avocado: tags=cpu:cortex-a15 325 :avocado: tags=endian:big 326 :avocado: tags=machine:virt 327 :avocado: tags=tuxboot:armv7be 328 :avocado: tags=image:zImage 329 :avocado: tags=console:ttyAMA0 330 :avocado: tags=shutdown:nowait 331 """ 332 sums = {"rootfs.ext4.zst" : 333 "42ed46dd2d59986206c5b1f6cf35eab58fe3fd20c96b41aaa16b32f3f90a9835", 334 "zImage" : 335 "7facc62082b57af12015b08f7fdbaf2f123ba07a478367853ae12b219afc9f2f" } 336 337 self.common_tuxrun(csums=sums) 338 339 def test_i386(self): 340 """ 341 :avocado: tags=arch:i386 342 :avocado: tags=cpu:coreduo 343 :avocado: tags=machine:q35 344 :avocado: tags=tuxboot:i386 345 :avocado: tags=image:bzImage 346 :avocado: tags=shutdown:nowait 347 """ 348 sums = {"bzImage" : 349 "a3e5b32a354729e65910f5a1ffcda7c14a6c12a55e8213fb86e277f1b76ed956", 350 "rootfs.ext4.zst" : 351 "f15e66b2bf673a210ec2a4b2e744a80530b36289e04f5388aab812b97f69754a" } 352 353 self.common_tuxrun(csums=sums, drive="virtio-blk-pci") 354 355 @skip('https://gitlab.com/qemu-project/qemu/-/issues/1884') 356 def test_mips32(self): 357 """ 358 :avocado: tags=arch:mips 359 :avocado: tags=machine:malta 360 :avocado: tags=cpu:mips32r6-generic 361 :avocado: tags=endian:big 362 :avocado: tags=tuxboot:mips32 363 :avocado: tags=image:vmlinux 364 :avocado: tags=root:sda 365 :avocado: tags=shutdown:nowait 366 """ 367 sums = { "rootfs.ext4.zst" : 368 "fc3da0b4c2f38d74c6d705123bb0f633c76ed953128f9d0859378c328a6d11a0", 369 "vmlinux" : 370 "bfd2172f8b17fb32970ca0c8c58f59c5a4ca38aa5855d920be3a69b5d16e52f0" } 371 372 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 373 374 @skip('https://gitlab.com/qemu-project/qemu/-/issues/1884') 375 def test_mips32el(self): 376 """ 377 :avocado: tags=arch:mipsel 378 :avocado: tags=machine:malta 379 :avocado: tags=cpu:mips32r6-generic 380 :avocado: tags=tuxboot:mips32el 381 :avocado: tags=image:vmlinux 382 :avocado: tags=root:sda 383 :avocado: tags=shutdown:nowait 384 """ 385 sums = { "rootfs.ext4.zst" : 386 "e799768e289fd69209c21f4dacffa11baea7543d5db101e8ce27e3bc2c41d90e", 387 "vmlinux" : 388 "8573867c68a8443db8de6d08bb33fb291c189ca2ca671471d3973a3e712096a3" } 389 390 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 391 392 @skip('https://gitlab.com/qemu-project/qemu/-/issues/1884') 393 def test_mips64(self): 394 """ 395 :avocado: tags=arch:mips64 396 :avocado: tags=machine:malta 397 :avocado: tags=tuxboot:mips64 398 :avocado: tags=endian:big 399 :avocado: tags=image:vmlinux 400 :avocado: tags=root:sda 401 :avocado: tags=shutdown:nowait 402 """ 403 sums = { "rootfs.ext4.zst" : 404 "69d91eeb04df3d8d172922c6993bb37d4deeb6496def75d8580f6f9de3e431da", 405 "vmlinux" : 406 "09010e51e4b8bcbbd2494786ffb48eca78f228e96e5c5438344b0eac4029dc61" } 407 408 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 409 410 @skip('https://gitlab.com/qemu-project/qemu/-/issues/1884') 411 def test_mips64el(self): 412 """ 413 :avocado: tags=arch:mips64el 414 :avocado: tags=machine:malta 415 :avocado: tags=tuxboot:mips64el 416 :avocado: tags=image:vmlinux 417 :avocado: tags=root:sda 418 :avocado: tags=shutdown:nowait 419 """ 420 sums = { "rootfs.ext4.zst" : 421 "fba585368f5915b1498ed081863474b2d7ec4e97cdd46d21bdcb2f9698f83de4", 422 "vmlinux" : 423 "d4e08965e2155c4cccce7c5f34d18fe34c636cda2f2c9844387d614950155266" } 424 425 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 426 427 def test_ppc32(self): 428 """ 429 :avocado: tags=arch:ppc 430 :avocado: tags=machine:ppce500 431 :avocado: tags=cpu:e500mc 432 :avocado: tags=tuxboot:ppc32 433 :avocado: tags=image:uImage 434 :avocado: tags=shutdown:nowait 435 """ 436 sums = { "rootfs.ext4.zst" : 437 "8885b9d999cc24d679542a02e9b6aaf48f718f2050ece6b8347074b6ee41dd09", 438 "uImage" : 439 "1a68f74b860fda022fb12e03c5efece8c2b8b590d96cca37a8481a3ae0b3f81f" } 440 441 self.common_tuxrun(csums=sums, drive="virtio-blk-pci") 442 443 def test_ppc64(self): 444 """ 445 :avocado: tags=arch:ppc64 446 :avocado: tags=machine:pseries 447 :avocado: tags=cpu:POWER10 448 :avocado: tags=endian:big 449 :avocado: tags=console:hvc0 450 :avocado: tags=tuxboot:ppc64 451 :avocado: tags=image:vmlinux 452 :avocado: tags=extradev:driver=spapr-vscsi 453 :avocado: tags=root:sda 454 """ 455 sums = { "rootfs.ext4.zst" : 456 "1d953e81a4379e537fc8e41e05a0a59d9b453eef97aa03d47866c6c45b00bdff", 457 "vmlinux" : 458 "f22a9b9e924174a4c199f4c7e5d91a2339fcfe51c6eafd0907dc3e09b64ab728" } 459 self.ppc64_common_tuxrun(sums, prefix='tuxrun_ppc64_') 460 461 def test_ppc64le(self): 462 """ 463 :avocado: tags=arch:ppc64 464 :avocado: tags=machine:pseries 465 :avocado: tags=cpu:POWER10 466 :avocado: tags=console:hvc0 467 :avocado: tags=tuxboot:ppc64le 468 :avocado: tags=image:vmlinux 469 :avocado: tags=extradev:driver=spapr-vscsi 470 :avocado: tags=root:sda 471 """ 472 sums = { "rootfs.ext4.zst" : 473 "b442678c93fb8abe1f7d3bfa20556488de6b475c22c8fed363f42cf81a0a3906", 474 "vmlinux" : 475 "979eb61b445a010fb13e2b927126991f8ceef9c590fa2be0996c00e293e80cf2" } 476 self.ppc64_common_tuxrun(sums, prefix='tuxrun_ppc64le_') 477 478 def test_riscv32(self): 479 """ 480 :avocado: tags=arch:riscv32 481 :avocado: tags=machine:virt 482 :avocado: tags=tuxboot:riscv32 483 """ 484 sums = { "Image" : 485 "89599407d7334de629a40e7ad6503c73670359eb5f5ae9d686353a3d6deccbd5", 486 "fw_jump.elf" : 487 "f2ef28a0b77826f79d085d3e4aa686f1159b315eff9099a37046b18936676985", 488 "rootfs.ext4.zst" : 489 "7168d296d0283238ea73cd5a775b3dd608e55e04c7b92b76ecce31bb13108cba" } 490 491 self.common_tuxrun(csums=sums) 492 493 def test_riscv64(self): 494 """ 495 :avocado: tags=arch:riscv64 496 :avocado: tags=machine:virt 497 :avocado: tags=tuxboot:riscv64 498 """ 499 sums = { "Image" : 500 "cd634badc65e52fb63465ec99e309c0de0369f0841b7d9486f9729e119bac25e", 501 "fw_jump.elf" : 502 "6e3373abcab4305fe151b564a4c71110d833c21f2c0a1753b7935459e36aedcf", 503 "rootfs.ext4.zst" : 504 "b18e3a3bdf27be03da0b285e84cb71bf09eca071c3a087b42884b6982ed679eb" } 505 506 self.common_tuxrun(csums=sums) 507 508 def test_s390(self): 509 """ 510 :avocado: tags=arch:s390x 511 :avocado: tags=endian:big 512 :avocado: tags=tuxboot:s390 513 :avocado: tags=image:bzImage 514 :avocado: tags=shutdown:nowait 515 """ 516 sums = { "bzImage" : 517 "0414e98dd1c3dafff8496c9cd9c28a5f8d04553bb5ba37e906a812b48d442ef0", 518 "rootfs.ext4.zst" : 519 "88c37c32276677f873a25ab9ec6247895b8e3e6f8259134de2a616080b8ab3fc" } 520 521 self.common_tuxrun(csums=sums, 522 drive="virtio-blk-ccw", 523 haltmsg="Requesting system halt") 524 525 # Note: some segfaults caused by unaligned userspace access 526 @skipIf(os.getenv('GITLAB_CI'), 'Skipping unstable test on GitLab') 527 def test_sh4(self): 528 """ 529 :avocado: tags=arch:sh4 530 :avocado: tags=machine:r2d 531 :avocado: tags=cpu:sh7785 532 :avocado: tags=tuxboot:sh4 533 :avocado: tags=image:zImage 534 :avocado: tags=root:sda 535 :avocado: tags=console:ttySC1 536 """ 537 sums = { "rootfs.ext4.zst" : 538 "3592a7a3d5a641e8b9821449e77bc43c9904a56c30d45da0694349cfd86743fd", 539 "zImage" : 540 "29d9b2aba604a0f53a5dc3b5d0f2b8e35d497de1129f8ee5139eb6fdf0db692f" } 541 542 # The test is currently too unstable to do much in userspace 543 # so we skip common_tuxrun and do a minimal boot and shutdown. 544 (kernel, disk, dtb) = self.fetch_tuxrun_assets(csums=sums) 545 546 # the console comes on the second serial port 547 self.prepare_run(kernel, disk, 548 "driver=ide-hd,bus=ide.0,unit=0", 549 console_index=1) 550 self.vm.launch() 551 552 self.wait_for_console_pattern("Welcome to TuxTest") 553 time.sleep(0.1) 554 exec_command(self, 'root') 555 time.sleep(0.1) 556 exec_command_and_wait_for_pattern(self, 'halt', 557 "reboot: System halted") 558 559 def test_sparc64(self): 560 """ 561 :avocado: tags=arch:sparc64 562 :avocado: tags=tuxboot:sparc64 563 :avocado: tags=image:vmlinux 564 :avocado: tags=root:sda 565 :avocado: tags=shutdown:nowait 566 """ 567 568 sums = { "rootfs.ext4.zst" : 569 "ad2f1dc436ab51583543d25d2c210cab478645d47078d30d129a66ab0e281d76", 570 "vmlinux" : 571 "e34313e4325ff21deaa3d38a502aa09a373ef62b9bd4d7f8f29388b688225c55" } 572 573 self.common_tuxrun(csums=sums, drive="driver=ide-hd,bus=ide.0,unit=0") 574 575 def test_x86_64(self): 576 """ 577 :avocado: tags=arch:x86_64 578 :avocado: tags=machine:q35 579 :avocado: tags=cpu:Nehalem 580 :avocado: tags=tuxboot:x86_64 581 :avocado: tags=image:bzImage 582 :avocado: tags=root:sda 583 :avocado: tags=shutdown:nowait 584 """ 585 sums = { "bzImage" : 586 "2bc7480a669ee9b6b82500a236aba0c54233debe98cb968268fa230f52f03461", 587 "rootfs.ext4.zst" : 588 "b72ac729769b8f51c6dffb221113c9a063c774dbe1d66af30eb593c4e9999b4b" } 589 590 self.common_tuxrun(csums=sums, 591 drive="driver=ide-hd,bus=ide.0,unit=0") 592