aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorGerd Hoffmann <kraxel@redhat.com>2019-03-28 16:19:59 +0100
committerGerd Hoffmann <kraxel@redhat.com>2019-03-28 16:19:59 +0100
commit6d4d67e773911fd0b1902bc837f46aace0e06151 (patch)
treec6b04029c6472d28c179e6eba57ec4ce6b272760
parent86825701fc869bc15d4b2aa4e0161c83a180246b (diff)
downloaddrminfo-6d4d67e773911fd0b1902bc837f46aace0e06151.tar.gz
refactor, add edid
-rw-r--r--tests/basic.py113
-rw-r--r--tests/drminfo/__init__.py139
-rw-r--r--tests/edid.py52
3 files changed, 184 insertions, 120 deletions
diff --git a/tests/basic.py b/tests/basic.py
index 4666734..38b84c3 100644
--- a/tests/basic.py
+++ b/tests/basic.py
@@ -4,13 +4,10 @@
# stdlib
import os
-import time
-import logging
-import tempfile
+from shutil import copyfile
# avocado
import avocado
-from avocado.utils.process import run
# my bits
from drminfo import TestDRM
@@ -22,99 +19,16 @@ class BaseDRM(TestDRM):
:avocado: tags=x86_64
"""
- def create_initrd(self, outfile, kversion):
- modules = "base systemd bash drm"
- drivers = "cirrus bochs-drm qxl virtio-pci virtio-gpu vgem vkms"
- files = [
- "/usr/bin/drminfo",
- "/usr/bin/drmtest",
- "/usr/bin/fbinfo",
- "/usr/bin/fbtest",
- "/usr/bin/virtiotest",
- "/usr/bin/prime",
- "/usr/share/fontconfig/conf.avail/59-liberation-mono.conf",
- "/usr/share/fonts/liberation/LiberationMono-Regular.ttf",
- ]
-
- cmdline = "dracut"
- cmdline += " --force"
- cmdline += " --modules \"%s\"" % modules
- cmdline += " --drivers \"%s\"" % drivers
- for item in files:
- cmdline += " --install %s" % item
- cmdline += " \"%s\" \"%s\"" % (outfile, kversion)
- run(cmdline)
-
- def console_wait(self, good, bad = None, errmsg = None):
- output = ""
- counter = 1
- while True:
- msg = self.rconsole.readline()
- self.lconsole.debug("%3d: %s" % (counter, msg.rstrip()))
- counter += 1
- if good in msg:
- break
- if not bad is None:
- if bad in msg:
- if errmsg is None:
- errmsg = "unexpected output (%s)" % bad
- self.fail(errmsg)
- if 'Kernel panic - not syncing' in msg:
- self.fail("kernel panic")
- output += msg
- return output
-
- def console_run(self, command):
- self.lcommand.debug(command)
- self.wconsole.write(command)
- self.wconsole.write('\n')
- self.wconsole.flush()
- self.rconsole.readline() # newline
- self.rconsole.readline() # command line echo
-
- def screen_dump(self, device, name):
- if device == 'qxl-vga':
- self.vm.qmp('screendump', filename = '/dev/null');
- time.sleep(1)
- outfile = '%s/%s-%s.ppm' % (self.outputdir, name, device)
- self.vm.qmp('screendump', filename = outfile);
- self.wconsole.write('\n')
- self.wconsole.flush()
-
- def write_text(self, device, name, content):
- outfile = '%s/%s-%s.txt' % (self.outputdir, name, device)
- f = open(outfile, "w")
- f.write(content)
- f.close()
-
- def run_one_test(self, device):
- version = os.uname()[2]
- kernel = "/boot/vmlinuz-%s" % version
- append = "console=ttyS0"
-
- self.vm.set_machine('pc')
- self.vm.set_console()
- self.vm.add_args('-enable-kvm')
- self.vm.add_args('-m', '1G')
- self.vm.add_args('-vga', 'none')
- self.vm.add_args('-device', device)
- self.vm.add_args('-kernel', kernel)
- self.vm.add_args('-initrd', self.dracut.name)
- self.vm.add_args('-append', append)
- self.vm.launch()
-
- self.rconsole = self.vm.console_socket.makefile('r')
- self.wconsole = self.vm.console_socket.makefile('w')
- self.lconsole = logging.getLogger('console')
- self.lcommand = logging.getLogger('command')
+ def run_one_test(self, vga):
+ self.boot_gfx_vm(vga);
self.console_wait('Entering emergency mode')
self.console_run('PS1=---\\\\u---\\\\n')
self.console_wait('---root---')
self.console_run('drminfo -a')
txt = self.console_wait('---root---')
- self.write_text(device, "drminfo", txt)
+ self.write_text(vga, "drminfo", txt)
self.console_run('drminfo -F')
formats = self.console_wait('---root---')
@@ -124,38 +38,41 @@ class BaseDRM(TestDRM):
self.console_run('drmtest -a -s 10 -m 640x480 -f %s' % format)
self.console_wait('---ok---', '---root---',
'drmtest error (%s)' % format)
- self.screen_dump(device, "drm-%s" % format)
+ self.screen_dump(vga, "drm-%s" % format)
self.console_wait('---root---')
fcount += 1;
if fcount == 0:
self.fail("no drm formats");
- if device == 'virtio-vga':
+ if vga == 'virtio-vga':
self.console_run('virtiotest -i')
self.console_wait('---root---')
self.console_run('virtiotest -a -s 10')
self.console_wait('---ok---', '---root---', 'virtiotest error')
- self.screen_dump(device, 'virtio')
+ self.screen_dump(vga, 'virtio')
self.console_wait('---root---')
self.console_run('fbinfo')
txt = self.console_wait('---root---')
- self.write_text(device, "fbinfo", txt)
+ self.write_text(vga, "fbinfo", txt)
self.console_run('fbtest -a -s 10')
self.console_wait('---ok---', '---root---', 'fbtest error')
- self.screen_dump(device, 'fbdev')
+ self.screen_dump(vga, 'fbdev')
self.console_wait('---root---')
@avocado.skipUnless(os.path.exists('/usr/bin/dracut'), "no dracut")
@avocado.skipUnless(os.path.exists('/usr/bin/drminfo'), "no drminfo")
+ @avocado.skipUnless(os.path.exists('/usr/bin/edid-decode'), "no edid-decode")
def setUp(self):
- version = os.uname()[2]
- self.dracut = tempfile.NamedTemporaryFile()
- self.create_initrd(self.dracut.name, version)
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)
def test_stdvga(self):
self.run_one_test('VGA')
diff --git a/tests/drminfo/__init__.py b/tests/drminfo/__init__.py
index 629afd5..2ae0413 100644
--- a/tests/drminfo/__init__.py
+++ b/tests/drminfo/__init__.py
@@ -1,35 +1,130 @@
+# stdlib
import os
import sys
+import time
+import logging
+
+# avocado
import avocado
+from avocado.utils.process import run
+# qemu
QEMU_BUILD_DIR = os.environ.get("QEMU_BUILD_DIR");
sys.path.append(os.path.join(QEMU_BUILD_DIR, 'python'))
from qemu import QEMUMachine
-def find_qemu_binary():
- """
- Picks the path of a QEMU binary, starting either in the current working
- directory or in the source tree root directory.
- """
- arch = os.uname()[4]
- qemu_build = os.path.join(QEMU_BUILD_DIR,
- "%s-softmmu" % arch,
- "qemu-system-%s" % arch)
- qemu_path = [
- qemu_build,
- "/usr/local/bin/qemu-system-%s" % arch,
- "/usr/bin/qemu-system-%s" % arch,
- "/usr/bin/qemu-kvm",
- "/usr/libexec/qemu-kvm",
- ]
- for item in qemu_path:
- if os.path.isfile(item):
- return item;
- return None
-
class TestDRM(avocado.Test):
+ def find_qemu_binary(self):
+ """
+ Picks the path of a QEMU binary, starting either in the current working
+ directory or in the source tree root directory.
+ """
+ arch = os.uname()[4]
+ qemu_build = os.path.join(QEMU_BUILD_DIR,
+ "%s-softmmu" % arch,
+ "qemu-system-%s" % arch)
+ qemu_path = [
+ qemu_build,
+ "/usr/local/bin/qemu-system-%s" % arch,
+ "/usr/bin/qemu-system-%s" % arch,
+ "/usr/bin/qemu-kvm",
+ "/usr/libexec/qemu-kvm",
+ ]
+ for item in qemu_path:
+ if os.path.isfile(item):
+ return item;
+ return None
+
+ def create_initrd(self, outfile, kversion):
+ modules = "base systemd bash drm"
+ drivers = "cirrus bochs-drm qxl virtio-pci virtio-gpu vgem vkms"
+ files = [
+ "/usr/bin/drminfo",
+ "/usr/bin/drmtest",
+ "/usr/bin/fbinfo",
+ "/usr/bin/fbtest",
+ "/usr/bin/virtiotest",
+ "/usr/bin/prime",
+ "/usr/bin/edid-decode",
+ "/usr/share/fontconfig/conf.avail/59-liberation-mono.conf",
+ "/usr/share/fonts/liberation/LiberationMono-Regular.ttf",
+ ]
+
+ cmdline = "dracut"
+ cmdline += " --force"
+ cmdline += " --modules \"%s\"" % modules
+ cmdline += " --drivers \"%s\"" % drivers
+ for item in files:
+ cmdline += " --install %s" % item
+ cmdline += " \"%s\" \"%s\"" % (outfile, kversion)
+ run(cmdline)
+
+ def boot_gfx_vm(self, vga):
+ append = "console=ttyS0"
+
+ self.vm.set_machine('pc')
+ self.vm.set_console()
+ self.vm.add_args('-enable-kvm')
+ self.vm.add_args('-m', '1G')
+ self.vm.add_args('-vga', 'none')
+ self.vm.add_args('-device', vga)
+ self.vm.add_args('-kernel', self.kernel)
+ self.vm.add_args('-initrd', self.initrd)
+ self.vm.add_args('-append', append)
+ self.vm.launch()
+
+ self.rconsole = self.vm.console_socket.makefile('r')
+ self.wconsole = self.vm.console_socket.makefile('w')
+ self.lconsole = logging.getLogger('console')
+ self.lcommand = logging.getLogger('command')
+
+ def console_run(self, command):
+ self.lcommand.debug(command)
+ self.wconsole.write(command)
+ self.wconsole.write('\n')
+ self.wconsole.flush()
+ self.rconsole.readline() # newline
+ self.rconsole.readline() # command line echo
+
+ def console_wait(self, good, bad = None, errmsg = None):
+ output = ""
+ counter = 1
+ while True:
+ msg = self.rconsole.readline()
+ self.lconsole.debug("%3d: %s" % (counter, msg.rstrip()))
+ counter += 1
+ if good in msg:
+ break
+ if not bad is None:
+ if bad in msg:
+ if errmsg is None:
+ errmsg = "unexpected output (%s)" % bad
+ self.fail(errmsg)
+ if 'Kernel panic - not syncing' in msg:
+ self.fail("kernel panic")
+ output += msg
+ return output
+
+ def screen_dump(self, vga, name):
+ if vga == 'qxl-vga':
+ self.vm.qmp('screendump', filename = '/dev/null');
+ time.sleep(0.1)
+ outfile = '%s/%s-%s.ppm' % (self.outputdir, name, vga)
+ self.vm.qmp('screendump', filename = outfile);
+ self.wconsole.write('\n')
+ self.wconsole.flush()
+
+ def write_text(self, vga, name, content):
+ outfile = '%s/%s-%s.txt' % (self.outputdir, name, vga)
+ f = open(outfile, "w")
+ f.write(content)
+ f.close()
+
def setUp(self):
- self.vm = QEMUMachine(find_qemu_binary())
+ self.jobdir = os.path.dirname(self.workdir)
+ self.kernel = os.path.join(self.jobdir, "drminfo.kernel");
+ self.initrd = os.path.join(self.jobdir, "drminfo.initrd");
+ self.vm = QEMUMachine(self.find_qemu_binary())
def tearDown(self):
self.vm.shutdown()
diff --git a/tests/edid.py b/tests/edid.py
new file mode 100644
index 0000000..d206871
--- /dev/null
+++ b/tests/edid.py
@@ -0,0 +1,52 @@
+#
+# edid tests
+#
+
+# stdlib
+import os
+import time
+from shutil import copyfile
+
+# avocado
+import avocado
+
+# my bits
+from drminfo import TestDRM
+
+class EDID(TestDRM):
+ """
+ basic qemu display device tests
+
+ :avocado: tags=x86_64
+ """
+
+ def run_one_test(self, vga):
+
+ self.boot_gfx_vm(vga);
+ self.console_wait('Entering emergency mode')
+ self.console_run('PS1=---\\\\u---\\\\n')
+ self.console_wait('---root---')
+
+ self.console_run('edid-decode /sys/class/drm/card0-Virtual-1/edid')
+ edid = self.console_wait('---root---')
+ vganame = vga.split(",")[0];
+ self.write_text(vganame, "edid", edid)
+ if edid.find("QEMU Monitor") < 0:
+ self.fail("edid not valid")
+
+ @avocado.skipUnless(os.path.exists('/usr/bin/dracut'), "no dracut")
+ @avocado.skipUnless(os.path.exists('/usr/bin/drminfo'), "no drminfo")
+ @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)
+
+ def test_stdvga(self):
+ self.run_one_test('VGA,edid=on')
+
+ def test_virtio(self):
+ self.run_one_test('virtio-vga,edid=on')