tools: qvm-start
The tool and tests for it.
This commit is contained in:
		
							parent
							
								
									8f7b902034
								
							
						
					
					
						commit
						b6d06d856d
					
				
							
								
								
									
										67
									
								
								qubesmgmt/tests/tools/qvm_start.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										67
									
								
								qubesmgmt/tests/tools/qvm_start.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,67 @@ | ||||
| # -*- encoding: utf8 -*- | ||||
| # | ||||
| # The Qubes OS Project, http://www.qubes-os.org | ||||
| # | ||||
| # Copyright (C) 2017 Marek Marczykowski-Górecki | ||||
| #                               <marmarek@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU Lesser General Public License as published by | ||||
| # the Free Software Foundation; either version 2.1 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General Public License along | ||||
| # with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| import qubesmgmt.tests | ||||
| import qubesmgmt.tests.tools | ||||
| import qubesmgmt.tools.qvm_start | ||||
| 
 | ||||
| 
 | ||||
| class TC_00_qvm_start(qubesmgmt.tests.QubesTestCase): | ||||
|     def test_000_with_vm(self): | ||||
|         self.app.expected_calls[ | ||||
|             ('dom0', 'mgmt.vm.List', None, None)] = \ | ||||
|             b'0\x00some-vm class=AppVM state=Running\n' | ||||
|         self.app.expected_calls[ | ||||
|             ('some-vm', 'mgmt.vm.Start', None, None)] = b'0\x00' | ||||
|         qubesmgmt.tools.qvm_start.main(['some-vm'], app=self.app) | ||||
|         self.assertAllCalled() | ||||
| 
 | ||||
|     def test_001_missing_vm(self): | ||||
|         with self.assertRaises(SystemExit): | ||||
|             with qubesmgmt.tests.tools.StderrBuffer() as stderr: | ||||
|                 qubesmgmt.tools.qvm_start.main([], app=self.app) | ||||
|         self.assertIn('one of the arguments --all VMNAME is required', | ||||
|             stderr.getvalue()) | ||||
|         self.assertAllCalled() | ||||
| 
 | ||||
|     def test_002_invalid_vm(self): | ||||
|         self.app.expected_calls[ | ||||
|             ('dom0', 'mgmt.vm.List', None, None)] = \ | ||||
|             b'0\x00some-vm class=AppVM state=Running\n' | ||||
|         with self.assertRaises(SystemExit): | ||||
|             with qubesmgmt.tests.tools.StderrBuffer() as stderr: | ||||
|                 qubesmgmt.tools.qvm_start.main(['no-such-vm'], app=self.app) | ||||
|         self.assertIn('no such domain', stderr.getvalue()) | ||||
|         self.assertAllCalled() | ||||
| 
 | ||||
|     def test_003_already_running(self): | ||||
|         # TODO: some option to ignore this error? | ||||
|         self.app.expected_calls[ | ||||
|             ('some-vm', 'mgmt.vm.Start', None, None)] = \ | ||||
|             b'2\x00QubesVMNotHaltedError\x00\x00Domain is running: ' \ | ||||
|             b'some-vm\x00' | ||||
|         self.app.expected_calls[ | ||||
|             ('dom0', 'mgmt.vm.List', None, None)] = \ | ||||
|             b'0\x00some-vm class=AppVM state=Running\n' | ||||
|         self.assertEqual( | ||||
|             qubesmgmt.tools.qvm_start.main(['some-vm'], app=self.app), | ||||
|             1) | ||||
|         self.assertAllCalled() | ||||
| 
 | ||||
							
								
								
									
										58
									
								
								qubesmgmt/tools/qvm_start.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										58
									
								
								qubesmgmt/tools/qvm_start.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,58 @@ | ||||
| # -*- encoding: utf8 -*- | ||||
| # | ||||
| # The Qubes OS Project, http://www.qubes-os.org | ||||
| # | ||||
| # Copyright (C) 2017 Marek Marczykowski-Górecki | ||||
| #                               <marmarek@invisiblethingslab.com> | ||||
| # | ||||
| # This program is free software; you can redistribute it and/or modify | ||||
| # it under the terms of the GNU Lesser General Public License as published by | ||||
| # the Free Software Foundation; either version 2.1 of the License, or | ||||
| # (at your option) any later version. | ||||
| # | ||||
| # This program is distributed in the hope that it will be useful, | ||||
| # but WITHOUT ANY WARRANTY; without even the implied warranty of | ||||
| # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the | ||||
| # GNU Lesser General Public License for more details. | ||||
| # | ||||
| # You should have received a copy of the GNU Lesser General Public License along | ||||
| # with this program; if not, see <http://www.gnu.org/licenses/>. | ||||
| 
 | ||||
| '''qvm-start - start a domain''' | ||||
| 
 | ||||
| 
 | ||||
| import sys | ||||
| import qubesmgmt.exc | ||||
| import qubesmgmt.tools | ||||
| 
 | ||||
| parser = qubesmgmt.tools.QubesArgumentParser( | ||||
|     description='start a domain', vmname_nargs='+') | ||||
| 
 | ||||
| parser.add_argument('--skip-if-running', | ||||
|     action='store_true', default=False, | ||||
|     help='Do not fail if the qube is already runnning') | ||||
| 
 | ||||
| def main(args=None, app=None): | ||||
|     '''Main routine of :program:`qvm-start`. | ||||
| 
 | ||||
|     :param list args: Optional arguments to override those delivered from \ | ||||
|         command line. | ||||
|     ''' | ||||
| 
 | ||||
|     args = parser.parse_args(args, app=app) | ||||
| 
 | ||||
|     exit_code = 0 | ||||
|     for domain in args.domains: | ||||
|         if args.skip_if_running and domain.is_running(): | ||||
|             continue | ||||
|         try: | ||||
|             domain.start() | ||||
|         except (IOError, OSError, qubesmgmt.exc.QubesException) as e: | ||||
|             exit_code = 1 | ||||
|             parser.print_error(str(e)) | ||||
| 
 | ||||
|     return exit_code | ||||
| 
 | ||||
| 
 | ||||
| if __name__ == '__main__': | ||||
|     sys.exit(main()) | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user
	 Marek Marczykowski-Górecki
						Marek Marczykowski-Górecki