Browse Source

Tests fixed for new features and bugfixes

After switching to Qt5, a bunch of fixes and changes were introduced.
This fixes tests to take them into account.
Marta Marczykowska-Górecka 4 years ago
parent
commit
4c2adbca00

+ 57 - 35
qubesmanager/tests/test_backup.py

@@ -27,10 +27,26 @@ from PyQt5 import QtTest, QtCore, QtWidgets
 from qubesadmin import Qubes, events, utils, exc
 from qubesadmin import Qubes, events, utils, exc
 from qubesmanager import backup
 from qubesmanager import backup
 from qubesmanager.tests import init_qtapp
 from qubesmanager.tests import init_qtapp
-import asyncio
 
 
 
 
 class BackupTest(unittest.TestCase):
 class BackupTest(unittest.TestCase):
+    @classmethod
+    def setUpClass(cls):
+        qapp = Qubes()
+
+        cls.dom0_name = "dom0"
+
+        cls.vms = []
+        cls.running_vm = None
+
+        for vm in qapp.domains:
+            if vm.klass != "AdminVM" and vm.is_running():
+                cls.running_vm = vm.name
+            if vm.klass != "AdminVM" and vm.get_disk_utilization() > 0:
+                cls.vms.append(vm.name)
+            if cls.running_vm and len(cls.vms) >= 3:
+                break
+
     def setUp(self):
     def setUp(self):
         super(BackupTest, self).setUp()
         super(BackupTest, self).setUp()
         self.qtapp, self.loop = init_qtapp()
         self.qtapp, self.loop = init_qtapp()
@@ -55,9 +71,7 @@ class BackupTest(unittest.TestCase):
         self.dialog.show()
         self.dialog.show()
 
 
     def tearDown(self):
     def tearDown(self):
-        self.dialog.close()
-        self.qtapp.processEvents()
-        yield from asyncio.sleep(1)
+        self.dialog.done(0)
         super(BackupTest, self).tearDown()
         super(BackupTest, self).tearDown()
 
 
     def test_00_window_loads(self):
     def test_00_window_loads(self):
@@ -110,7 +124,7 @@ class BackupTest(unittest.TestCase):
                          self.dialog.select_vms_widget.available_list.count(),
                          self.dialog.select_vms_widget.available_list.count(),
                          "Remove All VMs does not work")
                          "Remove All VMs does not work")
 
 
-        self._select_vm("work")
+        self._select_vm(self.vms[0])
 
 
         self.assertEqual(self.dialog.select_vms_widget.selected_list.count(),
         self.assertEqual(self.dialog.select_vms_widget.selected_list.count(),
                          1, "Select a single VM does not work")
                          1, "Select a single VM does not work")
@@ -179,12 +193,16 @@ class BackupTest(unittest.TestCase):
     def test_07_disk_space_correct(self):
     def test_07_disk_space_correct(self):
         for i in range(self.dialog.select_vms_widget.available_list.count()):
         for i in range(self.dialog.select_vms_widget.available_list.count()):
             item = self.dialog.select_vms_widget.available_list.item(i)
             item = self.dialog.select_vms_widget.available_list.item(i)
-            if item.vm.name == "dom0" or item.vm.get_disk_utilization() > 0:
+            if item.vm.name == self.dom0_name or \
+                    item.vm.get_disk_utilization() > 0:
                 self.assertGreater(
                 self.assertGreater(
                     item.size, 0,
                     item.size, 0,
                     "{} size incorrectly reported as 0".format(item.vm.name))
                     "{} size incorrectly reported as 0".format(item.vm.name))
 
 
     def test_08_total_size_correct(self):
     def test_08_total_size_correct(self):
+        if len(self.vms) < 3:
+            self.skipTest("Insufficient number of VMs with positive "
+                          "disk utilization")
         # select nothing
         # select nothing
         self.dialog.select_vms_widget.remove_all_button.click()
         self.dialog.select_vms_widget.remove_all_button.click()
         self.assertEqual(self.dialog.total_size_label.text(), "0",
         self.assertEqual(self.dialog.total_size_label.text(), "0",
@@ -192,27 +210,27 @@ class BackupTest(unittest.TestCase):
 
 
         current_size = 0
         current_size = 0
         # select a single VM
         # select a single VM
-        self._select_vm("sys-net")
+        self._select_vm(self.vms[0])
 
 
-        current_size += self.qapp.domains["sys-net"].get_disk_utilization()
+        current_size += self.qapp.domains[self.vms[0]].get_disk_utilization()
         self.assertEqual(self.dialog.total_size_label.text(),
         self.assertEqual(self.dialog.total_size_label.text(),
                          utils.size_to_human(current_size),
                          utils.size_to_human(current_size),
                          "Size incorrectly listed for a single VM")
                          "Size incorrectly listed for a single VM")
 
 
         # add two more
         # add two more
-        self._select_vm("sys-firewall")
-        self._select_vm("work")
+        self._select_vm(self.vms[1])
+        self._select_vm(self.vms[2])
 
 
-        current_size += self.qapp.domains["sys-firewall"].get_disk_utilization()
-        current_size += self.qapp.domains["work"].get_disk_utilization()
+        current_size += self.qapp.domains[self.vms[1]].get_disk_utilization()
+        current_size += self.qapp.domains[self.vms[2]].get_disk_utilization()
 
 
         self.assertEqual(self.dialog.total_size_label.text(),
         self.assertEqual(self.dialog.total_size_label.text(),
                          utils.size_to_human(current_size),
                          utils.size_to_human(current_size),
                          "Size incorrectly listed for several VMs")
                          "Size incorrectly listed for several VMs")
 
 
         # remove one
         # remove one
-        self._deselect_vm("sys-net")
-        current_size -= self.qapp.domains["sys-net"].get_disk_utilization()
+        self._deselect_vm(self.vms[0])
+        current_size -= self.qapp.domains[self.vms[0]].get_disk_utilization()
         self.assertEqual(self.dialog.total_size_label.text(),
         self.assertEqual(self.dialog.total_size_label.text(),
                          utils.size_to_human(current_size),
                          utils.size_to_human(current_size),
                          "Size incorrectly listed for several VMs")
                          "Size incorrectly listed for several VMs")
@@ -225,7 +243,7 @@ class BackupTest(unittest.TestCase):
                         is self.dialog.select_vms_page)
                         is self.dialog.select_vms_page)
 
 
         self.dialog.select_vms_widget.remove_all_button.click()
         self.dialog.select_vms_widget.remove_all_button.click()
-        self._select_vm("work")
+        self._select_vm(self.vms[0])
 
 
         self._click_next()
         self._click_next()
 
 
@@ -233,16 +251,16 @@ class BackupTest(unittest.TestCase):
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
         # setup backup
         # setup backup
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.save_profile_checkbox.setChecked(True)
         self.dialog.save_profile_checkbox.setChecked(True)
         self.dialog.turn_off_checkbox.setChecked(False)
         self.dialog.turn_off_checkbox.setChecked(False)
         self.dialog.compress_checkbox.setChecked(False)
         self.dialog.compress_checkbox.setChecked(False)
