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:
Andrew Melton 2015-01-28 08:36:29 -08:00
parent 8c22e3a006
commit 5999adfa0d
10 changed files with 27 additions and 63 deletions

View File

@ -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,

View File

@ -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)

View File

@ -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):

View File

@ -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):

View File

@ -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"}'

View File

@ -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')

View File

@ -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()

View File

@ -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()

View File

@ -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()

View File

@ -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(