PYTHON-1026 - Single member replica set testing
This commit is contained in:
parent
139176b254
commit
ba6ef88d10
@ -257,6 +257,10 @@ class ClientContext(object):
|
||||
def pair(self):
|
||||
return "%s:%d" % (self.host, self.port)
|
||||
|
||||
@property
|
||||
def has_secondaries(self):
|
||||
return bool(len(self.client.secondaries))
|
||||
|
||||
def _check_user_provided(self):
|
||||
try:
|
||||
self.client.admin.authenticate(db_user, db_pwd)
|
||||
@ -367,6 +371,15 @@ class ClientContext(object):
|
||||
"Not connected to a replica set",
|
||||
func=func)
|
||||
|
||||
def require_secondaries_count(self, count):
|
||||
"""Run a test only if the client is connected to a replica set that has
|
||||
`count` secondaries.
|
||||
"""
|
||||
sec_count = len(self.client.secondaries)
|
||||
return self._require(sec_count >= count,
|
||||
"Need %d secondaries, %d available"
|
||||
% (count, sec_count))
|
||||
|
||||
def require_no_replica_set(self, func):
|
||||
"""Run a test if the client is *not* connected to a replica set."""
|
||||
return self._require(
|
||||
|
||||
@ -1524,7 +1524,7 @@ class TestCollection(IntegrationTest):
|
||||
@client_context.require_version_min(2, 5, 1)
|
||||
def test_aggregation_cursor(self):
|
||||
db = self.db
|
||||
if client_context.replica_set_name:
|
||||
if client_context.has_secondaries:
|
||||
# Test that getMore messages are sent to the right server.
|
||||
db = self.client.get_database(
|
||||
db.name,
|
||||
@ -1580,7 +1580,7 @@ class TestCollection(IntegrationTest):
|
||||
def test_parallel_scan(self):
|
||||
db = self.db
|
||||
db.drop_collection("test")
|
||||
if client_context.replica_set_name:
|
||||
if client_context.has_secondaries:
|
||||
# Test that getMore messages are sent to the right server.
|
||||
db = self.client.get_database(
|
||||
db.name,
|
||||
|
||||
@ -459,6 +459,11 @@ class TestGridfs(IntegrationTest):
|
||||
|
||||
class TestGridfsReplicaSet(TestReplicaSetClientBase):
|
||||
|
||||
@classmethod
|
||||
@client_context.require_secondaries_count(1)
|
||||
def setUpClass(cls):
|
||||
super(TestGridfsReplicaSet, cls).setUpClass()
|
||||
|
||||
def test_gridfs_replica_set(self):
|
||||
rsc = rs_client(
|
||||
w=self.w,
|
||||
|
||||
@ -444,6 +444,11 @@ class TestGridfs(IntegrationTest):
|
||||
|
||||
class TestGridfsBucketReplicaSet(TestReplicaSetClientBase):
|
||||
|
||||
@classmethod
|
||||
@client_context.require_secondaries_count(1)
|
||||
def setUpClass(cls):
|
||||
super(TestGridfsBucketReplicaSet, cls).setUpClass()
|
||||
|
||||
def test_gridfs_replica_set(self):
|
||||
rsc = rs_client(
|
||||
w=self.w,
|
||||
|
||||
@ -386,6 +386,7 @@ class TestCommandMonitoring(unittest.TestCase):
|
||||
self.assertEqual(0, failed.failure.get("ok"))
|
||||
|
||||
@client_context.require_replica_set
|
||||
@client_context.require_secondaries_count(1)
|
||||
def test_not_master_error(self):
|
||||
address = next(iter(client_context.client.secondaries))
|
||||
client = single_client(*address, event_listeners=[self.listener])
|
||||
|
||||
@ -77,6 +77,11 @@ class TestReadPreferenceObjects(unittest.TestCase):
|
||||
|
||||
class TestReadPreferencesBase(TestReplicaSetClientBase):
|
||||
|
||||
@classmethod
|
||||
@client_context.require_secondaries_count(1)
|
||||
def setUpClass(cls):
|
||||
super(TestReadPreferencesBase, cls).setUpClass()
|
||||
|
||||
def setUp(self):
|
||||
super(TestReadPreferencesBase, self).setUp()
|
||||
# Insert some data so we can use cursors in read_from_which_host
|
||||
@ -158,6 +163,7 @@ class TestSingleSlaveOk(TestReadPreferencesBase):
|
||||
|
||||
|
||||
class TestReadPreferences(TestReadPreferencesBase):
|
||||
|
||||
def test_mode_validation(self):
|
||||
for mode in (ReadPreference.PRIMARY,
|
||||
ReadPreference.PRIMARY_PREFERRED,
|
||||
@ -322,6 +328,7 @@ _PREF_MAP = [
|
||||
class TestCommandAndReadPreference(TestReplicaSetClientBase):
|
||||
|
||||
@classmethod
|
||||
@client_context.require_secondaries_count(1)
|
||||
def setUpClass(cls):
|
||||
super(TestCommandAndReadPreference, cls).setUpClass()
|
||||
cls.c = ReadPrefTester(
|
||||
|
||||
@ -160,6 +160,7 @@ class TestReplicaSetClient(TestReplicaSetClientBase):
|
||||
self.assertEqual(c.max_bson_size, 16777216)
|
||||
c.close()
|
||||
|
||||
@client_context.require_secondaries_count(1)
|
||||
def test_auto_reconnect_exception_when_read_preference_is_secondary(self):
|
||||
c = MongoClient(
|
||||
client_context.pair,
|
||||
@ -180,6 +181,7 @@ class TestReplicaSetClient(TestReplicaSetClientBase):
|
||||
finally:
|
||||
socket.socket.sendall = old_sendall
|
||||
|
||||
@client_context.require_secondaries_count(1)
|
||||
def test_timeout_does_not_mark_member_down(self):
|
||||
# If a query times out, the client shouldn't mark the member "down".
|
||||
|
||||
@ -285,9 +287,11 @@ class TestReplicaSetClient(TestReplicaSetClientBase):
|
||||
def test_kill_cursor_explicit_primary(self):
|
||||
self._test_kill_cursor_explicit(ReadPreference.PRIMARY)
|
||||
|
||||
@client_context.require_secondaries_count(1)
|
||||
def test_kill_cursor_explicit_secondary(self):
|
||||
self._test_kill_cursor_explicit(ReadPreference.SECONDARY)
|
||||
|
||||
@client_context.require_secondaries_count(1)
|
||||
def test_not_master_error(self):
|
||||
secondary_address = one(self.secondaries)
|
||||
direct_client = single_client(*secondary_address)
|
||||
|
||||
Loading…
Reference in New Issue
Block a user