summaryrefslogtreecommitdiff
path: root/nova/tests/unit/test_context.py
diff options
context:
space:
mode:
authorDheeraj Gupta <dheeraj.gupta4@gmail.com>2015-03-05 16:36:20 -0500
committermelanie witt <melwitt@yahoo-inc.com>2016-02-10 03:19:36 +0000
commite3b6d29705ae6d48df8555ad0afffc822cbd6678 (patch)
treea847738a1454e90d8b631e73d5433ba42e7f7c58 /nova/tests/unit/test_context.py
parent704de0a0a441caa9872a42b968eeb8cff84809a4 (diff)
downloadnova-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.py15
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)