Pull RequestContext Patching Into Test Base
The new patching only ensures that auth_token_info is properly set up by default. A real RequestContext is returned, and it is passed through to_dict and from_dict to ensure there are no assumptions made that will not work through RPC. If necessary, tests can still return a mock context by setting a return_value or side_effect on self.mock_make_ctxt. Change-Id: I6369e0bd89d83a5ea3ddde2b35423233fee18327
This commit is contained in:
parent
8c22e3a006
commit
5999adfa0d
|
@ -58,7 +58,7 @@ class ContextHook(hooks.PecanHook):
|
|||
importutils.import_module('keystonemiddleware.auth_token')
|
||||
auth_url = cfg.CONF.keystone_authtoken.auth_uri
|
||||
|
||||
state.request.context = context.RequestContext(
|
||||
state.request.context = context.make_context(
|
||||
auth_token=auth_token,
|
||||
auth_url=auth_url,
|
||||
auth_token_info=auth_token_info,
|
||||
|
|
|
@ -62,3 +62,7 @@ class RequestContext(context.RequestContext):
|
|||
values.pop('user', None)
|
||||
values.pop('tenant', None)
|
||||
return cls(**values)
|
||||
|
||||
|
||||
def make_context(*args, **kwargs):
|
||||
return RequestContext(*args, **kwargs)
|
||||
|
|
|
@ -19,7 +19,6 @@ from six.moves.urllib import parse as urlparse
|
|||
from wsme import types as wtypes
|
||||
|
||||
from magnum.api.controllers.v1 import bay as api_bay
|
||||
from magnum.common import context
|
||||
from magnum.common import utils
|
||||
from magnum.conductor import api as rpcapi
|
||||
from magnum import objects
|
||||
|
@ -43,12 +42,6 @@ class TestListBay(api_base.FunctionalTest):
|
|||
def setUp(self):
|
||||
super(TestListBay, self).setUp()
|
||||
obj_utils.create_test_baymodel(self.context)
|
||||
p = mock.patch.object(context, 'RequestContext')
|
||||
self.mock_request_context = p.start()
|
||||
mock_auth_token = self.mock_request_context.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
self.addCleanup(p.stop)
|
||||
|
||||
def test_empty(self):
|
||||
response = self.get_json('/bays')
|
||||
|
@ -136,12 +129,6 @@ class TestPatch(api_base.FunctionalTest):
|
|||
self.bay = obj_utils.create_test_bay(self.context,
|
||||
name='bay_example_A',
|
||||
node_count=3)
|
||||
p = mock.patch.object(context, 'RequestContext')
|
||||
self.mock_request_context = p.start()
|
||||
mock_auth_token = self.mock_request_context.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
self.addCleanup(p.stop)
|
||||
|
||||
@mock.patch.object(timeutils, 'utcnow')
|
||||
def test_replace_ok(self, mock_utcnow):
|
||||
|
@ -303,12 +290,6 @@ class TestPost(api_base.FunctionalTest):
|
|||
self.mock_bay_create = p.start()
|
||||
self.mock_bay_create.side_effect = self._simulate_rpc_bay_create
|
||||
self.addCleanup(p.stop)
|
||||
p = mock.patch.object(context, 'RequestContext')
|
||||
self.mock_request_context = p.start()
|
||||
mock_auth_token = self.mock_request_context.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
self.addCleanup(p.stop)
|
||||
|
||||
def _simulate_rpc_bay_create(self, bay):
|
||||
bay.create()
|
||||
|
@ -384,15 +365,9 @@ class TestDelete(api_base.FunctionalTest):
|
|||
self.mock_bay_delete = p.start()
|
||||
self.mock_bay_delete.side_effect = self._simulate_rpc_bay_delete
|
||||
self.addCleanup(p.stop)
|
||||
p = mock.patch.object(context, 'RequestContext')
|
||||
self.mock_request_context = p.start()
|
||||
mock_auth_token = self.mock_request_context.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
self.addCleanup(p.stop)
|
||||
|
||||
def _simulate_rpc_bay_delete(self, bay_uuid):
|
||||
bay = objects.Bay.get_by_uuid(self.mock_request_context, bay_uuid)
|
||||
bay = objects.Bay.get_by_uuid(self.context, bay_uuid)
|
||||
bay.destroy()
|
||||
|
||||
def test_delete_bay(self):
|
||||
|
|
|
@ -19,7 +19,6 @@ from six.moves.urllib import parse as urlparse
|
|||
from wsme import types as wtypes
|
||||
|
||||
from magnum.api.controllers.v1 import baymodel as api_baymodel
|
||||
from magnum.common import context
|
||||
from magnum.common import utils
|
||||
from magnum.tests.api import base as api_base
|
||||
from magnum.tests.api import utils as apiutils
|
||||
|
@ -249,12 +248,6 @@ class TestPost(api_base.FunctionalTest):
|
|||
|
||||
def setUp(self):
|
||||
super(TestPost, self).setUp()
|
||||
p = mock.patch.object(context, 'RequestContext')
|
||||
self.mock_request_context = p.start()
|
||||
mock_auth_token = self.mock_request_context.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
self.addCleanup(p.stop)
|
||||
|
||||
@mock.patch.object(timeutils, 'utcnow')
|
||||
def test_create_baymodel(self, mock_utcnow):
|
||||
|
|
|
@ -15,7 +15,6 @@ from mock import patch
|
|||
|
||||
|
||||
class TestContainerController(db_base.DbTestCase):
|
||||
@patch('magnum.common.context.RequestContext')
|
||||
@patch('magnum.conductor.api.API.container_create')
|
||||
@patch('magnum.conductor.api.API.container_delete')
|
||||
@patch('magnum.conductor.api.API.container_start')
|
||||
|
@ -34,8 +33,7 @@ class TestContainerController(db_base.DbTestCase):
|
|||
mock_container_stop,
|
||||
mock_container_start,
|
||||
mock_container_delete,
|
||||
mock_container_create,
|
||||
mock_RequestContext):
|
||||
mock_container_create):
|
||||
mock_container_create.side_effect = lambda x, y, z: z
|
||||
mock_container_start.return_value = None
|
||||
mock_container_stop.return_value = None
|
||||
|
@ -44,9 +42,6 @@ class TestContainerController(db_base.DbTestCase):
|
|||
mock_container_reboot.return_value = None
|
||||
mock_container_logs.return_value = None
|
||||
mock_container_execute.return_value = None
|
||||
mock_auth_token = mock_RequestContext.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
|
||||
# Create a container
|
||||
params = '{"name": "My Docker", "image_id": "ubuntu"}'
|
||||
|
|
|
@ -9,19 +9,13 @@
|
|||
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
# See the License for the specific language governing permissions and
|
||||
# limitations under the License.
|
||||
from mock import patch
|
||||
|
||||
from magnum.tests.db import base as db_base
|
||||
|
||||
|
||||
class TestNodeController(db_base.DbTestCase):
|
||||
@patch('magnum.common.context.RequestContext')
|
||||
def test_node_api(self, mock_RequestContext):
|
||||
def test_node_api(self):
|
||||
# Create a node
|
||||
params = '{"type": "bare", "image_id": "Fedora"}'
|
||||
mock_auth_token = mock_RequestContext.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
response = self.app.post('/v1/nodes',
|
||||
params=params,
|
||||
content_type='application/json')
|
||||
|
|
|
@ -26,13 +26,9 @@ class TestPodController(db_base.DbTestCase):
|
|||
pod = objects.Pod.get_by_uuid({}, pod_uuid)
|
||||
pod.destroy()
|
||||
|
||||
@patch('magnum.common.context.RequestContext')
|
||||
def test_pod_api(self, mock_RequestContext):
|
||||
def test_pod_api(self):
|
||||
with patch.object(api.API, 'pod_create') as mock_method:
|
||||
mock_method.side_effect = self.mock_pod_create
|
||||
mock_auth_token = mock_RequestContext.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
# Create a bay
|
||||
bay = db_utils.create_test_bay()
|
||||
|
||||
|
|
|
@ -26,13 +26,9 @@ class TestRCController(db_base.DbTestCase):
|
|||
rc = objects.ReplicationController.get_by_uuid({}, uuid)
|
||||
rc.destroy()
|
||||
|
||||
@patch('magnum.common.context.RequestContext')
|
||||
def test_rc_api(self, mock_RequestContext):
|
||||
def test_rc_api(self):
|
||||
with patch.object(api.API, 'rc_create') as mock_method:
|
||||
mock_method.side_effect = self.mock_rc_create
|
||||
mock_auth_token = mock_RequestContext.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
# Create a bay
|
||||
bay = db_utils.create_test_bay()
|
||||
|
||||
|
|
|
@ -27,13 +27,9 @@ class TestServiceController(db_base.DbTestCase):
|
|||
service = objects.Service.get_by_uuid({}, uuid)
|
||||
service.destroy()
|
||||
|
||||
@patch('magnum.common.context.RequestContext')
|
||||
def test_service_api(self, mock_RequestContext):
|
||||
def test_service_api(self):
|
||||
with patch.object(api.API, 'service_create') as mock_method:
|
||||
mock_method.side_effect = self.mock_service_create
|
||||
mock_auth_token = mock_RequestContext.auth_token_info['token']
|
||||
mock_auth_token['project']['id'].return_value = 'fake_project'
|
||||
mock_auth_token['user']['id'].return_value = 'fake_user'
|
||||
# Create a bay
|
||||
bay = db_utils.create_test_bay()
|
||||
|
||||
|
|
|
@ -18,6 +18,7 @@
|
|||
import copy
|
||||
import os
|
||||
|
||||
import mock
|
||||
from oslo.config import cfg
|
||||
from oslotest import base
|
||||
import pecan
|
||||
|
@ -61,7 +62,21 @@ class TestCase(base.BaseTestCase):
|
|||
}
|
||||
}
|
||||
self.context = magnum_context.RequestContext(
|
||||
auth_token_info=token_info)
|
||||
auth_token_info=token_info)
|
||||
|
||||
def make_context(*args, **kwargs):
|
||||
# If context hasn't been constructed with token_info
|
||||
if not kwargs.get('auth_token_info'):
|
||||
kwargs['auth_token_info'] = copy.deepcopy(token_info)
|
||||
|
||||
ctxt = magnum_context.RequestContext(*args, **kwargs)
|
||||
return magnum_context.RequestContext.from_dict(ctxt.to_dict())
|
||||
|
||||
p = mock.patch.object(magnum_context, 'make_context',
|
||||
side_effect=make_context)
|
||||
self.mock_make_ctxt = p.start()
|
||||
self.addCleanup(p.stop)
|
||||
|
||||
self.useFixture(conf_fixture.ConfFixture(cfg.CONF))
|
||||
|
||||
self._base_test_obj_backup = copy.copy(
|
||||
|
|
Loading…
Reference in New Issue