Skip to content

Commit 7a92d92

Browse files
committed
response-future: cover send failure stream id cleanup
1 parent c606b90 commit 7a92d92

1 file changed

Lines changed: 28 additions & 0 deletions

File tree

tests/unit/test_response_future.py

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,34 @@ def test_unknown_result_class(self):
9797
with pytest.raises(ConnectionException):
9898
rf.result()
9999

100+
def test_query_releases_request_id_when_send_fails_after_registration(self):
101+
session = self.make_session()
102+
pool = session._pools.get.return_value
103+
connection = Connection('1.2.3.4')
104+
connection.push = Mock(side_effect=ConnectionException("write failed"))
105+
106+
initial_request_ids = len(connection.request_ids)
107+
request_id = connection.request_ids.popleft()
108+
connection.in_flight += 1
109+
pool.borrow_connection.return_value = (connection, request_id)
110+
111+
def return_connection(conn):
112+
with conn.lock:
113+
conn.in_flight -= 1
114+
115+
pool.return_connection.side_effect = return_connection
116+
117+
query = SimpleStatement("SELECT * FROM foo")
118+
message = QueryMessage(query=query.query_string, consistency_level=ConsistencyLevel.ONE)
119+
rf = ResponseFuture(session, message, query, 1)
120+
121+
assert rf._query('ip1') is None
122+
pool.return_connection.assert_called_once_with(connection)
123+
assert connection.in_flight == 0
124+
assert len(connection.request_ids) == initial_request_ids
125+
assert request_id in connection.request_ids
126+
assert not connection._requests
127+
100128
def test_set_keyspace_result(self):
101129
session = self.make_session()
102130
rf = self.make_response_future(session)

0 commit comments

Comments
 (0)