Merge "Don't use wsme test webapp for patch tests"

This commit is contained in:
Zuul 2020-04-21 16:46:18 +00:00 committed by Gerrit Code Review
commit e60c62ed2a
2 changed files with 27 additions and 17 deletions

View File

@ -44,6 +44,8 @@ class BaseApiTest(db_base.DbTestCase):
SOURCE_DATA = {'test_source': {'somekey': '666'}}
root_controller = 'ironic.api.controllers.root.RootController'
def setUp(self):
super(BaseApiTest, self).setUp()
cfg.CONF.set_override("auth_version", "v3",
@ -68,7 +70,7 @@ class BaseApiTest(db_base.DbTestCase):
self.app_config = {
'app': {
'root': 'ironic.api.controllers.root.RootController',
'root': self.root_controller,
'modules': ['ironic.api'],
'static_root': '%s/public' % root_dir,
'debug': True,

View File

@ -19,14 +19,16 @@ from http import client as http_client
import platform
import mock
import webtest
from pecan import rest
import wsme
from ironic.api.controllers.v1 import types
from ironic.api import expose
from ironic.api import types as atypes
from ironic.common import exception
from ironic.common import utils
from ironic.tests import base
from ironic.tests.unit.api import base as api_base
from ironic.tests.unit.api.utils import fake_event_validator
@ -102,21 +104,27 @@ class MyPatchType(types.JsonPatchType):
return ['/internal']
class MyRoot(wsme.WSRoot):
class MyTest(rest.RestController):
"""Helper class for TestJsonPatchType tests."""
@wsme.expose([str], body=[MyPatchType])
@wsme.validate([MyPatchType])
def test(self, patch):
@expose.expose([str], body=[MyPatchType])
def patch(self, patch):
return patch
class TestJsonPatchType(base.TestCase):
class MyRoot(rest.RestController):
test = MyTest()
class TestJsonPatchType(api_base.BaseApiTest):
root_controller = ('ironic.tests.unit.api.controllers.v1.'
'test_types.MyRoot')
@mock.patch.object(platform, '_syscmd_uname', lambda *x: '')
def setUp(self):
super(TestJsonPatchType, self).setUp()
self.app = webtest.TestApp(MyRoot(['restjson']).wsgiapp())
def _patch_json(self, params, expect_errors=False):
return self.app.patch_json('/test', params=params,
@ -144,14 +152,14 @@ class TestJsonPatchType(base.TestCase):
patch = [{'path': '/internal', 'op': 'replace', 'value': 'foo'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_cannot_update_internal_dict_attr(self):
patch = [{'path': '/internal/test', 'op': 'replace',
'value': 'foo'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_mandatory_attr(self):
patch = [{'op': 'replace', 'path': '/mandatory', 'value': 'foo'}]
@ -163,49 +171,49 @@ class TestJsonPatchType(base.TestCase):
patch = [{'op': 'remove', 'path': '/mandatory'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_cannot_remove_extra_non_removable_attr(self):
patch = [{'op': 'remove', 'path': '/non_removable'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_missing_required_fields_path(self):
missing_path = [{'op': 'remove'}]
ret = self._patch_json(missing_path, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_missing_required_fields_op(self):
missing_op = [{'path': '/foo'}]
ret = self._patch_json(missing_op, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_invalid_op(self):
patch = [{'path': '/foo', 'op': 'invalid'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_invalid_path(self):
patch = [{'path': 'invalid-path', 'op': 'remove'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_cannot_add_with_no_value(self):
patch = [{'path': '/extra/foo', 'op': 'add'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
def test_cannot_replace_with_no_value(self):
patch = [{'path': '/foo', 'op': 'replace'}]
ret = self._patch_json(patch, True)
self.assertEqual(http_client.BAD_REQUEST, ret.status_int)
self.assertTrue(ret.json['faultstring'])
self.assertTrue(ret.json['error_message'])
class TestBooleanType(base.TestCase):