-        expected_settings = {'destination_vm': "dom0",
+        expected_settings = {'destination_vm': self.dom0_name,
                              'destination_path': "/home",
                              'destination_path': "/home",
-                             'include': ["work"],
+                             'include': [self.vms[0]],
                              'passphrase_text': "pass",
                              'passphrase_text': "pass",
                              'compression': False}
                              'compression': False}
         with unittest.mock.patch.object(self.dialog.textEdit, 'setText')\
         with unittest.mock.patch.object(self.dialog.textEdit, 'setText')\
@@ -260,7 +278,8 @@ class BackupTest(unittest.TestCase):
 
 
         # make sure the backup is executed
         # make sure the backup is executed
         self._click_next()
         self._click_next()
-        self.mock_thread.assert_called_once_with(self.qapp.domains["dom0"])
+        self.mock_thread.assert_called_once_with(
+            self.qapp.domains[self.dom0_name])
         self.mock_thread().start.assert_called_once_with()
         self.mock_thread().start.assert_called_once_with()
 
 
     @unittest.mock.patch('qubesmanager.backup_utils.write_backup_profile')
     @unittest.mock.patch('qubesmanager.backup_utils.write_backup_profile')
@@ -271,9 +290,9 @@ class BackupTest(unittest.TestCase):
                         is self.dialog.select_vms_page)
                         is self.dialog.select_vms_page)
 
 
         self.dialog.select_vms_widget.remove_all_button.click()
         self.dialog.select_vms_widget.remove_all_button.click()
-        self._select_vm("work")
-        self._select_vm("sys-net")
-        self._select_vm("dom0")
+        self._select_vm(self.dom0_name)
+        self._select_vm(self.vms[0])
+        self._select_vm(self.vms[1])
 
 
         self._click_next()
         self._click_next()
 
 
@@ -281,16 +300,17 @@ class BackupTest(unittest.TestCase):
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
         # setup backup
         # setup backup
-        self._select_location("sys-net")
+        self._select_location(self.running_vm)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("longerPassPhrase")
         self.dialog.passphrase_line_edit.setText("longerPassPhrase")
         self.dialog.passphrase_line_edit_verify.setText("longerPassPhrase")
         self.dialog.passphrase_line_edit_verify.setText("longerPassPhrase")
         self.dialog.save_profile_checkbox.setChecked(False)
         self.dialog.save_profile_checkbox.setChecked(False)
         self.dialog.turn_off_checkbox.setChecked(False)
         self.dialog.turn_off_checkbox.setChecked(False)
         self.dialog.compress_checkbox.setChecked(True)
         self.dialog.compress_checkbox.setChecked(True)
-        expected_settings = {'destination_vm': "sys-net",
+        expected_settings = {'destination_vm': self.running_vm,
                              'destination_path': "/home",
                              'destination_path': "/home",
-                             'include': ["dom0", "sys-net", "work"],
+                             'include': sorted([self.dom0_name, self.vms[0],
+                                         self.vms[1]]),
                              'passphrase_text': "longerPassPhrase",
                              'passphrase_text': "longerPassPhrase",
                              'compression': True}
                              'compression': True}
         with unittest.mock.patch.object(self.dialog.textEdit, 'setText')\
         with unittest.mock.patch.object(self.dialog.textEdit, 'setText')\
@@ -308,16 +328,17 @@ class BackupTest(unittest.TestCase):
 
 
         # make sure the backup is executed
         # make sure the backup is executed
         self._click_next()
         self._click_next()
-        self.mock_thread.assert_called_once_with(self.qapp.domains["sys-net"])
+        self.mock_thread.assert_called_once_with(
+            self.qapp.domains[self.running_vm])
         self.mock_thread().start.assert_called_once_with()
         self.mock_thread().start.assert_called_once_with()
 
 
     @unittest.mock.patch('qubesmanager.backup_utils.load_backup_profile')
     @unittest.mock.patch('qubesmanager.backup_utils.load_backup_profile')
     def test_20_loading_settings(self, mock_load):
     def test_20_loading_settings(self, mock_load):
 
 
         mock_load.return_value = {
         mock_load.return_value = {
-            'destination_vm': "sys-net",
+            'destination_vm': self.running_vm,
             'destination_path': "/home",
             'destination_path': "/home",
-            'include': ["dom0", "sys-net", "work"],
+            'include': [self.dom0_name, self.vms[0], self.vms[1]],
             'passphrase_text': "longerPassPhrase",
             'passphrase_text': "longerPassPhrase",
             'compression': True
             'compression': True
         }
         }
@@ -331,7 +352,8 @@ class BackupTest(unittest.TestCase):
         self.dialog.show()
         self.dialog.show()
 
 
         # check if settings were loaded
         # check if settings were loaded
-        self.assertEqual(self.dialog.appvm_combobox.currentText(), "sys-net",
+        self.assertEqual(self.dialog.appvm_combobox.currentText(),
+                         self.running_vm,
                          "Destination VM not loaded")
                          "Destination VM not loaded")
         self.assertEqual(self.dialog.dir_line_edit.text(), "/home",
         self.assertEqual(self.dialog.dir_line_edit.text(), "/home",
                          "Destination path not loaded")
                          "Destination path not loaded")
