tests: port vm_qrexec_gui to core3 API

This commit is contained in:
Marek Marczykowski-Górecki 2016-08-17 04:39:13 +02:00
parent e19df4c5b6
commit d8286b6dab
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724
3 changed files with 29 additions and 36 deletions

View File

@ -987,7 +987,7 @@ def load_tests(loader, tests, pattern): # pylint: disable=unused-argument
'qubes.tests.int.dom0_update', 'qubes.tests.int.dom0_update',
'qubes.tests.int.network', 'qubes.tests.int.network',
'qubes.tests.int.dispvm', 'qubes.tests.int.dispvm',
# 'qubes.tests.vm_qrexec_gui', 'qubes.tests.int.vm_qrexec_gui',
'qubes.tests.int.backup', 'qubes.tests.int.backup',
'qubes.tests.int.backupcompatibility', 'qubes.tests.int.backupcompatibility',
# 'qubes.tests.regressions', # 'qubes.tests.regressions',

View File

@ -30,30 +30,34 @@ import subprocess
import unittest import unittest
import time import time
from qubes.qubes import QubesVmCollection, defaults, QubesException import qubes.config
import qubes.tests import qubes.tests
import qubes.vm.appvm
import qubes.vm.templatevm
import re import re
TEST_DATA = "0123456789" * 1024 TEST_DATA = "0123456789" * 1024
class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin): class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
def setUp(self): def setUp(self):
super(TC_00_AppVMMixin, self).setUp() super(TC_00_AppVMMixin, self).setUp()
self.testvm1 = self.qc.add_new_vm( self.init_default_template(self.template)
"QubesAppVm", if self._testMethodName == 'test_210_time_sync':
self.init_networking()
self.testvm1 = self.app.add_new_vm(
qubes.vm.appvm.AppVM,
label='red',
name=self.make_vm_name('vm1'), name=self.make_vm_name('vm1'),
template=self.qc.get_vm_by_name(self.template)) template=self.app.domains[self.template])
self.testvm1.create_on_disk(verbose=False) self.testvm1.create_on_disk()
self.testvm2 = self.qc.add_new_vm( self.testvm2 = self.app.add_new_vm(
"QubesAppVm", qubes.vm.appvm.AppVM,
label='red',
name=self.make_vm_name('vm2'), name=self.make_vm_name('vm2'),
template=self.qc.get_vm_by_name(self.template)) template=self.app.domains[self.template])
self.testvm2.create_on_disk(verbose=False) self.testvm2.create_on_disk()
self.save_and_reload_db() self.app.save()
self.qc.unlock_db()
self.testvm1 = self.qc[self.testvm1.qid]
self.testvm2 = self.qc[self.testvm2.qid]
def test_000_start_shutdown(self): def test_000_start_shutdown(self):
self.testvm1.start() self.testvm1.start()
@ -62,7 +66,7 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
shutdown_counter = 0 shutdown_counter = 0
while self.testvm1.is_running(): while self.testvm1.is_running():
if shutdown_counter > defaults["shutdown_counter_max"]: if shutdown_counter > qubes.config.defaults["shutdown_counter_max"]:
self.fail("VM hanged during shutdown") self.fail("VM hanged during shutdown")
shutdown_counter += 1 shutdown_counter += 1
time.sleep(1) time.sleep(1)
@ -791,15 +795,9 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
self.testvm2.start() self.testvm2.start()
(start_time, _) = subprocess.Popen(["date", "-u", "+%s"], (start_time, _) = subprocess.Popen(["date", "-u", "+%s"],
stdout=subprocess.PIPE).communicate() stdout=subprocess.PIPE).communicate()
original_clockvm = self.qc.get_clockvm_vm()
if original_clockvm:
original_clockvm_name = original_clockvm.name
else:
original_clockvm_name = "none"
try: try:
# use qubes-prefs to not hassle with qubes.xml locking self.app.clockvm = self.testvm1
subprocess.check_call(["qubes-prefs", "-s", "clockvm", self.app.save()
self.testvm1.name])
# break vm and dom0 time, to check if qvm-sync-clock would fix it # break vm and dom0 time, to check if qvm-sync-clock would fix it
subprocess.check_call(["sudo", "date", "-s", subprocess.check_call(["sudo", "date", "-s",
"2001-01-01T12:34:56"], "2001-01-01T12:34:56"],
@ -833,9 +831,6 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
# reset time to some approximation of the real time # reset time to some approximation of the real time
subprocess.Popen(["sudo", "date", "-u", "-s", "@" + start_time]) subprocess.Popen(["sudo", "date", "-u", "-s", "@" + start_time])
raise raise
finally:
subprocess.call(["qubes-prefs", "-s", "clockvm",
original_clockvm_name])
def test_250_resize_private_img(self): def test_250_resize_private_img(self):
""" """
@ -843,7 +838,7 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
:return: :return:
""" """
# First offline test # First offline test
self.testvm1.resize_private_img(4*1024**3) self.testvm1.storage.resize('private', 4*1024**3)
self.testvm1.start() self.testvm1.start()
df_cmd = '( df --output=size /rw || df /rw | awk \'{print $2}\' )|' \ df_cmd = '( df --output=size /rw || df /rw | awk \'{print $2}\' )|' \
'tail -n 1' 'tail -n 1'
@ -854,7 +849,7 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
# some safety margin for FS metadata # some safety margin for FS metadata
self.assertGreater(int(new_size.strip()), 3.8*1024**2) self.assertGreater(int(new_size.strip()), 3.8*1024**2)
# Then online test # Then online test
self.testvm1.resize_private_img(6*1024**3) self.testvm1.storage.resize('private', 6*1024**3)
p = self.testvm1.run(df_cmd, p = self.testvm1.run(df_cmd,
passio_popen=True) passio_popen=True)
# new_size in 1k-blocks # new_size in 1k-blocks
@ -873,7 +868,7 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
self.testvm1.memory = 800 self.testvm1.memory = 800
self.testvm1.maxmem = 800 self.testvm1.maxmem = 800
# exclude from memory balancing # exclude from memory balancing
self.testvm1.services['meminfo-writer'] = False self.testvm1.features['services/meminfo-writer'] = False
self.testvm1.start() self.testvm1.start()
# and allow large map count # and allow large map count
self.testvm1.run("echo 256000 > /proc/sys/vm/max_map_count", self.testvm1.run("echo 256000 > /proc/sys/vm/max_map_count",
@ -1010,12 +1005,9 @@ class TC_00_AppVMMixin(qubes.tests.SystemTestsMixin):
def load_tests(loader, tests, pattern): def load_tests(loader, tests, pattern):
try: try:
qc = qubes.qubes.QubesVmCollection() app = qubes.Qubes()
qc.lock_db_for_reading() templates = [vm.name for vm in app.domains if
qc.load() isinstance(vm, qubes.vm.templatevm.TemplateVM)]
qc.unlock_db()
templates = [vm.name for vm in qc.values() if
isinstance(vm, qubes.qubes.QubesTemplateVm)]
except OSError: except OSError:
templates = [] templates = []
for template in templates: for template in templates:

View File

@ -307,6 +307,7 @@ fi
%{python_sitelib}/qubes/tests/int/dispvm.py* %{python_sitelib}/qubes/tests/int/dispvm.py*
%{python_sitelib}/qubes/tests/int/dom0_update.py* %{python_sitelib}/qubes/tests/int/dom0_update.py*
%{python_sitelib}/qubes/tests/int/network.py* %{python_sitelib}/qubes/tests/int/network.py*
%{python_sitelib}/qubes/tests/int/vm_qrexec_gui.py*
%dir %{python_sitelib}/qubes/tests/int/tools %dir %{python_sitelib}/qubes/tests/int/tools
%{python_sitelib}/qubes/tests/int/tools/__init__.py* %{python_sitelib}/qubes/tests/int/tools/__init__.py*