Skip to content

Commit b0bcacc

Browse files
committed
Tests for multiple callbacks, errbacks
PYTHON-182 github apache#214
1 parent 1e1d97e commit b0bcacc

1 file changed

Lines changed: 58 additions & 1 deletion

File tree

tests/unit/test_response_future.py

Lines changed: 58 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -19,7 +19,7 @@
1919

2020
from mock import Mock, MagicMock, ANY
2121

22-
from cassandra import ConsistencyLevel
22+
from cassandra import ConsistencyLevel, Unavailable
2323
from cassandra.cluster import Session, ResponseFuture, NoHostAvailable
2424
from cassandra.connection import Connection, ConnectionException
2525
from cassandra.protocol import (ReadTimeoutErrorMessage, WriteTimeoutErrorMessage,
@@ -366,6 +366,63 @@ def test_errback(self):
366366
# this should get called immediately now that the error is set
367367
rf.add_errback(self.assertIsInstance, Exception)
368368

369+
def test_multiple_callbacks(self):
370+
session = self.make_session()
371+
rf = self.make_response_future(session)
372+
rf.send_request()
373+
374+
callback = Mock()
375+
expected_result = [{'col': 'val'}]
376+
arg = "positional"
377+
kwargs = {'one': 1, 'two': 2}
378+
rf.add_callback(callback, arg, **kwargs)
379+
380+
callback2 = Mock()
381+
arg2 = "another"
382+
kwargs2 = {'three': 3, 'four': 4}
383+
rf.add_callback(callback2, arg2, **kwargs2)
384+
385+
rf._set_result(self.make_mock_response(expected_result))
386+
387+
result = rf.result()
388+
self.assertEqual(result, expected_result)
389+
390+
callback.assert_called_once_with(expected_result, arg, **kwargs)
391+
callback2.assert_called_once_with(expected_result, arg2, **kwargs2)
392+
393+
def test_multiple_errbacks(self):
394+
session = self.make_session()
395+
pool = session._pools.get.return_value
396+
connection = Mock(spec=Connection)
397+
pool.borrow_connection.return_value = (connection, 1)
398+
399+
query = SimpleStatement("INSERT INFO foo (a, b) VALUES (1, 2)")
400+
query.retry_policy = Mock()
401+
query.retry_policy.on_unavailable.return_value = (RetryPolicy.RETHROW, None)
402+
message = QueryMessage(query=query, consistency_level=ConsistencyLevel.ONE)
403+
404+
rf = ResponseFuture(session, message, query)
405+
rf.send_request()
406+
407+
callback = Mock()
408+
arg = "positional"
409+
kwargs = {'one': 1, 'two': 2}
410+
rf.add_errback(callback, arg, **kwargs)
411+
412+
callback2 = Mock()
413+
arg2 = "another"
414+
kwargs2 = {'three': 3, 'four': 4}
415+
rf.add_errback(callback2, arg2, **kwargs2)
416+
417+
expected_exception = Unavailable("message", 1, 2, 3)
418+
result = Mock(spec=UnavailableErrorMessage, info={'something': 'here'})
419+
result.to_exception.return_value = expected_exception
420+
rf._set_result(result)
421+
self.assertRaises(Exception, rf.result)
422+
423+
callback.assert_called_once_with(expected_exception, arg, **kwargs)
424+
callback2.assert_called_once_with(expected_exception, arg2, **kwargs2)
425+
369426
def test_add_callbacks(self):
370427
session = self.make_session()
371428
query = SimpleStatement("INSERT INFO foo (a, b) VALUES (1, 2)")

0 commit comments

Comments
 (0)