@@ -396,7 +418,7 @@ class BackupTest(unittest.TestCase):
         self.assertTrue(self.dialog.currentPage()
         self.assertTrue(self.dialog.currentPage()
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
@@ -418,7 +440,7 @@ class BackupTest(unittest.TestCase):
         self.assertTrue(self.dialog.currentPage()
         self.assertTrue(self.dialog.currentPage()
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
@@ -446,7 +468,7 @@ class BackupTest(unittest.TestCase):
         self.assertTrue(self.dialog.currentPage()
         self.assertTrue(self.dialog.currentPage()
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
@@ -486,7 +508,7 @@ class BackupTest(unittest.TestCase):
         self.assertTrue(self.dialog.currentPage()
         self.assertTrue(self.dialog.currentPage()
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
@@ -525,7 +547,7 @@ class BackupTest(unittest.TestCase):
         self.assertTrue(self.dialog.currentPage()
         self.assertTrue(self.dialog.currentPage()
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
@@ -563,7 +585,7 @@ class BackupTest(unittest.TestCase):
         self.assertTrue(self.dialog.currentPage()
         self.assertTrue(self.dialog.currentPage()
                         is self.dialog.select_dir_page)
                         is self.dialog.select_dir_page)
 
 
-        self._select_location("dom0")
+        self._select_location(self.dom0_name)
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.dir_line_edit.setText("/home")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")
         self.dialog.passphrase_line_edit_verify.setText("pass")

+ 2 - 13
qubesmanager/tests/test_backup_utils.py

@@ -21,29 +21,18 @@
 #
 #
 import logging.handlers
 import logging.handlers
 import unittest.mock
 import unittest.mock
-import quamash
-import asyncio
-import sys
 from PyQt5 import QtWidgets
 from PyQt5 import QtWidgets
 from qubesadmin import Qubes
 from qubesadmin import Qubes
 
 
 from qubesmanager import backup_utils
 from qubesmanager import backup_utils
-
-qtapp = QtWidgets.QApplication(sys.argv)
-loop = quamash.QEventLoop(qtapp)
-asyncio.set_event_loop(loop)
+from qubesmanager.tests import init_qtapp
 
 
 
 
 class BackupUtilsTest(unittest.TestCase):
 class BackupUtilsTest(unittest.TestCase):
     def setUp(self):
     def setUp(self):
         super(BackupUtilsTest, self).setUp()
         super(BackupUtilsTest, self).setUp()
+        self.qtapp, self.loop = init_qtapp()
         self.qapp = Qubes()
         self.qapp = Qubes()
-        self.loop = quamash.QEventLoop(qtapp)
-
-    def tearDown(self):
-        qtapp.processEvents()
-        yield from loop.sleep(1)
-        super(BackupUtilsTest, self).tearDown()
 
 
     def test_01_fill_apvms(self):
     def test_01_fill_apvms(self):
         dialog = QtWidgets.QDialog()
         dialog = QtWidgets.QDialog()

+ 32 - 38
qubesmanager/tests/test_create_new_vm.py

@@ -51,12 +51,6 @@ class NewVmTest(unittest.TestCase):
 
 
         self.dialog = create_new_vm.NewVmDlg(self.qtapp, self.qapp)
         self.dialog = create_new_vm.NewVmDlg(self.qtapp, self.qapp)
 
 
-    def tearDown(self):
-        self.dialog.close()
-        self.qtapp.processEvents()
-        yield from self.loop.sleep(1)
-        super(NewVmTest, self).tearDown()
-
     def test_00_window_loads(self):
     def test_00_window_loads(self):
         self.assertGreater(self.dialog.template_vm.count(), 0,
         self.assertGreater(self.dialog.template_vm.count(), 0,
                            "No templates shown")
                            "No templates shown")
@@ -68,13 +62,13 @@ class NewVmTest(unittest.TestCase):
                          "Attempted to create VM on cancel")
                          "Attempted to create VM on cancel")
 
 
     def test_02_create_simple_vm(self):
     def test_02_create_simple_vm(self):
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         self.__click_ok()
         self.__click_ok()
 
 
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             unittest.mock.ANY, qubesadmin.DEFAULT,
             unittest.mock.ANY, qubesadmin.DEFAULT,
-            {'provides_network': False})
+            {'provides_network': False}, unittest.mock.ANY)
         self.mock_thread().start.assert_called_once_with()
         self.mock_thread().start.assert_called_once_with()
 
 
     def test_03_label(self):
     def test_03_label(self):
@@ -83,13 +77,13 @@ class NewVmTest(unittest.TestCase):
                 self.dialog.label.setCurrentIndex(i)
                 self.dialog.label.setCurrentIndex(i)
                 break
                 break
 
 
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         self.__click_ok()
         self.__click_ok()
 
 
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             self.qapp.labels['blue'], qubesadmin.DEFAULT,
             self.qapp.labels['blue'], qubesadmin.DEFAULT,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
         self.mock_thread().start.assert_called_once_with()
         self.mock_thread().start.assert_called_once_with()
 
 
     def test_04_template(self):
     def test_04_template(self):
@@ -100,13 +94,13 @@ class NewVmTest(unittest.TestCase):
                 template = self.dialog.template_vm.currentText()
                 template = self.dialog.template_vm.currentText()
                 break
                 break
 
 
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         self.__click_ok()
         self.__click_ok()
 
 
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             unittest.mock.ANY, template,
             unittest.mock.ANY, template,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
 
 
     def test_05_netvm(self):
     def test_05_netvm(self):
         netvm = None
         netvm = None
@@ -116,53 +110,53 @@ class NewVmTest(unittest.TestCase):
                 netvm = self.dialog.netvm.currentText()
                 netvm = self.dialog.netvm.currentText()
                 break
                 break
 
 
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         self.__click_ok()
         self.__click_ok()
 
 
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             unittest.mock.ANY, unittest.mock.ANY,
             unittest.mock.ANY, unittest.mock.ANY,
-            {'netvm': netvm, 'provides_network': False})
+            {'netvm': netvm, 'provides_network': False}, unittest.mock.ANY)
 
 
     def test_06_provides_network(self):
     def test_06_provides_network(self):
         self.dialog.provides_network.setChecked(True)
         self.dialog.provides_network.setChecked(True)
 
 
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         self.__click_ok()
         self.__click_ok()
 
 
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             unittest.mock.ANY, unittest.mock.ANY,
             unittest.mock.ANY, unittest.mock.ANY,
-            {'provides_network': True})
+            {'provides_network': True}, unittest.mock.ANY)
 
 
     @unittest.mock.patch('subprocess.check_call')
     @unittest.mock.patch('subprocess.check_call')
     def test_07_launch_settings(self, mock_call):
     def test_07_launch_settings(self, mock_call):
         self.dialog.launch_settings.setChecked(True)
         self.dialog.launch_settings.setChecked(True)
 
 
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
 
 
         self.__click_ok()
         self.__click_ok()
 
 
         # make sure the thread is not reporting an error
         # make sure the thread is not reporting an error
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             unittest.mock.ANY, unittest.mock.ANY,
             unittest.mock.ANY, unittest.mock.ANY,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
 
 
         self.mock_thread().msg = None
         self.mock_thread().msg = None
         self.dialog.create_finished()
         self.dialog.create_finished()
 
 
-        mock_call.assert_called_once_with(['qubes-vm-settings', "testvm"])
+        mock_call.assert_called_once_with(['qubes-vm-settings', "test-vm"])
 
 
     def test_08_progress_hides(self):
     def test_08_progress_hides(self):
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
 
 
         self.__click_ok()
         self.__click_ok()
 
 
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "AppVM", "testvm",
+            self.qapp, "AppVM", "test-vm",
             unittest.mock.ANY, unittest.mock.ANY,
             unittest.mock.ANY, unittest.mock.ANY,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
 
 
         # make sure the thread is not reporting an error
         # make sure the thread is not reporting an error
         self.mock_thread().start.assert_called_once_with()
         self.mock_thread().start.assert_called_once_with()
@@ -175,7 +169,7 @@ class NewVmTest(unittest.TestCase):
         self.mock_progress().hide.assert_called_once_with()
         self.mock_progress().hide.assert_called_once_with()
 
 
     def test_09_standalone_clone(self):
     def test_09_standalone_clone(self):
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         for i in range(self.dialog.vm_type.count()):
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
             opt_text = self.dialog.vm_type.itemText(i).lower()
             if "standalone" in opt_text and "template" in opt_text and\
             if "standalone" in opt_text and "template" in opt_text and\
@@ -185,13 +179,13 @@ class NewVmTest(unittest.TestCase):
 
 
         self.__click_ok()
         self.__click_ok()
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "StandaloneVM", "testvm",
+            self.qapp, "StandaloneVM", "test-vm",
             unittest.mock.ANY, unittest.mock.ANY,
             unittest.mock.ANY, unittest.mock.ANY,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
 
 
     @unittest.mock.patch('subprocess.check_call')
     @unittest.mock.patch('subprocess.check_call')
     def test_10_standalone_empty(self, mock_call):
     def test_10_standalone_empty(self, mock_call):
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
         for i in range(self.dialog.vm_type.count()):
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
             opt_text = self.dialog.vm_type.itemText(i).lower()
             if "standalone" in opt_text and\
             if "standalone" in opt_text and\
@@ -201,19 +195,19 @@ class NewVmTest(unittest.TestCase):
 
 
         self.__click_ok()
         self.__click_ok()
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "StandaloneVM", "testvm",
+            self.qapp, "StandaloneVM", "test-vm",
             unittest.mock.ANY, None,
             unittest.mock.ANY, None,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
 
 
         self.mock_thread().msg = None
         self.mock_thread().msg = None
         self.dialog.create_finished()
         self.dialog.create_finished()
 
 
         mock_call.assert_called_once_with(['qubes-vm-boot-from-device',
         mock_call.assert_called_once_with(['qubes-vm-boot-from-device',
-                                           'testvm'])
+                                           'test-vm'])
 
 
     @unittest.mock.patch('subprocess.check_call')
     @unittest.mock.patch('subprocess.check_call')
     def test_11_standalone_empty_not_install(self, mock_call):
     def test_11_standalone_empty_not_install(self, mock_call):
-        self.dialog.name.setText("testvm")
+        self.dialog.name.setText("test-vm")
 
 
         for i in range(self.dialog.vm_type.count()):
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
             opt_text = self.dialog.vm_type.itemText(i).lower()
@@ -226,9 +220,9 @@ class NewVmTest(unittest.TestCase):
 
 
         self.__click_ok()
         self.__click_ok()
         self.mock_thread.assert_called_once_with(
         self.mock_thread.assert_called_once_with(
-            self.qapp, "StandaloneVM", "testvm",
+            self.qapp, "StandaloneVM", "test-vm",
             unittest.mock.ANY, None,
             unittest.mock.ANY, None,
-            unittest.mock.ANY)
+            unittest.mock.ANY, unittest.mock.ANY)
 
 
         self.mock_thread().msg = None
         self.mock_thread().msg = None
         self.dialog.create_finished()
         self.dialog.create_finished()

+ 0 - 6
qubesmanager/tests/test_global_settings.py

@@ -43,12 +43,6 @@ class GlobalSettingsTest(unittest.TestCase):
         self.setattr_mock = self.setattr_patcher.start()
         self.setattr_mock = self.setattr_patcher.start()
         self.addCleanup(self.setattr_patcher.stop)
         self.addCleanup(self.setattr_patcher.stop)
 
 
-    def tearDown(self):
-        self.dialog.close()
-        self.qtapp.processEvents()
-        yield from self.loop.sleep(1)
-        super(GlobalSettingsTest, self).tearDown()
-
     def test_00_settings_started(self):
     def test_00_settings_started(self):
         # non-empty drop-downs
         # non-empty drop-downs
         self.assertNotEqual(
         self.assertNotEqual(

+ 29 - 26
qubesmanager/tests/test_qube_manager.py

@@ -34,6 +34,7 @@ from qubesadmin import Qubes, events, exc
 import qubesmanager.qube_manager as qube_manager
 import qubesmanager.qube_manager as qube_manager
 from qubesmanager.tests import init_qtapp
 from qubesmanager.tests import init_qtapp
 
 
+
 class QubeManagerTest(unittest.TestCase):
 class QubeManagerTest(unittest.TestCase):
     def setUp(self):
     def setUp(self):
         super(QubeManagerTest, self).setUp()
         super(QubeManagerTest, self).setUp()
@@ -51,12 +52,6 @@ class QubeManagerTest(unittest.TestCase):
         self.dialog = qube_manager.VmManagerWindow(
         self.dialog = qube_manager.VmManagerWindow(
             self.qtapp, self.qapp, self.dispatcher)
             self.qtapp, self.qapp, self.dispatcher)
 
 
-    def tearDown(self):
-        self.dialog.close()
-        self.qtapp.processEvents()
-        yield from self.loop.sleep(1)
-        super(QubeManagerTest, self).tearDown()
-
     def test_000_window_loads(self):
     def test_000_window_loads(self):
         self.assertTrue(self.dialog.table is not None, "Window did not load")
         self.assertTrue(self.dialog.table is not None, "Window did not load")
 
 
@@ -182,7 +177,11 @@ class QubeManagerTest(unittest.TestCase):
             vm = self._get_table_item(row, "Name").vm
             vm = self._get_table_item(row, "Name").vm
 
 
             def_dispvm_item = self._get_table_item(row, "Default DispVM")
             def_dispvm_item = self._get_table_item(row, "Default DispVM")
-            def_dispvm_value = getattr(vm, "default_dispvm", None)
+            if vm.property_is_default("default_dispvm"):
+                def_dispvm_value = "default ({})".format(
+                    self.qapp.default_dispvm)
+            else:
+                def_dispvm_value = getattr(vm, "default_dispvm", None)
 
 
             self.assertEqual(
             self.assertEqual(
                 str(def_dispvm_value), def_dispvm_item.text(),
                 str(def_dispvm_value), def_dispvm_item.text(),
@@ -247,10 +246,12 @@ class QubeManagerTest(unittest.TestCase):
 
 
     def test_100_sorting(self):
     def test_100_sorting(self):
 
 
-        self.dialog.table.sortByColumn(self.dialog.columns_indices["Template"])
+        self.dialog.table.sortByColumn(self.dialog.columns_indices["Template"],
+                                       QtCore.Qt.AscendingOrder)
         self.__check_sorting("Template")
         self.__check_sorting("Template")
 
 
-        self.dialog.table.sortByColumn(self.dialog.columns_indices["Name"])
+        self.dialog.table.sortByColumn(self.dialog.columns_indices["Name"],
+                                       QtCore.Qt.AscendingOrder)
         self.__check_sorting("Name")
         self.__check_sorting("Name")
 
 
     @unittest.mock.patch('qubesmanager.qube_manager.QtCore.QSettings.setValue')
     @unittest.mock.patch('qubesmanager.qube_manager.QtCore.QSettings.setValue')
@@ -466,7 +467,7 @@ class QubeManagerTest(unittest.TestCase):
         action = self.dialog.action_removevm
         action = self.dialog.action_removevm
 
 
         mock_vm = unittest.mock.Mock(spec=['name'],
         mock_vm = unittest.mock.Mock(spec=['name'],
-                                     **{'name.return_value': 'testvm'})
+                                     **{'name.return_value': 'test-vm'})
         mock_dependencies.return_value = [(mock_vm, "test_prop")]
         mock_dependencies.return_value = [(mock_vm, "test_prop")]
 
 
         action.trigger()
         action.trigger()
@@ -767,10 +768,10 @@ class QubeManagerTest(unittest.TestCase):
     def test_400_event_domain_added(self):
     def test_400_event_domain_added(self):
         number_of_vms = self.dialog.table.rowCount()
         number_of_vms = self.dialog.table.rowCount()
 
 
-        self.addCleanup(subprocess.call, ["qvm-remove", "-f", "testvm"])
+        self.addCleanup(subprocess.call, ["qvm-remove", "-f", "test-vm"])
 
 
         self._run_command_and_process_events(
         self._run_command_and_process_events(
-            ["qvm-create", "--label", "red", "testvm"])
+            ["qvm-create", "--label", "red", "test-vm"])
 
 
         # a single row was added to the table
         # a single row was added to the table
         self.assertEqual(self.dialog.table.rowCount(), number_of_vms + 1)
         self.assertEqual(self.dialog.table.rowCount(), number_of_vms + 1)
@@ -791,26 +792,26 @@ class QubeManagerTest(unittest.TestCase):
         # try opening settings for the added vm
         # try opening settings for the added vm
         for row in range(self.dialog.table.rowCount()):
         for row in range(self.dialog.table.rowCount()):
             name = self._get_table_item(row, "Name")
             name = self._get_table_item(row, "Name")
-            if name.text() == "testvm":
+            if name.text() == "test-vm":
                 self.dialog.table.setCurrentItem(name)
                 self.dialog.table.setCurrentItem(name)
                 break
                 break
         with unittest.mock.patch('qubesmanager.settings.VMSettingsWindow')\
         with unittest.mock.patch('qubesmanager.settings.VMSettingsWindow')\
                 as mock_settings:
                 as mock_settings:
             self.dialog.action_settings.trigger()
             self.dialog.action_settings.trigger()
             mock_settings.assert_called_once_with(
             mock_settings.assert_called_once_with(
-                self.qapp.domains["testvm"], self.qtapp, "basic")
+                self.qapp.domains["test-vm"], self.qtapp, "basic")
 
 
     def test_401_event_domain_removed(self):
     def test_401_event_domain_removed(self):
         initial_vms = self._create_set_of_current_vms()
         initial_vms = self._create_set_of_current_vms()
 
 
         self._run_command_and_process_events(
         self._run_command_and_process_events(
-            ["qvm-create", "--label", "red", "testvm"])
+            ["qvm-create", "--label", "red", "test-vm"])
 
 
         current_vms = self._create_set_of_current_vms()
         current_vms = self._create_set_of_current_vms()
         self.assertEqual(len(initial_vms) + 1, len(current_vms))
         self.assertEqual(len(initial_vms) + 1, len(current_vms))
 
 
         self._run_command_and_process_events(
         self._run_command_and_process_events(
-            ["qvm-remove", "--force", "testvm"])
+            ["qvm-remove", "--force", "test-vm"])
         current_vms = self._create_set_of_current_vms()
         current_vms = self._create_set_of_current_vms()
         self.assertEqual(initial_vms, current_vms)
         self.assertEqual(initial_vms, current_vms)
 
 
@@ -1186,12 +1187,13 @@ class QubeManagerTest(unittest.TestCase):
         events
         events
         :param command: list of strings, containing the command and all its
         :param command: list of strings, containing the command and all its
         parameters
         parameters
-        :param timeout: default 20 seconds
+        :param timeout: default 5 seconds
         :return:
         :return:
         """
         """
         asyncio.set_event_loop(self.loop)
         asyncio.set_event_loop(self.loop)
 
 
         future1 = asyncio.ensure_future(self.dispatcher.listen_for_events())
         future1 = asyncio.ensure_future(self.dispatcher.listen_for_events())
+        self.loop.run_until_complete(asyncio.sleep(0))
         future2 = asyncio.create_subprocess_exec(*command,
         future2 = asyncio.create_subprocess_exec(*command,
                                                  stdout=subprocess.DEVNULL,
                                                  stdout=subprocess.DEVNULL,
                                                  stderr=subprocess.DEVNULL)
                                                  stderr=subprocess.DEVNULL)
@@ -1398,7 +1400,7 @@ class QubeManagerThreadTest(unittest.TestCase):
 
 
 
 
 class VMShutdownMonitorTest(unittest.TestCase):
 class VMShutdownMonitorTest(unittest.TestCase):
-    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox.question')
+    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox')
     @unittest.mock.patch('PyQt5.QtCore.QTimer')
     @unittest.mock.patch('PyQt5.QtCore.QTimer')
     def test_01_vm_shutdown_correct(self, mock_timer, mock_question):
     def test_01_vm_shutdown_correct(self, mock_timer, mock_question):
         mock_vm = unittest.mock.Mock()
         mock_vm = unittest.mock.Mock()
@@ -1413,10 +1415,12 @@ class VMShutdownMonitorTest(unittest.TestCase):
         self.assertEqual(mock_timer.call_count, 0)
         self.assertEqual(mock_timer.call_count, 0)
         monitor.restart_vm_if_needed.assert_called_once_with()
         monitor.restart_vm_if_needed.assert_called_once_with()
 
 
-    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox.question',
-                         return_value=1)
+    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox')
     @unittest.mock.patch('PyQt5.QtCore.QTimer.singleShot')
     @unittest.mock.patch('PyQt5.QtCore.QTimer.singleShot')
     def test_02_vm_not_shutdown_wait(self, mock_timer, mock_question):
     def test_02_vm_not_shutdown_wait(self, mock_timer, mock_question):
+        mock_question().clickedButton.return_value = 1
+        mock_question().addButton.return_value = 0
+
         mock_vm = unittest.mock.Mock()
         mock_vm = unittest.mock.Mock()
         mock_vm.is_running.return_value = True
         mock_vm.is_running.return_value = True
         mock_vm.start_time = datetime.datetime.now().timestamp() - 3000
         mock_vm.start_time = datetime.datetime.now().timestamp() - 3000
@@ -1426,13 +1430,14 @@ class VMShutdownMonitorTest(unittest.TestCase):
 
 
         monitor.check_if_vm_has_shutdown()
         monitor.check_if_vm_has_shutdown()
 
 
-        self.assertEqual(mock_question.call_count, 1)
         self.assertEqual(mock_timer.call_count, 1)
         self.assertEqual(mock_timer.call_count, 1)
 
 
-    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox.question',
-                         return_value=0)
+    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox')
     @unittest.mock.patch('PyQt5.QtCore.QTimer.singleShot')
     @unittest.mock.patch('PyQt5.QtCore.QTimer.singleShot')
     def test_03_vm_kill(self, mock_timer, mock_question):
     def test_03_vm_kill(self, mock_timer, mock_question):
+        mock_question().clickedButton.return_value = 1
+        mock_question().addButton.return_value = 1
+
         mock_vm = unittest.mock.Mock()
         mock_vm = unittest.mock.Mock()
         mock_vm.is_running.return_value = True
         mock_vm.is_running.return_value = True
         mock_vm.start_time = datetime.datetime.now().timestamp() - 3000
         mock_vm.start_time = datetime.datetime.now().timestamp() - 3000
@@ -1443,13 +1448,11 @@ class VMShutdownMonitorTest(unittest.TestCase):
 
 
         monitor.check_if_vm_has_shutdown()
         monitor.check_if_vm_has_shutdown()
 
 
-        self.assertEqual(mock_question.call_count, 1)
         self.assertEqual(mock_timer.call_count, 0)
         self.assertEqual(mock_timer.call_count, 0)
         mock_vm.kill.assert_called_once_with()
         mock_vm.kill.assert_called_once_with()
         monitor.restart_vm_if_needed.assert_called_once_with()
         monitor.restart_vm_if_needed.assert_called_once_with()
 
 
-    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox.question',
-                         return_value=0)
+    @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox')
     @unittest.mock.patch('PyQt5.QtCore.QTimer.singleShot')
     @unittest.mock.patch('PyQt5.QtCore.QTimer.singleShot')
     def test_04_check_later(self, mock_timer, mock_question):
     def test_04_check_later(self, mock_timer, mock_question):
         mock_vm = unittest.mock.Mock()
         mock_vm = unittest.mock.Mock()

+ 74 - 76
qubesmanager/tests/test_vm_settings.py

@@ -23,10 +23,7 @@ import logging.handlers
 import unittest
 import unittest
 import unittest.mock
 import unittest.mock
 
 
-import gc
-import asyncio
-
-from PyQt5 import QtTest, QtCore, QtWidgets
+from PyQt5 import QtTest, QtCore
 from qubesadmin import Qubes
 from qubesadmin import Qubes
 import qubesmanager.settings as vm_settings
 import qubesmanager.settings as vm_settings
 from qubesmanager.tests import init_qtapp
 from qubesmanager.tests import init_qtapp
@@ -44,64 +41,63 @@ class VMSettingsTest(unittest.TestCase):
         self.addCleanup(self.mock_qprogress.stop)
         self.addCleanup(self.mock_qprogress.stop)
 
 
         self.qapp = Qubes()
         self.qapp = Qubes()
-        
-        if "testvm" in self.qapp.domains:
-            del self.qapp.domains["testvm"]
 
 
-    def tearDown(self):
-        del self.qapp.domains["testvm"]
-        self.qtapp.processEvents()
-        yield from self.loop.sleep(1)
+        if "test-vm" in self.qapp.domains:
+            del self.qapp.domains["test-vm"]
 
 
+    def tearDown(self):
+        if "test-vm" in self.qapp.domains:
+            del self.qapp.domains["test-vm"]
         super(VMSettingsTest, self).tearDown()
         super(VMSettingsTest, self).tearDown()
 
 
     def test_00_load_correct_tab(self):
     def test_00_load_correct_tab(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "red")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "red")
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
         self.assertTrue(
         self.assertTrue(
             self.dialog.tabWidget.currentWidget() is self.dialog.basic_tab)
             self.dialog.tabWidget.currentWidget() is self.dialog.basic_tab)
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
         self.assertTrue(
         self.assertTrue(
             self.dialog.tabWidget.currentWidget() is self.dialog.advanced_tab)
             self.dialog.tabWidget.currentWidget() is self.dialog.advanced_tab)
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "firewall")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="firewall")
         self.assertTrue(
         self.assertTrue(
             self.dialog.tabWidget.currentWidget() is self.dialog.firewall_tab)
             self.dialog.tabWidget.currentWidget() is self.dialog.firewall_tab)
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "devices")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="devices")
         self.assertTrue(
         self.assertTrue(
             self.dialog.tabWidget.currentWidget() is self.dialog.devices_tab)
             self.dialog.tabWidget.currentWidget() is self.dialog.devices_tab)
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "applications")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp,
+            init_page="applications")
         self.assertTrue(
         self.assertTrue(
             self.dialog.tabWidget.currentWidget() is self.dialog.apps_tab)
             self.dialog.tabWidget.currentWidget() is self.dialog.apps_tab)
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "services")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="services")
         self.assertTrue(
         self.assertTrue(
             self.dialog.tabWidget.currentWidget() is self.dialog.services_tab)
             self.dialog.tabWidget.currentWidget() is self.dialog.services_tab)
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
     def test_01_basic_tab_default(self):
     def test_01_basic_tab_default(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         # set the vm to have a default template and netvm
         # set the vm to have a default template and netvm
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
-        self.assertEqual(self.dialog.vmname.text(), "testvm",
+        self.assertEqual(self.dialog.vmname.text(), "test-vm",
                          "Name displayed incorrectly")
                          "Name displayed incorrectly")
 
 
         self.assertTrue("blue" in self.dialog.vmlabel.currentText(),
         self.assertTrue("blue" in self.dialog.vmlabel.currentText(),
@@ -156,12 +152,12 @@ class VMSettingsTest(unittest.TestCase):
                          "Incorrect max private root size")
                          "Incorrect max private root size")
 
 
     def test_02_basic_tab_nones(self):
     def test_02_basic_tab_nones(self):
-        self.vm = self.qapp.add_new_vm("StandaloneVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("StandaloneVM", "test-vm", "blue")
         # set the vm to have a default template and netvm
         # set the vm to have a default template and netvm
         self.vm.netvm = None
         self.vm.netvm = None
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         self.assertEqual("", self.dialog.template_name.currentText(),
         self.assertEqual("", self.dialog.template_name.currentText(),
                          "No template incorrectly displayed")
                          "No template incorrectly displayed")
@@ -185,12 +181,11 @@ class VMSettingsTest(unittest.TestCase):
                          "---",
                          "---",
                          "Incorrect gateway displayed")
                          "Incorrect gateway displayed")
 
 
