@@ -45,12 +45,73 @@ def test_100_dependencies(self, mock_dependencies):
4545        self .app .expected_calls [
4646            ('some-vm' , 'admin.vm.Remove' , None , None )] =  \
4747            b'2\x00 QubesVMInUseError\x00 \x00 An error occurred\x00 ' 
48+         self .app .expected_calls [
49+             ('some-vm' , 'admin.vm.property.Get' , 'is_preload' , None )] =  \
50+             b'2\x00 QubesNoSuchPropertyError\x00 \x00 Invalid property\x00 ' 
4851
4952        mock_dependencies .return_value  =  \
5053            [(None , 'default_template' ), (self .app .domains ['some-vm' ], 'netvm' )]
51- 
5254        with  self .assertRaises (SystemExit ):
5355            qubesadmin .tools .qvm_remove .main (['-f' , 'some-vm' ], app = self .app )
56+         mock_dependencies .assert_called_once ()
57+ 
58+     @unittest .mock .patch ('qubesadmin.utils.vm_dependencies' ) 
59+     def  test_101_dvm_dependencies (self , mock_dependencies ):
60+         self .app .expected_calls [
61+             ('dom0' , 'admin.vm.List' , None , None )] =  \
62+             b'0\x00 some-template class=TemplateVM state=Halted\n '  \
63+             b'some-vm class=AppVM state=Running\n '  \
64+             b'some-dvm class=AppVM state=Running\n '  \
65+             b'some-disp class=DispVM state=Running\n '  \
66+             b'some-disp2 class=DispVM state=Running\n ' 
67+         self .app .expected_calls [
68+             ('some-dvm' , 'admin.vm.Remove' , None , None )] =  \
69+             b'2\x00 QubesVMInUseError\x00 \x00 An error occurred\x00 ' 
70+         self .app .expected_calls [
71+             ('some-vm' , 'admin.vm.property.Get' , 'is_preload' , None )] =  \
72+             b'2\x00 QubesNoSuchPropertyError\x00 \x00 Invalid property\x00 ' 
73+ 
74+         # Cannot remove while it is default_dispvm of the system. 
75+         mock_dependencies .return_value  =  \
76+             [(None , 'default_dispvm' )]
77+         with  self .assertRaises (SystemExit ):
78+             qubesadmin .tools .qvm_remove .main (['-f' , 'some-dvm' ], app = self .app )
79+         mock_dependencies .assert_called_once ()
80+         mock_dependencies .reset_mock ()
5481
55-         self .assertTrue (mock_dependencies .called ,
56-                         "Dependencies check not called." )
82+         # Cannot remove while it is default_dispvm of a qube. 
83+         mock_dependencies .return_value  =  \
84+             [(self .app .domains ['some-vm' ], 'default_dispvm' )]
85+         with  self .assertRaises (SystemExit ):
86+             qubesadmin .tools .qvm_remove .main (['-f' , 'some-dvm' ], app = self .app )
87+         mock_dependencies .assert_called_once ()
88+         mock_dependencies .reset_mock ()
89+ 
90+         # Cannot remove while it is default_dispvm of its own disposable. 
91+         self .app .expected_calls [
92+             ('some-disp' , 'admin.vm.property.Get' , 'is_preload' , None )] =  \
93+             b'0\x00 default=False type=bool False' 
94+         mock_dependencies .return_value  =  \
95+             [(self .app .domains ['some-disp' ], 'default_dispvm' )]
96+         with  self .assertRaises (SystemExit ):
97+             qubesadmin .tools .qvm_remove .main (['-f' , 'some-dvm' ], app = self .app )
98+         mock_dependencies .assert_called_once ()
99+         mock_dependencies .reset_mock ()
100+ 
101+         # Cannot remove while it is template of non preload. 
102+         self .app .expected_calls [
103+             ('some-disp' , 'admin.vm.property.Get' , 'is_preload' , None )] =  \
104+             b'0\x00 default=False type=bool True' 
105+         self .app .expected_calls [
106+             ('some-disp2' , 'admin.vm.property.Get' , 'is_preload' , None )] =  \
107+             b'0\x00 default=False type=bool False' 
108+         mock_dependencies .return_value  =  [
109+             (self .app .domains ['some-disp' ], 'template' ),
110+             (self .app .domains ['some-disp2' ], 'template' )
111+         ]
112+         with  self .assertRaises (SystemExit ):
113+             qubesadmin .tools .qvm_remove .main (['-f' , 'some-dvm' ], app = self .app )
114+         mock_dependencies .assert_called_once ()
115+         mock_dependencies .reset_mock ()
116+ 
117+         self .assertAllCalled ()
0 commit comments