Browse Source

tests: update for recent changes

- create_new_vm rework - especially new VM type selection
- minor changes in the main manager table
- rework of logs dialog (the test for the actual dialog is still
  missing, the current one only checks if it's called with proper
  arguments)
Marek Marczykowski-Górecki 3 years ago
parent
commit
96612fa355
2 changed files with 34 additions and 37 deletions
  1. 16 13
      qubesmanager/tests/test_create_new_vm.py
  2. 18 24
      qubesmanager/tests/test_qube_manager.py

+ 16 - 13
qubesmanager/tests/test_create_new_vm.py

@@ -171,8 +171,7 @@ class NewVmTest(unittest.TestCase):
         self.dialog.name.setText("test-vm")
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
-            if "standalone" in opt_text and "template" in opt_text and\
-                    "not based" not in opt_text and "empty" not in opt_text:
+            if "standalone" in opt_text:
                 self.dialog.vm_type.setCurrentIndex(i)
                 break
 
@@ -187,10 +186,11 @@ class NewVmTest(unittest.TestCase):
         self.dialog.name.setText("test-vm")
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
-            if "standalone" in opt_text and\
-                    ("not based" in opt_text or "empty" in opt_text):
+            if "standalone" in opt_text:
                 self.dialog.vm_type.setCurrentIndex(i)
                 break
