diff --git a/CHANGELOG.rst b/CHANGELOG.rst index e5f6059f..7d55a8b0 100644 --- a/CHANGELOG.rst +++ b/CHANGELOG.rst @@ -9,6 +9,7 @@ Features * Eventlet Reactor IO improvement (PYTHON-495) * Make pure Python ProtocolHandler available even when Cython is present (PYTHON-501) * Optional Cython deserializer for bytes as bytearray (PYTHON-503) +* Add Session.default_serial_consistency_level (github #510) * cqlengine: Expose prior state information via cqlengine LWTException (github #343, PYTHON-336) * cqlengine: Collection datatype "contains" operators support (Cassandra 2.1) #278 (PYTHON-258) * cqlengine: Add DISTINCT query operator (PYTHON-266) diff --git a/tests/unit/test_cluster.py b/tests/unit/test_cluster.py index 8aaf02f9..763875c9 100644 --- a/tests/unit/test_cluster.py +++ b/tests/unit/test_cluster.py @@ -17,9 +17,11 @@ try: except ImportError: import unittest # noqa -from mock import patch +from mock import patch, Mock -from cassandra.cluster import _Scheduler +from cassandra import ConsistencyLevel +from cassandra.cluster import _Scheduler, Session +from cassandra.query import SimpleStatement class SchedulerTest(unittest.TestCase): @@ -36,3 +38,34 @@ class SchedulerTest(unittest.TestCase): sched = _Scheduler(None) sched.schedule(0, lambda: None) sched.schedule(0, lambda: None) # pre-473: "TypeError: unorderable types: function() < function()"t + + +class SessionTest(unittest.TestCase): + # TODO: this suite could be expanded; for now just adding a test covering a PR + + @patch('cassandra.cluster.ResponseFuture._make_query_plan') + def test_default_serial_consistency_level(self, *args): + """ + Make sure default_serial_consistency_level passes through to a query message. + Also make sure Statement.serial_consistency_level overrides the default. + + PR #510 + """ + s = Session(Mock(protocol_version=4), []) + + # default is None + self.assertIsNone(s.default_serial_consistency_level) + + sentinel = 1001 + for cl in (None, ConsistencyLevel.LOCAL_SERIAL, ConsistencyLevel.SERIAL, sentinel): + s.default_serial_consistency_level = cl + + # default is passed through + f = s._create_response_future(query='', parameters=[], trace=False, custom_payload={}, timeout=100) + self.assertEqual(f.message.serial_consistency_level, cl) + + # any non-None statement setting takes precedence + for cl_override in (ConsistencyLevel.LOCAL_SERIAL, ConsistencyLevel.SERIAL): + f = s._create_response_future(SimpleStatement(query_string='', serial_consistency_level=cl_override), parameters=[], trace=False, custom_payload={}, timeout=100) + self.assertEqual(s.default_serial_consistency_level, cl) + self.assertEqual(f.message.serial_consistency_level, cl_override)