-    @unittest.expectedFailure
     def test_03_change_label(self):
     def test_03_change_label(self):
-        # this test fails due to error where we check whether label is visible
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
+        self.dialog.show()
 
 
         new_label = self._set_noncurrent(self.dialog.vmlabel)
         new_label = self._set_noncurrent(self.dialog.vmlabel)
         self._click_ok()
         self._click_ok()
@@ -199,9 +194,9 @@ class VMSettingsTest(unittest.TestCase):
                          "Label is not set correctly")
                          "Label is not set correctly")
 
 
     def test_04_change_template(self):
     def test_04_change_template(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         new_template = self._set_noncurrent(self.dialog.template_name)
         new_template = self._set_noncurrent(self.dialog.template_name)
         self._click_ok()
         self._click_ok()
@@ -210,9 +205,9 @@ class VMSettingsTest(unittest.TestCase):
                          "Template is not set correctly")
                          "Template is not set correctly")
 
 
     def test_05_change_networking(self):
     def test_05_change_networking(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         new_netvm = self._set_noncurrent(self.dialog.netVM)
         new_netvm = self._set_noncurrent(self.dialog.netVM)
         self._click_ok()
         self._click_ok()
@@ -221,9 +216,9 @@ class VMSettingsTest(unittest.TestCase):
                          "NetVM is not set correctly")
                          "NetVM is not set correctly")
 
 
     def test_06_change_networking_none(self):
     def test_06_change_networking_none(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         self._set_none(self.dialog.netVM)
         self._set_none(self.dialog.netVM)
         self._click_ok()
         self._click_ok()
@@ -232,7 +227,7 @@ class VMSettingsTest(unittest.TestCase):
                           "None netVM is not set correctly")
                           "None netVM is not set correctly")
 
 
     def test_07_change_networking_to_default(self):
     def test_07_change_networking_to_default(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
 
 
         for vm in self.qapp.domains:
         for vm in self.qapp.domains:
             if getattr(vm, 'provides_network', False)\
             if getattr(vm, 'provides_network', False)\
@@ -241,7 +236,7 @@ class VMSettingsTest(unittest.TestCase):
                 break
                 break
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         new_netvm = self._set_default(self.dialog.netVM)
         new_netvm = self._set_default(self.dialog.netVM)
         self._click_ok()
         self._click_ok()
@@ -250,11 +245,11 @@ class VMSettingsTest(unittest.TestCase):
                         "NetVM is not set correctly")
                         "NetVM is not set correctly")
         self.assertTrue(self.vm.property_is_default('netvm'))
         self.assertTrue(self.vm.property_is_default('netvm'))
 
 
