@ -9,6 +9,8 @@
# later. See the COPYING file in the top-level directory.
import os
import lzma
import shutil
import logging
import time
@ -19,7 +21,7 @@ from avocado.utils import archive
from avocado . utils import process
from boot_linux_console import LinuxKernelTest
class ReplayKernel ( LinuxKernelTest ) :
class ReplayKernelBase ( LinuxKernelTest ) :
"""
Boots a Linux kernel in record mode and checks that the console
is operational and the kernel command line is properly passed
@ -74,6 +76,7 @@ class ReplayKernel(LinuxKernelTest):
logger = logging . getLogger ( ' replay ' )
logger . info ( ' replay overhead {:.2%} ' . format ( t2 / t1 - 1 ) )
class ReplayKernelNormal ( ReplayKernelBase ) :
@skipIf ( os . getenv ( ' GITLAB_CI ' ) , ' Running on GitLab ' )
def test_x86_64_pc ( self ) :
"""
@ -91,6 +94,51 @@ class ReplayKernel(LinuxKernelTest):
self . run_rr ( kernel_path , kernel_command_line , console_pattern , shift = 5 )
def test_mips_malta ( self ) :
"""
: avocado : tags = arch : mips
: avocado : tags = machine : malta
: avocado : tags = endian : big
"""
deb_url = ( ' http://snapshot.debian.org/archive/debian/ '
' 20130217T032700Z/pool/main/l/linux-2.6/ '
' linux-image-2.6.32-5-4kc-malta_2.6.32-48_mips.deb ' )
deb_hash = ' a8cfc28ad8f45f54811fc6cf74fc43ffcfe0ba04 '
deb_path = self . fetch_asset ( deb_url , asset_hash = deb_hash )
kernel_path = self . extract_from_deb ( deb_path ,
' /boot/vmlinux-2.6.32-5-4kc-malta ' )
kernel_command_line = self . KERNEL_COMMON_COMMAND_LINE + ' console=ttyS0 '
console_pattern = ' Kernel command line: %s ' % kernel_command_line
self . run_rr ( kernel_path , kernel_command_line , console_pattern , shift = 5 )
def test_mips64el_malta ( self ) :
"""
This test requires the ar tool to extract " data.tar.gz " from
the Debian package .
The kernel can be rebuilt using this Debian kernel source [ 1 ] and
following the instructions on [ 2 ] .
[ 1 ] http : / / snapshot . debian . org / package / linux - 2.6 / 2.6 .32 - 48 /
#linux-source-2.6.32_2.6.32-48
[ 2 ] https : / / kernel - team . pages . debian . net / kernel - handbook /
ch - common - tasks . html #s-common-official
: avocado : tags = arch : mips64el
: avocado : tags = machine : malta
"""
deb_url = ( ' http://snapshot.debian.org/archive/debian/ '
' 20130217T032700Z/pool/main/l/linux-2.6/ '
' linux-image-2.6.32-5-5kc-malta_2.6.32-48_mipsel.deb ' )
deb_hash = ' 1aaec92083bf22fda31e0d27fa8d9a388e5fc3d5 '
deb_path = self . fetch_asset ( deb_url , asset_hash = deb_hash )
kernel_path = self . extract_from_deb ( deb_path ,
' /boot/vmlinux-2.6.32-5-5kc-malta ' )
kernel_command_line = self . KERNEL_COMMON_COMMAND_LINE + ' console=ttyS0 '
console_pattern = ' Kernel command line: %s ' % kernel_command_line
self . run_rr ( kernel_path , kernel_command_line , console_pattern , shift = 5 )
def test_aarch64_virt ( self ) :
"""
: avocado : tags = arch : aarch64
@ -302,3 +350,120 @@ class ReplayKernel(LinuxKernelTest):
file_path = self . fetch_asset ( tar_url , asset_hash = tar_hash )
self . do_test_advcal_2018 ( file_path , ' santas-sleigh-ride.elf ' ,
args = ( ' -cpu ' , ' dc233c ' ) )
@skipUnless ( os . getenv ( ' AVOCADO_TIMEOUT_EXPECTED ' ) , ' Test might timeout ' )
class ReplayKernelSlow ( ReplayKernelBase ) :
# Override the timeout, because this kernel includes an inner
# loop which is executed with TB recompilings during replay,
# making it very slow.
timeout = 180
def test_mips_malta_cpio ( self ) :
"""
: avocado : tags = arch : mips
: avocado : tags = machine : malta
: avocado : tags = endian : big
: avocado : tags = slowness : high
"""
deb_url = ( ' http://snapshot.debian.org/archive/debian/ '
' 20160601T041800Z/pool/main/l/linux/ '
' linux-image-4.5.0-2-4kc-malta_4.5.5-1_mips.deb ' )
deb_hash = ' a3c84f3e88b54e06107d65a410d1d1e8e0f340f8 '
deb_path = self . fetch_asset ( deb_url , asset_hash = deb_hash )
kernel_path = self . extract_from_deb ( deb_path ,
' /boot/vmlinux-4.5.0-2-4kc-malta ' )
initrd_url = ( ' https://github.com/groeck/linux-build-test/raw/ '
' 8584a59ed9e5eb5ee7ca91f6d74bbb06619205b8/rootfs/ '
' mips/rootfs.cpio.gz ' )
initrd_hash = ' bf806e17009360a866bf537f6de66590de349a99 '
initrd_path_gz = self . fetch_asset ( initrd_url , asset_hash = initrd_hash )
initrd_path = self . workdir + " rootfs.cpio "
archive . gzip_uncompress ( initrd_path_gz , initrd_path )
kernel_command_line = ( self . KERNEL_COMMON_COMMAND_LINE +
' console=ttyS0 console=tty '
' rdinit=/sbin/init noreboot ' )
console_pattern = ' Boot successful. '
self . run_rr ( kernel_path , kernel_command_line , console_pattern , shift = 5 ,
args = ( ' -initrd ' , initrd_path ) )
@skipUnless ( os . getenv ( ' AVOCADO_ALLOW_UNTRUSTED_CODE ' ) , ' untrusted code ' )
def test_mips64el_malta_5KEc_cpio ( self ) :
"""
: avocado : tags = arch : mips64el
: avocado : tags = machine : malta
: avocado : tags = endian : little
: avocado : tags = slowness : high
"""
kernel_url = ( ' https://github.com/philmd/qemu-testing-blob/ '
' raw/9ad2df38/mips/malta/mips64el/ '
' vmlinux-3.19.3.mtoman.20150408 ' )
kernel_hash = ' 00d1d268fb9f7d8beda1de6bebcc46e884d71754 '
kernel_path = self . fetch_asset ( kernel_url , asset_hash = kernel_hash )
initrd_url = ( ' https://github.com/groeck/linux-build-test/ '
' raw/8584a59e/rootfs/ '
' mipsel64/rootfs.mipsel64r1.cpio.gz ' )
initrd_hash = ' 1dbb8a396e916847325284dbe2151167 '
initrd_path_gz = self . fetch_asset ( initrd_url , algorithm = ' md5 ' ,
asset_hash = initrd_hash )
initrd_path = self . workdir + " rootfs.cpio "
archive . gzip_uncompress ( initrd_path_gz , initrd_path )
kernel_command_line = ( self . KERNEL_COMMON_COMMAND_LINE +
' console=ttyS0 console=tty '
' rdinit=/sbin/init noreboot ' )
console_pattern = ' Boot successful. '
self . run_rr ( kernel_path , kernel_command_line , console_pattern , shift = 5 ,
args = ( ' -initrd ' , initrd_path , ' -cpu ' , ' 5KEc ' ) )
def do_test_mips_malta32el_nanomips ( self , kernel_path_xz ) :
kernel_path = self . workdir + " kernel "
with lzma . open ( kernel_path_xz , ' rb ' ) as f_in :
with open ( kernel_path , ' wb ' ) as f_out :
shutil . copyfileobj ( f_in , f_out )
kernel_command_line = ( self . KERNEL_COMMON_COMMAND_LINE +
' mem=256m@@0x0 '
' console=ttyS0 ' )
console_pattern = ' Kernel command line: %s ' % kernel_command_line
self . run_rr ( kernel_path , kernel_command_line , console_pattern , shift = 5 ,
args = ( ' -cpu ' , ' I7200 ' ) )
def test_mips_malta32el_nanomips_4k ( self ) :
"""
: avocado : tags = arch : mipsel
: avocado : tags = machine : malta
: avocado : tags = endian : little
"""
kernel_url = ( ' https://mipsdistros.mips.com/LinuxDistro/nanomips/ '
' kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/ '
' generic_nano32r6el_page4k.xz ' )
kernel_hash = ' 477456aafd2a0f1ddc9482727f20fe9575565dd6 '
kernel_path_xz = self . fetch_asset ( kernel_url , asset_hash = kernel_hash )
self . do_test_mips_malta32el_nanomips ( kernel_path_xz )
def test_mips_malta32el_nanomips_16k_up ( self ) :
"""
: avocado : tags = arch : mipsel
: avocado : tags = machine : malta
: avocado : tags = endian : little
"""
kernel_url = ( ' https://mipsdistros.mips.com/LinuxDistro/nanomips/ '
' kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/ '
' generic_nano32r6el_page16k_up.xz ' )
kernel_hash = ' e882868f944c71c816e832e2303b7874d044a7bc '
kernel_path_xz = self . fetch_asset ( kernel_url , asset_hash = kernel_hash )
self . do_test_mips_malta32el_nanomips ( kernel_path_xz )
def test_mips_malta32el_nanomips_64k_dbg ( self ) :
"""
: avocado : tags = arch : mipsel
: avocado : tags = machine : malta
: avocado : tags = endian : little
"""
kernel_url = ( ' https://mipsdistros.mips.com/LinuxDistro/nanomips/ '
' kernels/v4.15.18-432-gb2eb9a8b07a1-20180627102142/ '
' generic_nano32r6el_page64k_dbg.xz ' )
kernel_hash = ' 18d1c68f2e23429e266ca39ba5349ccd0aeb7180 '
kernel_path_xz = self . fetch_asset ( kernel_url , asset_hash = kernel_hash )
self . do_test_mips_malta32el_nanomips ( kernel_path_xz )