浏览代码

admin: fix handling default template in admin.vm.Create.* methods

Marek Marczykowski-Górecki 7 年之前
父节点
当前提交
0160d6e2f0
共有 2 个文件被更改,包括 12 次插入12 次删除
  1. 3 2
      qubes/api/admin.py
  2. 9 10
      qubes/tests/api_admin.py

+ 3 - 2
qubes/api/admin.py

@@ -584,8 +584,9 @@ class QubesAdminAPI(qubes.api.AbstractQubesAPI):
         # if argument is given, it needs to be a valid template, and only
         # when given VM class do need a template
         if hasattr(vm_class, 'template'):
-            assert self.arg in self.app.domains
-            kwargs['template'] = self.app.domains[self.arg]
+            if self.arg:
+                assert self.arg in self.app.domains
+                kwargs['template'] = self.app.domains[self.arg]
         else:
             assert not self.arg
 

+ 9 - 10
qubes/tests/api_admin.py

@@ -1052,19 +1052,18 @@ class TC_00_VMs(AdminAPITestCase):
         self.assertTrue(self.app.save.called)
 
     @unittest.mock.patch('qubes.storage.Storage.create')
-    def test_333_vm_create_app_missing_template(self, storage_mock):
+    def test_333_vm_create_app_default_template(self, storage_mock):
         storage_mock.side_effect = self.dummy_coro
-        with self.assertRaises(AssertionError):
-            self.call_mgmt_func(b'admin.vm.Create.AppVM',
-                b'dom0', b'', b'name=test-vm2 label=red')
+        self.call_mgmt_func(b'admin.vm.Create.AppVM',
+            b'dom0', b'', b'name=test-vm2 label=red')
 
-        self.assertNotIn('test-vm2', self.app.domains)
-        self.assertEqual(storage_mock.mock_calls, [])
-        self.assertFalse(os.path.exists(os.path.join(
-            self.test_base_dir, 'appvms', 'test-vm2')))
+        self.assertEqual(storage_mock.mock_calls,
+            [unittest.mock.call(self.app.domains['test-vm2']).create()])
 
-        self.assertNotIn('test-vm2', self.app.domains)
-        self.assertFalse(self.app.save.called)
+        self.assertIn('test-vm2', self.app.domains)
+        self.assertEqual(self.app.domains['test-vm2'].template,
+            self.app.default_template)
+        self.assertTrue(self.app.save.called)
 
     @unittest.mock.patch('qubes.storage.Storage.create')
     def test_334_vm_create_invalid_name(self, storage_mock):