2727from ha_tools import use_greenlets
2828
2929
30- from pymongo import (MongoReplicaSetClient ,
31- ReadPreference )
32- from pymongo .mongo_replica_set_client import (
33- Member , Monitor , MongoReplicaSetClient )
34- from pymongo .mongo_client import _partition_node
35- from pymongo .mongo_client import MongoClient
3630from pymongo .errors import AutoReconnect , OperationFailure , ConnectionFailure
37- from pymongo .read_preferences import modes
31+ from pymongo .mongo_replica_set_client import Member , Monitor
32+ from pymongo .mongo_replica_set_client import MongoReplicaSetClient
33+ from pymongo .mongo_client import MongoClient , _partition_node
34+ from pymongo .read_preferences import ReadPreference , modes
3835
3936from test import utils
4037from test .utils import one
5249NEAREST = ReadPreference .NEAREST
5350
5451
55- class TestDirectConnection (unittest .TestCase ):
52+ class HATestCase (unittest .TestCase ):
53+ """A test case for connections to replica sets or mongos."""
54+
55+ def tearDown (self ):
56+ ha_tools .kill_all_members ()
57+ ha_tools .nodes .clear ()
58+
59+
60+ class TestDirectConnection (HATestCase ):
5661
5762 def setUp (self ):
5863 members = [{}, {}, {'arbiterOnly' : True }]
@@ -145,10 +150,10 @@ def test_secondary_connection(self):
145150
146151 def tearDown (self ):
147152 self .c .close ()
148- ha_tools . kill_all_members ()
153+ super ( TestDirectConnection , self ). tearDown ()
149154
150155
151- class TestPassiveAndHidden (unittest . TestCase ):
156+ class TestPassiveAndHidden (HATestCase ):
152157
153158 def setUp (self ):
154159 members = [{},
@@ -177,10 +182,10 @@ def test_passive_and_hidden(self):
177182
178183 def tearDown (self ):
179184 self .c .close ()
180- ha_tools . kill_all_members ()
185+ super ( TestPassiveAndHidden , self ). tearDown ()
181186
182187
183- class TestMonitorRemovesRecoveringMember (unittest . TestCase ):
188+ class TestMonitorRemovesRecoveringMember (HATestCase ):
184189 # Members in STARTUP2 or RECOVERING states are shown in the primary's
185190 # isMaster response, but aren't secondaries and shouldn't be read from.
186191 # Verify that if a secondary goes into RECOVERING mode, the Monitor removes
@@ -211,10 +216,10 @@ def test_monitor_removes_recovering_member(self):
211216
212217 def tearDown (self ):
213218 self .c .close ()
214- ha_tools . kill_all_members ()
219+ super ( TestMonitorRemovesRecoveringMember , self ). tearDown ()
215220
216221
217- class TestTriggeredRefresh (unittest . TestCase ):
222+ class TestTriggeredRefresh (HATestCase ):
218223 # Verify that if a secondary goes into RECOVERING mode or if the primary
219224 # changes, the next exception triggers an immediate refresh.
220225
@@ -282,14 +287,14 @@ def test_stepdown_triggers_refresh(self):
282287 # We've detected the stepdown
283288 self .assertTrue (
284289 not c_find_one .primary
285- or primary != _partition_node ( c_find_one .primary ) )
290+ or _partition_node ( primary ) != c_find_one .primary )
286291
287292 def tearDown (self ):
288293 Monitor ._refresh_interval = MONITOR_INTERVAL
289- ha_tools . kill_all_members ()
294+ super ( TestTriggeredRefresh , self ). tearDown ()
290295
291296
292- class TestHealthMonitor (unittest . TestCase ):
297+ class TestHealthMonitor (HATestCase ):
293298
294299 def setUp (self ):
295300 res = ha_tools .start_replica_set ([{}, {}, {}])
@@ -357,17 +362,10 @@ def primary_changed():
357362
358363 ha_tools .stepdown_primary ()
359364 self .assertTrue (primary_changed ())
360-
361- # There can be a delay between finding the primary and updating
362- # secondaries
363- sleep (5 )
364365 self .assertNotEqual (secondaries , c .secondaries )
365366
366- def tearDown (self ):
367- ha_tools .kill_all_members ()
368-
369367
370- class TestWritesWithFailover (unittest . TestCase ):
368+ class TestWritesWithFailover (HATestCase ):
371369
372370 def setUp (self ):
373371 res = ha_tools .start_replica_set ([{}, {}, {}])
@@ -398,11 +396,8 @@ def try_write():
398396 self .assertTrue (primary != c .primary )
399397 self .assertEqual ('baz' , db .test .find_one ({'bar' : 'baz' })['bar' ])
400398
401- def tearDown (self ):
402- ha_tools .kill_all_members ()
403-
404399
405- class TestReadWithFailover (unittest . TestCase ):
400+ class TestReadWithFailover (HATestCase ):
406401
407402 def setUp (self ):
408403 res = ha_tools .start_replica_set ([{}, {}, {}])
@@ -435,11 +430,8 @@ def iter_cursor(cursor):
435430 self .assertTrue (iter_cursor (cursor ))
436431 self .assertEqual (10 , cursor ._Cursor__retrieved )
437432
438- def tearDown (self ):
439- ha_tools .kill_all_members ()
440433
441-
442- class TestReadPreference (unittest .TestCase ):
434+ class TestReadPreference (HATestCase ):
443435 def setUp (self ):
444436 members = [
445437 # primary
@@ -784,11 +776,10 @@ def test_pinning(self):
784776
785777 def tearDown (self ):
786778 self .c .close ()
787- ha_tools .kill_all_members ()
788- self .clear_ping_times ()
779+ super (TestReadPreference , self ).tearDown ()
789780
790781
791- class TestReplicaSetAuth (unittest . TestCase ):
782+ class TestReplicaSetAuth (HATestCase ):
792783 def setUp (self ):
793784 members = [
794785 {},
@@ -829,10 +820,10 @@ def test_auth_during_failover(self):
829820
830821 def tearDown (self ):
831822 self .c .close ()
832- ha_tools . kill_all_members ()
823+ super ( TestReplicaSetAuth , self ). tearDown ()
833824
834825
835- class TestAlive (unittest . TestCase ):
826+ class TestAlive (HATestCase ):
836827 def setUp (self ):
837828 members = [{}, {}]
838829 self .seed , self .name = ha_tools .start_replica_set (members )
@@ -866,11 +857,8 @@ def test_alive(self):
866857 finally :
867858 rsc .close ()
868859
869- def tearDown (self ):
870- ha_tools .kill_all_members ()
871860
872-
873- class TestMongosHighAvailability (unittest .TestCase ):
861+ class TestMongosHighAvailability (HATestCase ):
874862 def setUp (self ):
875863 seed_list = ha_tools .create_sharded_cluster ()
876864 self .dbname = 'pymongo_mongos_ha'
@@ -910,10 +898,10 @@ def test_mongos_ha(self):
910898
911899 def tearDown (self ):
912900 self .client .drop_database (self .dbname )
913- ha_tools . kill_all_members ()
901+ super ( TestMongosHighAvailability , self ). tearDown ()
914902
915903
916- class TestReplicaSetRequest (unittest . TestCase ):
904+ class TestReplicaSetRequest (HATestCase ):
917905 def setUp (self ):
918906 members = [{}, {}, {'arbiterOnly' : True }]
919907 res = ha_tools .start_replica_set (members )
@@ -928,8 +916,9 @@ def test_request_during_failover(self):
928916 self .assertTrue (self .c .auto_start_request )
929917 self .assertTrue (self .c .in_request ())
930918
931- primary_pool = self .c ._MongoReplicaSetClient__members [primary ].pool
932- secondary_pool = self .c ._MongoReplicaSetClient__members [secondary ].pool
919+ rs_state = self .c ._MongoReplicaSetClient__rs_state
920+ primary_pool = rs_state .get (primary ).pool
921+ secondary_pool = rs_state .get (secondary ).pool
933922
934923 # Trigger start_request on primary pool
935924 utils .assertReadFrom (self , self .c , primary , PRIMARY )
@@ -967,7 +956,7 @@ def test_request_during_failover(self):
967956
968957 def tearDown (self ):
969958 self .c .close ()
970- ha_tools . kill_all_members ()
959+ super ( TestReplicaSetRequest , self ). tearDown ()
971960
972961
973962if __name__ == '__main__' :
0 commit comments