@@ -35,7 +35,10 @@ def setUp(self):
3535 b'template2 class=TemplateVM state=Running\n ' \
3636 b'vm2 class=AppVM state=Running\n ' \
3737 b'sys-net class=AppVM state=Running\n ' \
38- b'sys-firewall class=AppVM state=Running\n '
38+ b'sys-firewall class=AppVM state=Running\n ' \
39+ b'test-dvm class=AppVM state=Running\n ' \
40+ b'disp1 class=DispVM state=Running\n ' \
41+ b'disp2 class=DispVM state=Running\n '
3942
4043 self .global_properties = ['default_dispvm' , 'default_netvm' ,
4144 'default_guivm' , 'default_audiovm' ,
@@ -47,13 +50,20 @@ def setUp(self):
4750 ('dom0' , 'admin.property.Get' , prop , None )] = \
4851 b'0\x00 default=True type=vm vm2'
4952
50- self .vms = ['vm1' , 'vm2' , 'sys-net' , 'sys-firewall' ,
51- 'template1' , 'template2' ]
53+ self .vms = [
54+ 'vm1' , 'vm2' , 'sys-net' , 'sys-firewall' , 'template1' , 'template2' ,
55+ 'test-dvm' , 'disp1' , 'disp2' ,
56+ ]
5257
53- self .vm_properties = ['template' , 'netvm' , 'guivm' , 'audiovm' ,
54- 'default_dispvm' , 'management_dispvm' ]
58+ self .vm_properties = [
59+ 'template' , 'netvm' , 'guivm' , 'audiovm' , 'default_dispvm' ,
60+ 'management_dispvm'
61+ ]
5562
5663 for vm in self .vms :
64+ self .app .expected_calls [
65+ (vm , 'admin.vm.property.Get' , 'is_preload' , None )
66+ ] = b'2\0 QubesNoSuchPropertyError\0 \0 invalid property\0 '
5767 for prop in self .vm_properties :
5868 if not prop .startswith ('template' ) or \
5969 not vm .startswith ('template' ):
@@ -65,6 +75,7 @@ def setUp(self):
6575 (vm , 'admin.vm.property.Get' , prop , None )] = \
6676 b'2\0 QubesNoSuchPropertyError\0 \0 invalid property\0 '
6777
78+
6879 def test_00_only_global (self ):
6980 result = qubesadmin .utils .vm_dependencies (self .app ,
7081 self .app .domains ['vm2' ])
@@ -114,6 +125,27 @@ def test_04_defaults(self):
114125
115126 self .assertListEqual (result , [(self .app .domains ['vm1' ], 'netvm' )])
116127
128+ def test_05_preloaded_disposables (self ):
129+ self .app .expected_calls [
130+ ('disp1' , 'admin.vm.property.Get' , 'template' , None )
131+ ] = b'0\x00 default=False type=vm test-dvm'
132+ self .app .expected_calls [
133+ ('disp2' , 'admin.vm.property.Get' , 'template' , None )
134+ ] = b'0\x00 default=False type=vm test-dvm'
135+ self .app .expected_calls [
136+ ('disp1' , 'admin.vm.property.Get' , 'is_preload' , None )
137+ ] = b'0\x00 default=False type=bool False'
138+ self .app .expected_calls [
139+ ('disp2' , 'admin.vm.property.Get' , 'is_preload' , None )
140+ ] = b'0\x00 default=False type=bool True'
141+
142+ result = qubesadmin .utils .vm_dependencies (
143+ self .app , self .app .domains ['test-dvm' ]
144+ )
145+ self .assertListEqual (
146+ result , [(self .app .domains ['disp1' ], 'template' )]
147+ )
148+
117149
118150class TestVMExecEncode (qubesadmin .tests .QubesTestCase ):
119151 def test_00_encode (self ):
0 commit comments