3535class TestApp (qubes .tests .vm .TestApp ):
3636 def __init__ (self ):
3737 super (TestApp , self ).__init__ ()
38- self .qid_counter = 1
38+ self .qid_counter = 0
3939
4040 def add_new_vm (self , cls , ** kwargs ):
4141 qid = self .qid_counter
42- self .qid_counter += 1
43- vm = cls (self , None , qid = qid , ** kwargs )
42+ if self .qid_counter == 0 :
43+ self .qid_counter += 1
44+ vm = cls (self , None , ** kwargs )
45+ else :
46+ self .qid_counter += 1
47+ vm = cls (self , None , qid = qid , ** kwargs )
4448 self .domains [vm .name ] = vm
4549 self .domains [vm ] = vm
4650 return vm
@@ -58,6 +62,8 @@ def setUp(self):
5862 name = "linux-kernel"
5963 )
6064 self .app .vmm .offline_mode = True
65+ self .app .default_dispvm = None
66+ self .adminvm = self .app .add_new_vm (qubes .vm .adminvm .AdminVM )
6167 self .template = self .app .add_new_vm (
6268 qubes .vm .templatevm .TemplateVM , name = "test-template" , label = "red"
6369 )
@@ -68,8 +74,12 @@ def setUp(self):
6874 template = self .template ,
6975 label = "red" ,
7076 )
71- self .app .domains [self .appvm .name ] = self .appvm
72- self .app .domains [self .appvm ] = self .appvm
77+ self .appvm_alt = self .app .add_new_vm (
78+ qubes .vm .appvm .AppVM ,
79+ name = "test-vm-alt" ,
80+ template = self .template ,
81+ label = "red" ,
82+ )
7383 self .addCleanup (self .cleanup_dispvm )
7484 self .emitter = qubes .tests .TestEmitter ()
7585
@@ -83,10 +93,15 @@ def cleanup_dispvm(self):
8393 del self .dispvm
8494 self .template .close ()
8595 self .appvm .close ()
86- del self .template
96+ self .appvm_alt . close ()
8797 del self .appvm
98+ del self .appvm_alt
99+ del self .template
100+ del self .adminvm
101+ self .app .close ()
88102 self .app .domains .clear ()
89103 self .app .pools .clear ()
104+ del self .app
90105
91106 async def mock_coro (self , * args , ** kwargs ):
92107 pass
@@ -275,6 +290,49 @@ def test_000_from_appvm_preload_fill_gap(
275290 mock_symlink .assert_not_called ()
276291 mock_makedirs .assert_called_once ()
277292
293+ def test_000_get_preload_max (self ):
294+ self .assertEqual (qubes .vm .dispvm .get_preload_max (self .appvm ), None )
295+ self .appvm .features ["supported-rpc.qubes.WaitForRunningSystem" ] = True
296+ self .appvm .features ["preload-dispvm-max" ] = 1
297+ self .assertEqual (qubes .vm .dispvm .get_preload_max (self .appvm ), 1 )
298+ self .assertEqual (qubes .vm .dispvm .get_preload_max (self .adminvm ), None )
299+ self .adminvm .features ["preload-dispvm-max" ] = ""
300+ self .assertEqual (qubes .vm .dispvm .get_preload_max (self .adminvm ), "" )
301+ self .adminvm .features ["preload-dispvm-max" ] = 2
302+ self .assertEqual (qubes .vm .dispvm .get_preload_max (self .adminvm ), 2 )
303+
304+ def test_000_get_preload_templates (self ):
305+ get_preload_templates = qubes .vm .dispvm .get_preload_templates
306+ self .assertEqual (get_preload_templates (self .app ), [])
307+ self .appvm .template_for_dispvms = True
308+ self .appvm_alt .template_for_dispvms = True
309+ self .assertEqual (get_preload_templates (self .app ), [])
310+
311+ self .appvm .features ["supported-rpc.qubes.WaitForRunningSystem" ] = True
312+ self .appvm_alt .features ["supported-rpc.qubes.WaitForRunningSystem" ] = (
313+ True
314+ )
315+ self .appvm .features ["preload-dispvm-max" ] = 1
316+ self .appvm_alt .features ["preload-dispvm-max" ] = 0
317+ self .assertEqual (get_preload_templates (self .app ), [self .appvm ])
318+
319+ self .adminvm .features ["preload-dispvm-max" ] = ""
320+ # Still not default_dispvm
321+ self .appvm_alt .features ["preload-dispvm-max" ] = 1
322+ self .assertEqual (
323+ get_preload_templates (self .app ), [self .appvm , self .appvm_alt ]
324+ )
325+
326+ with mock .patch .object (self .appvm , "fire_event_async" ):
327+ self .app .default_dispvm = self .appvm
328+ self .assertEqual (get_preload_templates (self .app ), [self .appvm_alt ])
329+
330+ self .app .default_dispvm = None
331+ self .adminvm .features ["preload-dispvm-max" ] = 1
332+ self .assertEqual (
333+ get_preload_templates (self .app ), [self .appvm , self .appvm_alt ]
334+ )
335+
278336 def test_001_from_appvm_reject_not_allowed (self ):
279337 with self .assertRaises (qubes .exc .QubesException ):
280338 dispvm = self .loop .run_until_complete (
0 commit comments