Merge "Use public and unified method get_console_url()"

This commit is contained in:
Jenkins 2017-03-15 04:16:22 +00:00 committed by Gerrit Code Review
commit f6d5803816
2 changed files with 38 additions and 24 deletions

View File

@ -595,30 +595,34 @@ echo -e '%s\tALL=(ALL)\tNOPASSWD: ALL' >> /etc/sudoers
class ConsoleUrls(collections.Mapping):
def __init__(self, server):
self.console_methods = {
'novnc': server.get_vnc_console,
'xvpvnc': server.get_vnc_console,
'spice-html5': server.get_spice_console,
'rdp-html5': server.get_rdp_console,
'serial': server.get_serial_console
}
self.console_method = server.get_console_url
self.support_console_types = ['novnc', 'xvpvnc',
'spice-html5', 'rdp-html5',
'serial']
def __getitem__(self, key):
try:
url = self.console_methods[key](key)['console']['url']
except exceptions.BadRequest as e:
if key not in self.support_console_types:
raise exceptions.UnsupportedConsoleType(key)
data = self.console_method(key)
console_data = data.get(
'remote_console', data.get('console'))
url = console_data['url']
except (exceptions.BadRequest,
exceptions.UnsupportedConsoleType) as e:
unavailable = 'Unavailable console type'
if unavailable in e.message:
unsupport = 'Unsupported console_type'
if unavailable in e.message or unsupport in e.message:
url = e.message
else:
raise
return url
def __len__(self):
return len(self.console_methods)
return len(self.support_console_types)
def __iter__(self):
return (key for key in self.console_methods)
return (key for key in self.support_console_types)
return ConsoleUrls(server)

View File

@ -637,11 +637,11 @@ class KeypairConstraintTest(common.HeatTestCase):
class ConsoleUrlsTest(common.HeatTestCase):
scenarios = [
('novnc', dict(console_type='novnc', srv_method='vnc')),
('xvpvnc', dict(console_type='xvpvnc', srv_method='vnc')),
('spice', dict(console_type='spice-html5', srv_method='spice')),
('rdp', dict(console_type='rdp-html5', srv_method='rdp')),
('serial', dict(console_type='serial', srv_method='serial')),
('novnc', dict(console_type='novnc')),
('xvpvnc', dict(console_type='xvpvnc')),
('spice', dict(console_type='spice-html5')),
('rdp', dict(console_type='rdp-html5')),
('serial', dict(console_type='serial')),
]
def setUp(self):
@ -652,8 +652,7 @@ class ConsoleUrlsTest(common.HeatTestCase):
self.nova_plugin = c.client_plugin('nova')
self.nova_plugin.client = lambda: self.nova_client
self.server = mock.Mock()
self.console_method = getattr(self.server,
'get_%s_console' % self.srv_method)
self.console_method = getattr(self.server, 'get_console_url')
def test_get_console_url(self):
console = {
@ -670,17 +669,28 @@ class ConsoleUrlsTest(common.HeatTestCase):
self.assertEqual(console['console']['url'], console_url)
self.console_method.assert_called_once_with(self.console_type)
def test_get_console_url_tolerate_unavailable(self):
msg = 'Unavailable console type %s.' % self.console_type
self.console_method.side_effect = nova_exceptions.BadRequest(
400, message=msg)
def _test_get_console_url_tolerate_exception(self, msg):
console_url = self.nova_plugin.get_console_urls(self.server)[
self.console_type]
self.console_method.assert_called_once_with(self.console_type)
self.assertEqual(msg, console_url)
def test_get_console_url_tolerate_unavailable(self):
msg = 'Unavailable console type %s.' % self.console_type
self.console_method.side_effect = nova_exceptions.BadRequest(
400, message=msg)
self._test_get_console_url_tolerate_exception(msg)
def test_get_console_url_tolerate_unsupport(self):
msg = 'Unsupported console_type "%s"' % self.console_type
self.console_method.side_effect = (
nova_exceptions.UnsupportedConsoleType(
console_type=self.console_type))
self._test_get_console_url_tolerate_exception(msg)
def test_get_console_urls_reraises_other_400(self):
exc = nova_exceptions.BadRequest
self.console_method.side_effect = exc(400, message="spam")