Reimplement test_socket_error_marks_member_down using a mock.

This commit is contained in:
A. Jesse Jiryu Davis 2013-12-07 15:08:19 -05:00
parent 01d4f931c5
commit 198b67aee1
2 changed files with 23 additions and 2 deletions

View File

@ -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

View File

@ -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(