-    @unittest.expectedFailure
     def test_08_basic_checkboxes_true(self):
     def test_08_basic_checkboxes_true(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
+        self.dialog.show()
 
 
         self.dialog.include_in_backups.setChecked(True)
         self.dialog.include_in_backups.setChecked(True)
         self.dialog.autostart_vm.setChecked(True)
         self.dialog.autostart_vm.setChecked(True)
@@ -269,11 +264,11 @@ class VMSettingsTest(unittest.TestCase):
         self.assertTrue(self.vm.debug,
         self.assertTrue(self.vm.debug,
                         "Debug mode not set to true")
                         "Debug mode not set to true")
 
 
-    @unittest.expectedFailure
     def test_09_basic_checkboxes_false(self):
     def test_09_basic_checkboxes_false(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
+        self.dialog.show()
 
 
         self.dialog.include_in_backups.setChecked(False)
         self.dialog.include_in_backups.setChecked(False)
         self.dialog.autostart_vm.setChecked(False)
         self.dialog.autostart_vm.setChecked(False)
@@ -289,9 +284,9 @@ class VMSettingsTest(unittest.TestCase):
                          "Debug mode not set to false")
                          "Debug mode not set to false")
 
 
     def test_10_increase_private_storage(self):
     def test_10_increase_private_storage(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         current_storage = self.vm.volumes['private'].size // 1024**2
         current_storage = self.vm.volumes['private'].size // 1024**2
         new_storage = current_storage + 512
         new_storage = current_storage + 512
@@ -308,16 +303,16 @@ class VMSettingsTest(unittest.TestCase):
     @unittest.mock.patch('PyQt5.QtWidgets.QInputDialog.getText')
     @unittest.mock.patch('PyQt5.QtWidgets.QInputDialog.getText')
     @unittest.mock.patch('qubesmanager.settings.RenameVMThread')
     @unittest.mock.patch('qubesmanager.settings.RenameVMThread')
     def test_11_rename_vm(self, mock_thread, mock_input, _):
     def test_11_rename_vm(self, mock_thread, mock_input, _):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         self.assertTrue(self.dialog.rename_vm_button.isEnabled())
         self.assertTrue(self.dialog.rename_vm_button.isEnabled())
 
 
-        mock_input.return_value = ("testvm2", True)
+        mock_input.return_value = ("test-vm2", True)
         self.dialog.rename_vm_button.click()
         self.dialog.rename_vm_button.click()
 
 
-        mock_thread.assert_called_with(self.vm, "testvm2", unittest.mock.ANY)
+        mock_thread.assert_called_with(self.vm, "test-vm2", unittest.mock.ANY)
         mock_thread().start.assert_called_with()
         mock_thread().start.assert_called_with()
 
 
 # TODO: thread tests for rename
 # TODO: thread tests for rename
@@ -326,16 +321,16 @@ class VMSettingsTest(unittest.TestCase):
     @unittest.mock.patch('PyQt5.QtWidgets.QInputDialog.getText')
     @unittest.mock.patch('PyQt5.QtWidgets.QInputDialog.getText')
     @unittest.mock.patch('qubesmanager.common_threads.CloneVMThread')
     @unittest.mock.patch('qubesmanager.common_threads.CloneVMThread')
     def test_12_clone_vm(self, mock_thread, mock_input, _):
     def test_12_clone_vm(self, mock_thread, mock_input, _):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         self.assertTrue(self.dialog.clone_vm_button.isEnabled())
         self.assertTrue(self.dialog.clone_vm_button.isEnabled())
 
 
-        mock_input.return_value = ("testvm2", True)
+        mock_input.return_value = ("test-vm2", True)
         self.dialog.clone_vm_button.click()
         self.dialog.clone_vm_button.click()
 
 
-        mock_thread.assert_called_with(self.vm, "testvm2")
+        mock_thread.assert_called_with(self.vm, "test-vm2")
         mock_thread().start.assert_called_with()
         mock_thread().start.assert_called_with()
 
 
     @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox.warning')
     @unittest.mock.patch('PyQt5.QtWidgets.QMessageBox.warning')
@@ -343,19 +338,19 @@ class VMSettingsTest(unittest.TestCase):
     @unittest.mock.patch('PyQt5.QtWidgets.QInputDialog.getText')
     @unittest.mock.patch('PyQt5.QtWidgets.QInputDialog.getText')
     @unittest.mock.patch('qubesmanager.common_threads.RemoveVMThread')
     @unittest.mock.patch('qubesmanager.common_threads.RemoveVMThread')
     def test_13_remove_vm(self, mock_thread, mock_input, _, mock_warning):
     def test_13_remove_vm(self, mock_thread, mock_input, _, mock_warning):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "basic")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="basic")
 
 
         self.assertTrue(self.dialog.delete_vm_button.isEnabled())
         self.assertTrue(self.dialog.delete_vm_button.isEnabled())
 
 
         # try with a wrong name
         # try with a wrong name
