Add api microvesion unit test case for wsgi.action

This patch add unit test case of combination of @wsgi.Controller.api_version
and @wsgi.action which can be a good sample for add new action extensions for
microversion

Partially implements blueprint api-microversions

Change-Id: I2cdc12528daaab6d66f6c26665b6f44b7d76270b
This commit is contained in:
Eli Qiao 2014-12-16 11:35:02 +08:00
parent cdac59cb3a
commit 922e98024d
2 changed files with 49 additions and 1 deletions

View File

@ -27,6 +27,16 @@ class MicroversionsTest(test.NoDBTestCase):
header_name = 'X-OpenStack-Nova-API-Version'
def _test_microversions(self, app, req, ret_code, ret_header=None):
req.environ['CONTENT_TYPE'] = "application/json"
res = req.get_response(app)
self.assertEqual(ret_code, res.status_int)
if ret_header:
self.assertEqual(ret_header,
res.headers[self.header_name])
return res
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
return_value='nova.api.v3.test_extensions')
def test_microversions_no_header(self, mock_namespace):
@ -287,3 +297,33 @@ class MicroversionsTest(test.NoDBTestCase):
self.assertIn(param, expected_res)
self.assertEqual(expected_res[param], resp_json[param])
self.assertEqual(3, len(resp_json))
@mock.patch("nova.api.openstack.api_version_request.max_api_version")
@mock.patch("nova.api.openstack.APIRouterV21.api_extension_namespace",
return_value='nova.api.v3.test_extensions')
def _test_microversions_actions(self, ret_code, ret_header, req_header,
mock_namespace,
mock_maxver):
mock_maxver.return_value = api_version.APIVersionRequest("2.3")
app = fakes.wsgi_app_v21(init_only='test-microversions')
req = fakes.HTTPRequest.blank('/v2/fake/microversions3/1/action')
if req_header:
req.headers = {self.header_name: req_header}
req.method = 'POST'
req.body = jsonutils.dumps({'foo': None})
res = self._test_microversions(app, req, ret_code,
ret_header=ret_header)
if ret_code == 202:
resp_json = jsonutils.loads(res.body)
self.assertEqual({'foo': 'bar'}, resp_json)
def test_microversions_actions(self):
self._test_microversions_actions(202, "2.1", "2.1")
def test_microversions_actions_too_high(self):
self._test_microversions_actions(404, "2.3", "2.3")
def test_microversions_actions_no_header(self):
self._test_microversions_actions(202, "2.1", None)

View File

@ -73,6 +73,13 @@ class MicroversionsController3(wsgi.Controller):
data = {'param': 'update_val1'}
return data
@wsgi.Controller.api_version("2.1", "2.2")
@wsgi.response(202)
@wsgi.action('foo')
def _foo(self, req, id, body):
data = {'foo': 'bar'}
return data
class MicroversionsController4(wsgi.Controller):
@ -130,7 +137,8 @@ class Microversions(extensions.V3APIExtensionBase):
res2 = extensions.ResourceExtension('microversions2',
MicroversionsController2())
res3 = extensions.ResourceExtension('microversions3',
MicroversionsController3())
MicroversionsController3(),
member_actions={"action": "POST"})
res4 = extensions.ResourceExtension('microversions4',
MicroversionsController4())
res5 = extensions.ResourceExtension(