Add specific exception for qubesd communication error

This commit is contained in:
Marek Marczykowski-Górecki 2017-03-11 01:41:58 +01:00
parent 9d5e974c5b
commit 5615510da5
No known key found for this signature in database
GPG Key ID: 063938BA42CFA724
3 changed files with 22 additions and 5 deletions

View File

@ -69,6 +69,11 @@ class PropertyHolder(object):
In case of success, return actual data. In case of error,
raise appropriate exception.
'''
if len(response_data) == 0:
raise qubesmgmt.exc.QubesDaemonNoResponseError(
'Got empty response from qubesd')
if response_data[0:2] == b'\x30\x00':
return response_data[2:]
elif response_data[0:2] == b'\x32\x00':
@ -89,7 +94,8 @@ class PropertyHolder(object):
# TODO: handle traceback if given
raise exc_class(format_string, *args)
else:
raise qubesmgmt.exc.QubesException('Invalid response format')
raise qubesmgmt.exc.QubesDaemonCommunicationError(
'Invalid response format')
def property_list(self):
'''

View File

@ -101,3 +101,13 @@ class BackupCancelledError(QubesException):
class QubesMemoryError(QubesException, MemoryError):
'''Cannot start domain, because not enough memory is available'''
class QubesDaemonCommunicationError(QubesException, IOError):
'''Error while communicating with qubesd, may mean insufficient
permissions, as well'''
# pylint: disable=too-many-ancestors
class QubesDaemonNoResponseError(QubesDaemonCommunicationError):
'''Got empty response from qubesd'''

View File

@ -51,8 +51,9 @@ class TC_00_Errors(qubesmgmt.tests.QubesTestCase):
self.assertEqual(str(context.exception), 'An error occurred: 1, 2')
def test_010_empty(self):
self.app.expected_calls[('dom0', 'mgmt.vm.List', None, None)] = b''\
# FIXME: change to appropriate exception when defined
with self.assertRaises(qubesmgmt.exc.QubesException) as context:
self.app.expected_calls[('dom0', 'mgmt.vm.List', None, None)] = b''
with self.assertRaises(qubesmgmt.exc.QubesDaemonNoResponseError) \
as context:
vms = list(self.app.domains)
self.assertEqual(str(context.exception), 'Invalid response format')
self.assertEqual(str(context.exception),
'Got empty response from qubesd')