Merge "Make test_consoles to directly call controller methods"

This commit is contained in:
Jenkins
2015-01-19 06:06:48 +00:00
committed by Gerrit Code Review
@@ -14,9 +14,12 @@
# under the License.
import mock
from oslo.serialization import jsonutils
import webob
from nova.api.openstack.compute.contrib import consoles \
as console_v2
from nova.api.openstack.compute.plugins.v3 import remote_consoles \
as console_v21
from nova.compute import api as compute_api
from nova import exception
from nova import test
@@ -104,11 +107,8 @@ def fake_get_not_found(self, context, instance_uuid, want_objects=False,
class ConsolesExtensionTestV21(test.NoDBTestCase):
url = '/v2/fake/servers/1/action'
def _setup_wsgi(self):
self.app = fakes.wsgi_app_v21(init_only=('servers',
'os-remote-consoles'))
controller_class = console_v21.RemoteConsolesController
validation_error = exception.ValidationError
def setUp(self):
super(ConsolesExtensionTestV21, self).setUp()
@@ -121,18 +121,19 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
self.stubs.Set(compute_api.API, 'get_serial_console',
fake_get_serial_console)
self.stubs.Set(compute_api.API, 'get', fake_get)
self._setup_wsgi()
self.controller = self.controller_class()
def _check_console_failure(self, func, exception, body):
req = fakes.HTTPRequest.blank('')
self.assertRaises(exception,
eval(func),
req, fakes.FAKE_UUID, body=body)
def test_get_vnc_console(self):
body = {'os-getVNCConsole': {'type': 'novnc'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
output = jsonutils.loads(res.body)
self.assertEqual(res.status_int, 200)
req = fakes.HTTPRequest.blank('')
output = self.controller.get_vnc_console(req, fakes.FAKE_UUID,
body=body)
self.assertEqual(output,
{u'console': {u'url': u'http://fake', u'type': u'novnc'}})
@@ -140,97 +141,63 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
self.stubs.Set(compute_api.API, 'get_vnc_console',
fake_get_vnc_console_not_ready)
body = {'os-getVNCConsole': {'type': 'novnc'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
jsonutils.loads(res.body)
self.assertEqual(res.status_int, 409)
self._check_console_failure('self.controller.get_vnc_console',
webob.exc.HTTPConflict,
body)
def test_get_vnc_console_no_type(self):
self.stubs.Set(compute_api.API, 'get_vnc_console',
fake_get_vnc_console_invalid_type)
body = {'os-getVNCConsole': {}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_vnc_console',
self.validation_error,
body)
def test_get_vnc_console_no_instance(self):
self.stubs.Set(compute_api.API, 'get', fake_get_not_found)
body = {'os-getVNCConsole': {'type': 'novnc'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_vnc_console',
webob.exc.HTTPNotFound,
body)
def test_get_vnc_console_no_instance_on_console_get(self):
self.stubs.Set(compute_api.API, 'get_vnc_console',
fake_get_vnc_console_not_found)
body = {'os-getVNCConsole': {'type': 'novnc'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_vnc_console',
webob.exc.HTTPNotFound,
body)
def test_get_vnc_console_invalid_type(self):
body = {'os-getVNCConsole': {'type': 'invalid'}}
self.stubs.Set(compute_api.API, 'get_vnc_console',
fake_get_vnc_console_invalid_type)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_vnc_console',
self.validation_error,
body)
def test_get_vnc_console_type_unavailable(self):
body = {'os-getVNCConsole': {'type': 'unavailable'}}
self.stubs.Set(compute_api.API, 'get_vnc_console',
fake_get_vnc_console_type_unavailable)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(400, res.status_int)
self._check_console_failure('self.controller.get_vnc_console',
self.validation_error,
body)
def test_get_vnc_console_not_implemented(self):
self.stubs.Set(compute_api.API, 'get_vnc_console',
fakes.fake_not_implemented)
body = {'os-getVNCConsole': {'type': 'novnc'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 501)
self._check_console_failure('self.controller.get_vnc_console',
webob.exc.HTTPNotImplemented,
body)
def test_get_spice_console(self):
body = {'os-getSPICEConsole': {'type': 'spice-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
output = jsonutils.loads(res.body)
self.assertEqual(res.status_int, 200)
req = fakes.HTTPRequest.blank('')
output = self.controller.get_spice_console(req, fakes.FAKE_UUID,
body=body)
self.assertEqual(output,
{u'console': {u'url': u'http://fake', u'type': u'spice-html5'}})
@@ -238,96 +205,62 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
self.stubs.Set(compute_api.API, 'get_spice_console',
fake_get_spice_console_not_ready)
body = {'os-getSPICEConsole': {'type': 'spice-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
jsonutils.loads(res.body)
self.assertEqual(res.status_int, 409)
self._check_console_failure('self.controller.get_spice_console',
webob.exc.HTTPConflict,
body)
def test_get_spice_console_no_type(self):
self.stubs.Set(compute_api.API, 'get_spice_console',
fake_get_spice_console_invalid_type)
body = {'os-getSPICEConsole': {}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_spice_console',
self.validation_error,
body)
def test_get_spice_console_no_instance(self):
self.stubs.Set(compute_api.API, 'get', fake_get_not_found)
body = {'os-getSPICEConsole': {'type': 'spice-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_spice_console',
webob.exc.HTTPNotFound,
body)
def test_get_spice_console_no_instance_on_console_get(self):
self.stubs.Set(compute_api.API, 'get_spice_console',
fake_get_spice_console_not_found)
body = {'os-getSPICEConsole': {'type': 'spice-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_spice_console',
webob.exc.HTTPNotFound,
body)
def test_get_spice_console_invalid_type(self):
body = {'os-getSPICEConsole': {'type': 'invalid'}}
self.stubs.Set(compute_api.API, 'get_spice_console',
fake_get_spice_console_invalid_type)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_spice_console',
self.validation_error,
body)
def test_get_spice_console_not_implemented(self):
body = {'os-getSPICEConsole': {'type': 'spice-html5'}}
self.stubs.Set(compute_api.API, 'get_spice_console',
fakes.fake_not_implemented)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 501)
self._check_console_failure('self.controller.get_spice_console',
webob.exc.HTTPNotImplemented,
body)
def test_get_spice_console_type_unavailable(self):
body = {'os-getSPICEConsole': {'type': 'unavailable'}}
self.stubs.Set(compute_api.API, 'get_spice_console',
fake_get_spice_console_type_unavailable)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(400, res.status_int)
self._check_console_failure('self.controller.get_spice_console',
self.validation_error,
body)
def test_get_rdp_console(self):
body = {'os-getRDPConsole': {'type': 'rdp-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
output = jsonutils.loads(res.body)
self.assertEqual(res.status_int, 200)
req = fakes.HTTPRequest.blank('')
output = self.controller.get_rdp_console(req, fakes.FAKE_UUID,
body=body)
self.assertEqual(output,
{u'console': {u'url': u'http://fake', u'type': u'rdp-html5'}})
@@ -335,112 +268,73 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
self.stubs.Set(compute_api.API, 'get_rdp_console',
fake_get_rdp_console_not_ready)
body = {'os-getRDPConsole': {'type': 'rdp-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
jsonutils.loads(res.body)
self.assertEqual(res.status_int, 409)
self._check_console_failure('self.controller.get_rdp_console',
webob.exc.HTTPConflict,
body)
def test_get_rdp_console_no_type(self):
self.stubs.Set(compute_api.API, 'get_rdp_console',
fake_get_rdp_console_invalid_type)
body = {'os-getRDPConsole': {}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_rdp_console',
self.validation_error,
body)
def test_get_rdp_console_no_instance(self):
self.stubs.Set(compute_api.API, 'get', fake_get_not_found)
body = {'os-getRDPConsole': {'type': 'rdp-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_rdp_console',
webob.exc.HTTPNotFound,
body)
def test_get_rdp_console_no_instance_on_console_get(self):
self.stubs.Set(compute_api.API, 'get_rdp_console',
fake_get_rdp_console_not_found)
body = {'os-getRDPConsole': {'type': 'rdp-html5'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_rdp_console',
webob.exc.HTTPNotFound,
body)
def test_get_rdp_console_invalid_type(self):
body = {'os-getRDPConsole': {'type': 'invalid'}}
self.stubs.Set(compute_api.API, 'get_rdp_console',
fake_get_rdp_console_invalid_type)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_rdp_console',
self.validation_error,
body)
def test_get_rdp_console_type_unavailable(self):
body = {'os-getRDPConsole': {'type': 'unavailable'}}
self.stubs.Set(compute_api.API, 'get_rdp_console',
fake_get_rdp_console_type_unavailable)
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(400, res.status_int)
self._check_console_failure('self.controller.get_rdp_console',
self.validation_error,
body)
def test_get_vnc_console_with_undefined_param(self):
body = {'os-getVNCConsole': {'type': 'novnc', 'undefined': 'foo'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(400, res.status_int)
self._check_console_failure('self.controller.get_vnc_console',
self.validation_error,
body)
def test_get_spice_console_with_undefined_param(self):
body = {'os-getSPICEConsole': {'type': 'spice-html5',
'undefined': 'foo'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(400, res.status_int)
self._check_console_failure('self.controller.get_spice_console',
self.validation_error,
body)
def test_get_rdp_console_with_undefined_param(self):
body = {'os-getRDPConsole': {'type': 'rdp-html5', 'undefined': 'foo'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(400, res.status_int)
self._check_console_failure('self.controller.get_rdp_console',
self.validation_error,
body)
def test_get_serial_console(self):
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
output = jsonutils.loads(res.body)
self.assertEqual(200, res.status_int)
req = fakes.HTTPRequest.blank('')
output = self.controller.get_serial_console(req, fakes.FAKE_UUID,
body=body)
self.assertEqual({u'console': {u'url': u'http://fake',
u'type': u'serial'}},
output)
@@ -451,13 +345,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
console_type="serial")
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_serial_console',
webob.exc.HTTPBadRequest,
body)
self.assertTrue(get_serial_console.called)
@mock.patch.object(compute_api.API, 'get_serial_console')
@@ -466,13 +356,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
exception.ConsoleTypeInvalid(console_type='invalid'))
body = {'os-getSerialConsole': {'type': 'invalid'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_serial_console',
self.validation_error,
body)
@mock.patch.object(compute_api.API, 'get_serial_console')
def test_get_serial_console_no_type(self, get_serial_console):
@@ -480,13 +366,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
exception.ConsoleTypeInvalid(console_type=''))
body = {'os-getSerialConsole': {}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_serial_console',
self.validation_error,
body)
@mock.patch.object(compute_api.API, 'get_serial_console')
def test_get_serial_console_no_instance(self, get_serial_console):
@@ -494,13 +376,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
exception.InstanceNotFound(instance_id='xxx'))
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 404)
self._check_console_failure('self.controller.get_serial_console',
webob.exc.HTTPNotFound,
body)
self.assertTrue(get_serial_console.called)
@mock.patch.object(compute_api.API, 'get_serial_console')
@@ -509,13 +387,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
exception.InstanceNotReady(instance_id='xxx'))
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 409)
self._check_console_failure('self.controller.get_serial_console',
webob.exc.HTTPConflict,
body)
self.assertTrue(get_serial_console.called)
@mock.patch.object(compute_api.API, 'get_serial_console')
@@ -525,13 +399,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
host='127.0.0.1'))
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_serial_console',
webob.exc.HTTPBadRequest,
body)
self.assertTrue(get_serial_console.called)
@mock.patch.object(compute_api.API, 'get_serial_console')
@@ -541,13 +411,9 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
num_ports='x', property="hw_serial_port_count"))
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_serial_console',
webob.exc.HTTPBadRequest,
body)
self.assertTrue(get_serial_console.called)
@mock.patch.object(compute_api.API, 'get_serial_console')
@@ -556,24 +422,15 @@ class ConsolesExtensionTestV21(test.NoDBTestCase):
exception.ImageSerialPortNumberExceedFlavorValue())
body = {'os-getSerialConsole': {'type': 'serial'}}
req = webob.Request.blank(self.url)
req.method = "POST"
req.body = jsonutils.dumps(body)
req.headers["content-type"] = "application/json"
res = req.get_response(self.app)
self.assertEqual(res.status_int, 400)
self._check_console_failure('self.controller.get_serial_console',
webob.exc.HTTPBadRequest,
body)
self.assertTrue(get_serial_console.called)
class ConsolesExtensionTestV2(ConsolesExtensionTestV21):
def _setup_wsgi(self):
self.flags(
osapi_compute_extension=[
'nova.api.openstack.compute.contrib.select_extensions'],
osapi_compute_ext_list=['Consoles'])
self.app = fakes.wsgi_app(init_only=('servers',))
controller_class = console_v2.ConsolesController
validation_error = webob.exc.HTTPBadRequest
def test_get_vnc_console_with_undefined_param(self):
pass