Skip to content

Commit 5225556

Browse files
committed
unit: fix test_successful_wait_for_connection failure
This test can fail with: ``` > elif connection in self._trash: ^^^^^^^^^^^^^^^^^^^^^^^^^ E TypeError: __hash__ method should return an integer not 'MagicMock' ```
1 parent 27ca050 commit 5225556

File tree

2 files changed

+19
-10
lines changed

2 files changed

+19
-10
lines changed

tests/unit/test_host_connection_pool.py

Lines changed: 12 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,8 @@
2929
from cassandra.policies import HostDistance, SimpleConvictionPolicy
3030
import pytest
3131

32+
from tests.unit.util import HashableMock
33+
3234
LOGGER = logging.getLogger(__name__)
3335

3436

@@ -38,13 +40,13 @@ class _PoolTests(unittest.TestCase):
3840
uses_single_connection = None
3941

4042
def make_session(self):
41-
session = NonCallableMagicMock(spec=Session, keyspace='foobarkeyspace')
43+
session = NonCallableMagicMock(spec=Session, keyspace='foobarkeyspace', _trash=[])
4244
return session
4345

4446
def test_borrow_and_return(self):
4547
host = Mock(spec=Host, address='ip1')
4648
session = self.make_session()
47-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100)
49+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100)
4850
session.cluster.connection_factory.return_value = conn
4951

5052
pool = self.PoolImpl(host, HostDistance.LOCAL, session)
@@ -63,7 +65,7 @@ def test_borrow_and_return(self):
6365
def test_failed_wait_for_connection(self):
6466
host = Mock(spec=Host, address='ip1')
6567
session = self.make_session()
66-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100)
68+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100)
6769
session.cluster.connection_factory.return_value = conn
6870

6971
pool = self.PoolImpl(host, HostDistance.LOCAL, session)
@@ -82,7 +84,7 @@ def test_failed_wait_for_connection(self):
8284
def test_successful_wait_for_connection(self):
8385
host = Mock(spec=Host, address='ip1')
8486
session = self.make_session()
85-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100,
87+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100,
8688
lock=Lock())
8789
session.cluster.connection_factory.return_value = conn
8890

@@ -107,7 +109,7 @@ def get_second_conn():
107109
def test_spawn_when_at_max(self):
108110
host = Mock(spec=Host, address='ip1')
109111
session = self.make_session()
110-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100)
112+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False, max_request_id=100)
111113
conn.max_request_id = 100
112114
session.cluster.connection_factory.return_value = conn
113115

@@ -131,7 +133,7 @@ def test_spawn_when_at_max(self):
131133
def test_return_defunct_connection(self):
132134
host = Mock(spec=Host, address='ip1')
133135
session = self.make_session()
134-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False,
136+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False,
135137
max_request_id=100, signaled_error=False)
136138
session.cluster.connection_factory.return_value = conn
137139

@@ -151,7 +153,7 @@ def test_return_defunct_connection(self):
151153
def test_return_defunct_connection_on_down_host(self):
152154
host = Mock(spec=Host, address='ip1')
153155
session = self.make_session()
154-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False,
156+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=False,
155157
max_request_id=100, signaled_error=False,
156158
orphaned_threshold_reached=False)
157159
session.cluster.connection_factory.return_value = conn
@@ -180,7 +182,7 @@ def test_return_defunct_connection_on_down_host(self):
180182
def test_return_closed_connection(self):
181183
host = Mock(spec=Host, address='ip1')
182184
session = self.make_session()
183-
conn = NonCallableMagicMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=True, max_request_id=100,
185+
conn = HashableMock(spec=Connection, in_flight=0, is_defunct=False, is_closed=True, max_request_id=100,
184186
signaled_error=False, orphaned_threshold_reached=False)
185187
session.cluster.connection_factory.return_value = conn
186188

@@ -247,7 +249,7 @@ def submit(self, fn, *args, **kwargs):
247249
return self.cluster.executor.submit(fn, *args, **kwargs)
248250

249251
def mock_connection_factory(self, *args, **kwargs):
250-
connection = MagicMock()
252+
connection = HashableMock()
251253
connection.is_shutdown = False
252254
connection.is_defunct = False
253255
connection.is_closed = False
@@ -267,7 +269,7 @@ def executor_init(self, *args):
267269
LOGGER.info("Testing fast shutdown %d / 20 times", attempt_num + 1)
268270
host = MagicMock()
269271
host.endpoint = "1.2.3.4"
270-
session = MockSession()
272+
session = self.make_session()
271273

272274
pool = HostConnection(host=host, host_distance=HostDistance.REMOTE, session=session)
273275
LOGGER.info("Initialized pool %s", pool)

tests/unit/util.py

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
1010
# See the License for the specific language governing permissions and
1111
# limitations under the License.
12+
from unittest.mock import NonCallableMagicMock
1213

1314

1415
def check_sequence_consistency(ordered_sequence, equal=False):
@@ -28,3 +29,9 @@ def _check_order_consistency(smaller, bigger, equal=False):
2829
assert smaller != bigger
2930
assert smaller < bigger
3031
assert bigger > smaller
32+
33+
34+
class HashableMock(NonCallableMagicMock):
35+
36+
def __hash__(self):
37+
return id(self)

0 commit comments

Comments
 (0)