@@ -388,6 +388,9 @@ def setUp(self):
388388 res = ha_tools .start_replica_set ([{}, {}, {}])
389389 self .seed , self .name = res
390390
391+ # Disable periodic refresh.
392+ Monitor ._refresh_interval = 1e6
393+
391394 def test_writes_with_failover (self ):
392395 c = MongoReplicaSetClient (
393396 self .seed , replicaSet = self .name , use_greenlets = use_greenlets )
@@ -398,21 +401,35 @@ def test_writes_with_failover(self):
398401 db .test .insert ({'foo' : 'bar' }, w = w )
399402 self .assertEqual ('bar' , db .test .find_one ()['foo' ])
400403
401- def try_write ():
402- for _ in xrange (30 ):
403- try :
404- db .test .insert ({'bar' : 'baz' })
405- return True
406- except AutoReconnect :
407- sleep (1 )
408- return False
409-
410404 killed = ha_tools .kill_primary (9 )
411405 self .assertTrue (bool (len (killed )))
412- self .assertTrue (try_write ())
406+
407+ # Wait past pool's check interval, so it throws an error from
408+ # get_socket().
409+ sleep (1 )
410+
411+ # Verify that we only raise AutoReconnect, not some other error,
412+ # while we wait for new primary.
413+ for _ in xrange (10000 ):
414+ try :
415+ db .test .insert ({'bar' : 'baz' })
416+
417+ # No error, found primary.
418+ break
419+ except AutoReconnect :
420+ sleep (.01 )
421+ else :
422+ self .fail ("Couldn't connect to new primary" )
423+
424+ # Found new primary.
425+ self .assertTrue (c .primary )
413426 self .assertTrue (primary != c .primary )
414427 self .assertEqual ('baz' , db .test .find_one ({'bar' : 'baz' })['bar' ])
415428
429+ def tearDown (self ):
430+ Monitor ._refresh_interval = MONITOR_INTERVAL
431+ super (TestWritesWithFailover , self ).tearDown ()
432+
416433
417434class TestReadWithFailover (HATestCase ):
418435
0 commit comments