+        # select "(none)" template
+        self.dialog.template_vm.setCurrentIndex(self.dialog.template_vm.count()-1)
 
         self.__click_ok()
         self.mock_thread.assert_called_once_with(
@@ -210,10 +210,11 @@ class NewVmTest(unittest.TestCase):
 
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
-            if "standalone" in opt_text and\
-                    ("not based" in opt_text or "empty" in opt_text):
+            if "standalone" in opt_text:
                 self.dialog.vm_type.setCurrentIndex(i)
                 break
+        # select "(none)" template
+        self.dialog.template_vm.setCurrentIndex(self.dialog.template_vm.count()-1)
 
         self.dialog.install_system.setChecked(False)
 
@@ -232,7 +233,7 @@ class NewVmTest(unittest.TestCase):
         # cannot install system on a template-based appvm
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
-            if "appvm" in opt_text and "standalone" not in opt_text:
+            if "appvm" in opt_text:
                 self.dialog.vm_type.setCurrentIndex(i)
                 break
         self.assertFalse(self.dialog.install_system.isEnabled())
@@ -242,24 +243,26 @@ class NewVmTest(unittest.TestCase):
         # or on a standalone vm cloned from a template
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
-            if "standalone" in opt_text and "template" in opt_text and\
-                    "not based" not in opt_text and "empty" not in opt_text:
+            if "standalone" in opt_text:
                 self.dialog.vm_type.setCurrentIndex(i)
                 break
+        # select default template
+        self.dialog.template_vm.setCurrentIndex(0)
         self.assertFalse(self.dialog.install_system.isEnabled())
         self.assertTrue(self.dialog.launch_settings.isEnabled())
         self.assertTrue(self.dialog.template_vm.isEnabled())
 
-        # cannot set a template but can install system on a truly empty AppVM
+        # can install system on a truly empty AppVM
         for i in range(self.dialog.vm_type.count()):
             opt_text = self.dialog.vm_type.itemText(i).lower()
-            if "standalone" in opt_text and\
-                    ("not based" in opt_text or "empty" in opt_text):
+            if "standalone" in opt_text:
                 self.dialog.vm_type.setCurrentIndex(i)
                 break
+        self.assertTrue(self.dialog.template_vm.isEnabled())
+        # select "(none)" template
+        self.dialog.template_vm.setCurrentIndex(self.dialog.template_vm.count()-1)
         self.assertTrue(self.dialog.install_system.isEnabled())
         self.assertTrue(self.dialog.launch_settings.isEnabled())
-        self.assertFalse(self.dialog.template_vm.isEnabled())
 
     def __click_ok(self):
         okwidget = self.dialog.buttonBox.button(

+ 18 - 24
qubesmanager/tests/test_qube_manager.py

@@ -156,9 +156,8 @@ class QubeManagerTest(unittest.TestCase):
         for row in range(self.dialog.table.model().rowCount()):
             vm = self._get_table_vm(row)
 
-            incl_backups_item = self._get_table_item(row, "Include in backups")
+            incl_backups_item = self._get_table_item(row, "Backup", Qt.CheckStateRole) == Qt.Checked
             incl_backups_value = getattr(vm, 'include_in_backups', False)
-            incl_backups_value = "Yes" if incl_backups_value else ""
 
             self.assertEqual(
                 incl_backups_value, incl_backups_item,
@@ -186,7 +185,7 @@ class QubeManagerTest(unittest.TestCase):
             def_dispvm_item = self._get_table_item(row, "Default DispVM")
             if vm.property_is_default("default_dispvm"):
                 def_dispvm_value = "default ({})".format(
-                    self.qapp.default_dispvm)
+                    vm.property_get_default("default_dispvm"))
             else:
                 def_dispvm_value = getattr(vm, "default_dispvm", None)
 
@@ -313,6 +312,8 @@ class QubeManagerTest(unittest.TestCase):
     def test_204_vm_keyboard(self, mock_message):
         selected_vm = self._select_non_admin_vm(running=True)
         self.assertIsNotNone(selected_vm, "No valid non-admin VM found")
+        if 'supported-feature.keyboard-layout' not in selected_vm.features:
+            self.skipTest("VM {!s} does not support new layout change".format(selected_vm))
         widget = self.dialog.toolbar.widgetForAction(
             self.dialog.action_set_keyboard_layout)
         with unittest.mock.patch.object(selected_vm, 'run') as mock_run:
@@ -333,9 +334,6 @@ class QubeManagerTest(unittest.TestCase):
                                     QtCore.Qt.LeftButton)
             self.assertEqual(mock_run.call_count, 0,
                              "Keyboard change called on a halted VM")
-        self.assertEqual(mock_message.call_count, 0,
-                         "Keyboard change called on a halted VM with"
-                         " obsolete keyboard-layout handling")
 
     def test_206_dom0_keyboard(self):
         self._select_admin_vm()
@@ -1133,32 +1131,28 @@ class QubeManagerTest(unittest.TestCase):
             else:
                 self.assertEqual(call_count, 0)
 
-    def test_500_logs(self):
+    @unittest.mock.patch('qubesmanager.log_dialog.LogDialog')
+    def test_500_logs(self, mock_log_dialog):
         self._select_admin_vm()
 
-        self.assertTrue(self.dialog.logs_menu.isEnabled())
-
-        dom0_logs = set()
-        for c in self.dialog.logs_menu.actions():
-            dom0_logs.add(c.text())
-            self.assertIsNotNone(
-                c.data(), "Empty log file found: {}".format(c.text()))
-            self.assertIn("hypervisor", c.text(),
+        self.dialog.action_show_logs.trigger()
+        mock_log_dialog.assert_called_once()
+        dom0_logs = mock_log_dialog.mock_calls[0][1][1]
+        for c in dom0_logs:
+            self.assertIn("hypervisor", c,
                           "Log for dom0 does not contain 'hypervisor'")
 
-        selected_vm = self._select_non_admin_vm(running=True).name
+        mock_log_dialog.reset_mock()
 
-        self.assertTrue(self.dialog.logs_menu.isEnabled())
+        selected_vm = self._select_non_admin_vm(running=True).name
 
-        vm_logs = set()
-        for c in self.dialog.logs_menu.actions():
-            vm_logs.add(c.text())
-            self.assertIsNotNone(
-                c.data(),
-                "Empty log file found: {}".format(c.text()))
+        self.dialog.action_show_logs.trigger()
+        mock_log_dialog.assert_called_once()
+        vm_logs = mock_log_dialog.mock_calls[0][1][1]
+        for c in vm_logs:
             self.assertIn(
                 selected_vm,
-                c.text(),
+                c,
                 "Log for {} does not contain its name".format(selected_vm))
 
         self.assertNotEqual(dom0_logs, vm_logs,