diff options
Diffstat (limited to 'tests/basic.py')
-rw-r--r-- | tests/basic.py | 113 |
1 files changed, 15 insertions, 98 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') |