From 198b67aee1fdeea2fdc468f4e454e5e138171ecc Mon Sep 17 00:00:00 2001 From: "A. Jesse Jiryu Davis" Date: Sat, 7 Dec 2013 15:08:19 -0500 Subject: [PATCH] Reimplement test_socket_error_marks_member_down using a mock. --- test/pymongo_mocks.py | 2 +- test/test_replica_set_reconfig.py | 23 ++++++++++++++++++++++- 2 files changed, 23 insertions(+), 2 deletions(-) diff --git a/test/pymongo_mocks.py b/test/pymongo_mocks.py index 7a4c9e42e..2ad45eb6f 100644 --- a/test/pymongo_mocks.py +++ b/test/pymongo_mocks.py @@ -43,7 +43,7 @@ class MockPool(Pool): client = self.client host_and_port = '%s:%s' % (self.mock_host, self.mock_port) if host_and_port in client.mock_down_hosts: - raise socket.timeout('mock timeout') + raise socket.error('mock error') assert host_and_port in ( client.mock_standalones diff --git a/test/test_replica_set_reconfig.py b/test/test_replica_set_reconfig.py index 3084124f1..33432a4aa 100644 --- a/test/test_replica_set_reconfig.py +++ b/test/test_replica_set_reconfig.py @@ -19,7 +19,8 @@ import unittest sys.path[0:0] = [""] -from pymongo.errors import AutoReconnect +from pymongo.errors import AutoReconnect, ConnectionFailure +from pymongo import ReadPreference from test.pymongo_mocks import MockClient, MockReplicaSetClient @@ -102,6 +103,26 @@ class TestSecondaryRemoved(unittest.TestCase): self.assertEqual(set([('b', 2)]), c.secondaries) +class TestSocketError(unittest.TestCase): + def test_socket_error_marks_member_down(self): + c = MockReplicaSetClient( + standalones=[], + members=['a:1', 'b:2'], + mongoses=[], + host='a:1', + replicaSet='rs') + + self.assertEqual(2, len(c._MongoReplicaSetClient__rs_state.members)) + + # b now raises socket.error. + c.mock_down_hosts.append('b:2') + self.assertRaises( + ConnectionFailure, + c.db.collection.find_one, read_preference=ReadPreference.SECONDARY) + + self.assertEqual(1, len(c._MongoReplicaSetClient__rs_state.members)) + + class TestSecondaryAdded(unittest.TestCase): def test_client(self): c = MockClient(