-        mock_input.return_value = ("testvm2", True)
+        mock_input.return_value = ("test-vm2", True)
         self.dialog.delete_vm_button.click()
         self.dialog.delete_vm_button.click()
         self.assertEqual(mock_warning.call_count, 1)
         self.assertEqual(mock_warning.call_count, 1)
 
 
         # and now correct one
         # and now correct one
-        mock_input.return_value = ("testvm", True)
+        mock_input.return_value = ("test-vm", True)
         self.dialog.delete_vm_button.click()
         self.dialog.delete_vm_button.click()
 
 
         mock_thread.assert_called_with(self.vm)
         mock_thread.assert_called_with(self.vm)
@@ -363,9 +358,9 @@ class VMSettingsTest(unittest.TestCase):
 
 
 # Advanced Tab
 # Advanced Tab
     def test_20_advanced_loads(self):
     def test_20_advanced_loads(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
 
 
         self.assertEqual(self.dialog.init_mem.value(), self.vm.memory,
         self.assertEqual(self.dialog.init_mem.value(), self.vm.memory,
                          "Incorrect initial memory")
                          "Incorrect initial memory")
@@ -396,11 +391,11 @@ class VMSettingsTest(unittest.TestCase):
         self.assertTrue("PVH" in self.dialog.virt_mode.currentText())
         self.assertTrue("PVH" in self.dialog.virt_mode.currentText())
 
 
     def test_21_nondefaultmaxmem(self):
     def test_21_nondefaultmaxmem(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.vm.maxmem = 5000
         self.vm.maxmem = 5000
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
 
 
         self.assertEqual(self.dialog.max_mem_size.value(), 5000)
         self.assertEqual(self.dialog.max_mem_size.value(), 5000)
 
 
@@ -412,7 +407,7 @@ class VMSettingsTest(unittest.TestCase):
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
         self.assertFalse(self.dialog.include_in_balancing.isChecked())
         self.assertFalse(self.dialog.include_in_balancing.isChecked())
 
 
         self.dialog.include_in_balancing.setChecked(True)
         self.dialog.include_in_balancing.setChecked(True)
@@ -422,11 +417,11 @@ class VMSettingsTest(unittest.TestCase):
         self.assertEqual(self.vm.maxmem, 5000)
         self.assertEqual(self.vm.maxmem, 5000)
 
 
     def test_22_initmem(self):
     def test_22_initmem(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.vm.memory = 500
         self.vm.memory = 500
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
 
 
         self.assertEqual(self.dialog.init_mem.value(), 500,
         self.assertEqual(self.dialog.init_mem.value(), 500,
                          "Incorrect initial memory")
                          "Incorrect initial memory")
@@ -436,11 +431,11 @@ class VMSettingsTest(unittest.TestCase):
         self.assertEqual(self.vm.memory, 600, "Setting initial memory failed")
         self.assertEqual(self.vm.memory, 600, "Setting initial memory failed")
 
 
     def test_23_vcpus(self):
     def test_23_vcpus(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.vm.vcpus = 1
         self.vm.vcpus = 1
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
         self.assertEqual(self.dialog.vcpus.value(), 1,
         self.assertEqual(self.dialog.vcpus.value(), 1,
                          "Incorrect number of VCPUs")
                          "Incorrect number of VCPUs")
 
 
@@ -451,9 +446,10 @@ class VMSettingsTest(unittest.TestCase):
                          "Incorrect number of VCPUs")
                          "Incorrect number of VCPUs")
 
 
     def test_24_kernel(self):
     def test_24_kernel(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
+        self.dialog.show()
 
 
         new_kernel = self._set_noncurrent(self.dialog.kernel)
         new_kernel = self._set_noncurrent(self.dialog.kernel)
         self._click_ok()
         self._click_ok()
@@ -463,20 +459,22 @@ class VMSettingsTest(unittest.TestCase):
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
+        self.dialog.show()
         self._set_default(self.dialog.kernel)
         self._set_default(self.dialog.kernel)
 
 
         self._click_ok()
         self._click_ok()
         self.assertTrue(self.vm.property_is_default('kernel'))
         self.assertTrue(self.vm.property_is_default('kernel'))
 
 
     def test_25_virtmode_change(self):
     def test_25_virtmode_change(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
 
 
         modes = ["HVM", "PVH", "PV"]
         modes = ["HVM", "PVH", "PV"]
 
 
         for mode in modes:
         for mode in modes:
             self.dialog = vm_settings.VMSettingsWindow(
             self.dialog = vm_settings.VMSettingsWindow(
-                self.vm, self.qtapp, "advanced")
+                self.vm, qapp=self.qtapp, qubesapp=self.qapp,
+                init_page="advanced")
 
 
             self._set_value(self.dialog.virt_mode, mode)
             self._set_value(self.dialog.virt_mode, mode)
             self._click_ok()
             self._click_ok()
@@ -486,17 +484,17 @@ class VMSettingsTest(unittest.TestCase):
             self.dialog.deleteLater()
             self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
         self._set_default(self.dialog.virt_mode)
         self._set_default(self.dialog.virt_mode)
         self._click_ok()
         self._click_ok()
 
 
         self.assertTrue(self.vm.property_is_default('virt_mode'))
         self.assertTrue(self.vm.property_is_default('virt_mode'))
 
 
     def test_26_default_dispvm(self):
     def test_26_default_dispvm(self):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
 
 
         new_dvm = self._set_noncurrent(self.dialog.default_dispvm)
         new_dvm = self._set_noncurrent(self.dialog.default_dispvm)
         self._click_ok()
         self._click_ok()
@@ -506,7 +504,7 @@ class VMSettingsTest(unittest.TestCase):
         self.dialog.deleteLater()
         self.dialog.deleteLater()
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
         self._set_default(self.dialog.default_dispvm)
         self._set_default(self.dialog.default_dispvm)
         self._click_ok()
         self._click_ok()
 
 
@@ -514,13 +512,13 @@ class VMSettingsTest(unittest.TestCase):
 
 
     @unittest.mock.patch('subprocess.check_call')
     @unittest.mock.patch('subprocess.check_call')
     def test_27_boot_cdrom(self, mock_call):
     def test_27_boot_cdrom(self, mock_call):
-        self.vm = self.qapp.add_new_vm("AppVM", "testvm", "blue")
+        self.vm = self.qapp.add_new_vm("AppVM", "test-vm", "blue")
 
 
         self.dialog = vm_settings.VMSettingsWindow(
         self.dialog = vm_settings.VMSettingsWindow(
-            self.vm, self.qtapp, "advanced")
+            self.vm, qapp=self.qtapp, qubesapp=self.qapp, init_page="advanced")
 
 
         self.dialog.boot_from_device_button.click()
         self.dialog.boot_from_device_button.click()
-        mock_call.assert_called_with(['qubes-vm-boot-from-device', "testvm"])
+        mock_call.assert_called_with(['qubes-vm-boot-from-device', "test-vm"])
 
 
     def _click_ok(self):
     def _click_ok(self):
         okwidget = self.dialog.buttonBox.button(
         okwidget = self.dialog.buttonBox.button(