aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2019-03-29 07:27:44 +0100
committerGerd Hoffmann <kraxel@redhat.com>2019-03-29 07:27:44 +0100
commit846ed4d696c904bfffbddcc7b8294f7723ceed01 (patch)
tree8995590c5ebc74d782d2ec2799e3eae768780917
parentd1a9049a6dff01c06ef8d6437e6c328c6da9b39c (diff)
downloaddrminfo-846ed4d696c904bfffbddcc7b8294f7723ceed01.tar.gz
tests: add support for custom kernels
-rw-r--r--tests/README25
-rw-r--r--tests/basic.py6
-rw-r--r--tests/drminfo/__init__.py23
-rw-r--r--tests/edid.py5
4 files changed, 45 insertions, 14 deletions
diff --git a/tests/README b/tests/README
index da8182c..3df488a 100644
--- a/tests/README
+++ b/tests/README
@@ -1,7 +1,26 @@
avocado framework tests for qemu display devices
+================================================
-usage:
- export QEMU_BUILD_DIR=/path/to/qemu/build/tree
- avocado run .
+configuration
+-------------
+Uses environment variables.
+
+QEMU_BUILD_DIR (required)
+
+ Should points to a qemu build tree. The python module and qemu
+ binaries are used.
+
+ Pointing to a qemu source tree works too. In that case only the
+ python module is used.
+
+LINUX_BUILD_DIR (optional)
+
+ Points to a linux kernel build tree. Uses that kernel (instead of
+ the host kernel) for testing.
+
+run the tests
+-------------
+
+avocado run *.py
diff --git a/tests/basic.py b/tests/basic.py
index 38b84c3..c9948e9 100644
--- a/tests/basic.py
+++ b/tests/basic.py
@@ -4,7 +4,6 @@
# stdlib
import os
-from shutil import copyfile
# avocado
import avocado
@@ -68,11 +67,8 @@ class BaseDRM(TestDRM):
@avocado.skipUnless(os.path.exists('/usr/bin/edid-decode'), "no edid-decode")
def setUp(self):
TestDRM.setUp(self);
- version = os.uname()[2]
if not os.path.isfile(self.initrd):
- self.create_initrd(self.initrd, version)
- if not os.path.isfile(self.kernel):
- copyfile("/boot/vmlinuz-%s" % version, self.kernel)
+ self.prepare_kernel_initrd()
def test_stdvga(self):
self.run_one_test('VGA')
diff --git a/tests/drminfo/__init__.py b/tests/drminfo/__init__.py
index 2ae0413..5acbd66 100644
--- a/tests/drminfo/__init__.py
+++ b/tests/drminfo/__init__.py
@@ -3,6 +3,8 @@ import os
import sys
import time
import logging
+from glob import glob
+from shutil import copyfile
# avocado
import avocado
@@ -10,6 +12,7 @@ from avocado.utils.process import run
# qemu
QEMU_BUILD_DIR = os.environ.get("QEMU_BUILD_DIR");
+LINUX_BUILD_DIR = os.environ.get("LINUX_BUILD_DIR");
sys.path.append(os.path.join(QEMU_BUILD_DIR, 'python'))
from qemu import QEMUMachine
@@ -35,7 +38,19 @@ class TestDRM(avocado.Test):
return item;
return None
- def create_initrd(self, outfile, kversion):
+ def prepare_kernel_initrd(self):
+ if LINUX_BUILD_DIR is None:
+ kversion = os.uname()[2]
+ copyfile("/boot/vmlinuz-%s" % version, self.kernel)
+ else:
+ cmdline = "make -C %s" % LINUX_BUILD_DIR
+ cmdline += " INSTALL_MOD_PATH=%s" % self.workdir
+ cmdline += " modules_install"
+ run(cmdline)
+ kmoddir = glob("%s/lib/modules/*" % self.workdir)[0]
+ kversion = os.path.basename(kmoddir)
+ copyfile("%s/arch/x86/boot/bzImage" % LINUX_BUILD_DIR, self.kernel)
+
modules = "base systemd bash drm"
drivers = "cirrus bochs-drm qxl virtio-pci virtio-gpu vgem vkms"
files = [
@@ -52,11 +67,13 @@ class TestDRM(avocado.Test):
cmdline = "dracut"
cmdline += " --force"
+ if not kmoddir is None:
+ cmdline += " --kmoddir \"%s\"" % kmoddir
cmdline += " --modules \"%s\"" % modules
cmdline += " --drivers \"%s\"" % drivers
for item in files:
cmdline += " --install %s" % item
- cmdline += " \"%s\" \"%s\"" % (outfile, kversion)
+ cmdline += " \"%s\" \"%s\"" % (self.initrd, kversion)
run(cmdline)
def boot_gfx_vm(self, vga):
@@ -102,6 +119,8 @@ class TestDRM(avocado.Test):
self.fail(errmsg)
if 'Kernel panic - not syncing' in msg:
self.fail("kernel panic")
+ if 'Oops: ' in msg:
+ self.fail("kernel oops")
output += msg
return output
diff --git a/tests/edid.py b/tests/edid.py
index d206871..f1f2530 100644
--- a/tests/edid.py
+++ b/tests/edid.py
@@ -39,11 +39,8 @@ class EDID(TestDRM):
@avocado.skipUnless(os.path.exists('/usr/bin/edid-decode'), "no edid-decode")
def setUp(self):
TestDRM.setUp(self);
- version = os.uname()[2]
if not os.path.isfile(self.initrd):
- self.create_initrd(self.initrd, version)
- if not os.path.isfile(self.kernel):
- copyfile("/boot/vmlinuz-%s" % version, self.kernel)
+ self.prepare_kernel_initrd()
def test_stdvga(self):
self.run_one_test('VGA,edid=on')