diff options
author | Dheeraj Gupta <dheeraj.gupta4@gmail.com> | 2015-03-05 16:36:20 -0500 |
---|---|---|
committer | melanie witt <melwitt@yahoo-inc.com> | 2016-02-10 03:19:36 +0000 |
commit | e3b6d29705ae6d48df8555ad0afffc822cbd6678 (patch) | |
tree | a847738a1454e90d8b631e73d5433ba42e7f7c58 /nova/tests/unit/test_context.py | |
parent | 704de0a0a441caa9872a42b968eeb8cff84809a4 (diff) | |
download | nova-e3b6d29705ae6d48df8555ad0afffc822cbd6678.tar.gz |
Add methods for RequestContext to switch db connection
This augments the RequestContext with connection information for a
target database to query. This will allow nova-api to issue queries to
a targeted cell database with each query.
Example usages:
ctxt = context.RequestContext()
cell_mapping = CellMapping()
with context.target_cell(ctxt, cell_mapping):
instance = objects.Instance.get_by_uuid(ctxt, uuid)
with context.target_cell(ctxt, cell_mapping):
with instance.obj_alternate_context(ctxt):
instance.save()
Implements blueprint cells-db-connection-switching
Co-Authored-By: melanie witt<melwitt@yahoo-inc.com>
Change-Id: I9e2363a35b58ae55bd40194c1f8bfb89b599bf04
Diffstat (limited to 'nova/tests/unit/test_context.py')
-rw-r--r-- | nova/tests/unit/test_context.py | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/nova/tests/unit/test_context.py b/nova/tests/unit/test_context.py index 5a4651d803..65feeb71a4 100644 --- a/nova/tests/unit/test_context.py +++ b/nova/tests/unit/test_context.py @@ -12,10 +12,12 @@ # License for the specific language governing permissions and limitations # under the License. +import mock from oslo_context import context as o_context from oslo_context import fixture as o_fixture from nova import context +from nova import objects from nova import test @@ -223,3 +225,16 @@ class ContextTestCase(test.NoDBTestCase): self.assertEqual('222', ctx.project_id) values2 = ctx.to_dict() self.assertEqual(values, values2) + + @mock.patch('nova.db.create_context_manager') + def test_target_cell(self, mock_create_ctxt_mgr): + mock_create_ctxt_mgr.return_value = mock.sentinel.cm + ctxt = context.RequestContext('111', + '222', + roles=['admin', 'weasel']) + # Verify the existing db_connection, if any, is restored + ctxt.db_connection = mock.sentinel.db_conn + mapping = objects.CellMapping(database_connection='fake://') + with context.target_cell(ctxt, mapping): + self.assertEqual(ctxt.db_connection, mock.sentinel.cm) + self.assertEqual(mock.sentinel.db_conn, ctxt.db_connection) |