summaryrefslogtreecommitdiff
path: root/tests/sqlalchemy/test_utils.py
diff options
context:
space:
mode:
authorVictor Sergeyev <vsergeyev@mirantis.com>2014-05-13 11:54:23 +0300
committerVictor Sergeyev <vsergeyev@mirantis.com>2014-06-04 17:53:17 +0300
commit4f58e79436a92acbdb6a738f3f8aa8200ebcc471 (patch)
tree6bec95c760051204854de13f96c03c5b8c90d21f /tests/sqlalchemy/test_utils.py
parent06224bcd735a814b78f7c6ffffc1075cced25503 (diff)
downloadoslo-db-4f58e79436a92acbdb6a738f3f8aa8200ebcc471.tar.gz
Remove common context usage from db model_query()
Currently, function model_query() from oslo.db.sqlalchemy.utils uses is_use_context() function in order to determine whether a normal or an admin user request is being processed. But usage of RequestContext is not unified across OpenStack projects, so there is no way for oslo.db to guarantee it processes project_id/deleted filters correctly here. To remove this ambiguity, project_id/deleted filters should be passed explicitly instead. At the same time, developers of OpenStack projects are encouraged to provide wrappers for oslo.db model_query() function, so that they could determine the values for project_id/deleted filters depending on how they use RequestContext in their project. Closes-bug: #1288846 Change-Id: Iec5cbbc44cf9626f0464ab684dff1ba37e006151
Diffstat (limited to 'tests/sqlalchemy/test_utils.py')
-rw-r--r--tests/sqlalchemy/test_utils.py91
1 files changed, 27 insertions, 64 deletions
diff --git a/tests/sqlalchemy/test_utils.py b/tests/sqlalchemy/test_utils.py
index 5ba80a4..36a2b14 100644
--- a/tests/sqlalchemy/test_utils.py
+++ b/tests/sqlalchemy/test_utils.py
@@ -741,109 +741,72 @@ class TestModelQuery(test_base.BaseTestCase):
self.session = mock.MagicMock()
self.session.query.return_value = self.session.query
self.session.query.filter.return_value = self.session.query
- self.user_context = mock.MagicMock(is_admin=False, read_deleted='yes',
- user_id=42, project_id=43)
def test_wrong_model(self):
- self.assertRaises(TypeError, utils.model_query, self.user_context,
+ self.assertRaises(TypeError, utils.model_query,
FakeModel, session=self.session)
def test_no_soft_deleted(self):
- self.assertRaises(ValueError, utils.model_query, self.user_context,
- MyModel, session=self.session)
+ self.assertRaises(ValueError, utils.model_query,
+ MyModel, session=self.session, deleted=True)
- def test_read_deleted_only(self):
+ def test_deleted_false(self):
mock_query = utils.model_query(
- self.user_context, MyModelSoftDeleted,
- session=self.session, read_deleted='only')
+ MyModelSoftDeleted, session=self.session, deleted=False)
deleted_filter = mock_query.filter.call_args[0][0]
self.assertEqual(str(deleted_filter),
- 'soft_deleted_test_model.deleted != :deleted_1')
+ 'soft_deleted_test_model.deleted = :deleted_1')
self.assertEqual(deleted_filter.right.value,
MyModelSoftDeleted.__mapper__.c.deleted.default.arg)
- def test_read_deleted_no(self):
+ def test_deleted_true(self):
mock_query = utils.model_query(
- self.user_context, MyModelSoftDeleted,
- session=self.session, read_deleted='no')
+ MyModelSoftDeleted, session=self.session, deleted=True)
deleted_filter = mock_query.filter.call_args[0][0]
self.assertEqual(str(deleted_filter),
- 'soft_deleted_test_model.deleted = :deleted_1')
+ 'soft_deleted_test_model.deleted != :deleted_1')
self.assertEqual(deleted_filter.right.value,
MyModelSoftDeleted.__mapper__.c.deleted.default.arg)
- def test_read_deleted_yes(self):
- mock_query = utils.model_query(
- self.user_context, MyModelSoftDeleted,
- session=self.session, read_deleted='yes')
-
- self.assertEqual(mock_query.filter.call_count, 0)
+ @mock.patch.object(utils, "_read_deleted_filter")
+ def test_no_deleted_value(self, _read_deleted_filter):
+ utils.model_query(MyModelSoftDeleted, session=self.session)
+ self.assertEqual(_read_deleted_filter.call_count, 0)
- def test_wrong_read_deleted(self):
- self.assertRaises(ValueError, utils.model_query, self.user_context,
- MyModelSoftDeleted, session=self.session,
- read_deleted='ololo')
+ def test_project_filter(self):
+ project_id = 10
- def test_project_only_true(self):
mock_query = utils.model_query(
- self.user_context, MyModelSoftDeletedProjectId,
- session=self.session, project_only=True)
+ MyModelSoftDeletedProjectId, session=self.session,
+ project_only=True, project_id=project_id)
deleted_filter = mock_query.filter.call_args[0][0]
self.assertEqual(
str(deleted_filter),
'soft_deleted_project_id_test_model.project_id = :project_id_1')
- self.assertEqual(deleted_filter.right.value,
- self.user_context.project_id)
+ self.assertEqual(deleted_filter.right.value, project_id)
def test_project_filter_wrong_model(self):
- self.assertRaises(ValueError, utils.model_query, self.user_context,
+ self.assertRaises(ValueError, utils.model_query,
MyModelSoftDeleted, session=self.session,
- project_only=True)
+ project_id=10)
- def test_read_deleted_allow_none(self):
+ def test_project_filter_allow_none(self):
mock_query = utils.model_query(
- self.user_context, MyModelSoftDeletedProjectId,
- session=self.session, project_only='allow_none')
+ MyModelSoftDeletedProjectId,
+ session=self.session, project_id=(10, None))
self.assertEqual(
str(mock_query.filter.call_args[0][0]),
- 'soft_deleted_project_id_test_model.project_id = :project_id_1 OR'
- ' soft_deleted_project_id_test_model.project_id IS NULL'
+ 'soft_deleted_project_id_test_model.project_id'
+ ' IN (:project_id_1, NULL)'
)
- @mock.patch.object(utils, "_read_deleted_filter")
- @mock.patch.object(utils, "_project_filter")
- def test_context_show_deleted(self, _project_filter, _read_deleted_filter):
- user_context = mock.MagicMock(is_admin=False, show_deleted='yes',
- user_id=42, project_id=43)
- delattr(user_context, 'read_deleted')
- _read_deleted_filter.return_value = self.session.query
- _project_filter.return_value = self.session.query
- utils.model_query(user_context, MyModel,
- args=(MyModel.id,), session=self.session)
-
- self.session.query.assert_called_with(MyModel.id)
- _read_deleted_filter.assert_called_with(
- self.session.query, MyModel, user_context.show_deleted)
- _project_filter.assert_called_with(
- self.session.query, MyModel, user_context, False)
-
- @mock.patch.object(utils, "_read_deleted_filter")
- @mock.patch.object(utils, "_project_filter")
- def test_model_query_common(self, _project_filter, _read_deleted_filter):
- _read_deleted_filter.return_value = self.session.query
- _project_filter.return_value = self.session.query
- utils.model_query(self.user_context, MyModel,
- args=(MyModel.id,), session=self.session)
-
+ def test_model_query_common(self):
+ utils.model_query(MyModel, args=(MyModel.id,), session=self.session)
self.session.query.assert_called_with(MyModel.id)
- _read_deleted_filter.assert_called_with(
- self.session.query, MyModel, self.user_context.read_deleted)
- _project_filter.assert_called_with(
- self.session.query, MyModel, self.user_context, False)
class TestUtils(db_test_base.DbTestCase):