def test_client(self): c = MockClient(standalones=[], members=['a:1', 'b:2', 'c:3'], mongoses=[], host='a:1,b:2,c:3', replicaSet='rs', serverSelectionTimeoutMS=100, connect=False) self.addCleanup(c.close) # C is brought up as a standalone. c.mock_members.remove('c:3') c.mock_standalones.append('c:3') # Fail over. c.kill_host('a:1') c.kill_host('b:2') with self.assertRaises(ServerSelectionTimeoutError): c.db.command('ping') self.assertEqual(c.address, None) # Client can still discover the primary node c.revive_host('a:1') wait_until(lambda: c.address is not None, 'connect to primary') self.assertEqual(c.address, ('a', 1))
def test_reconnect(self): # Verify the node list isn't forgotten during a network failure. c = MockClient( standalones=[], members=["a:1", "b:2", "c:3"], mongoses=[], host="b:2", replicaSet="rs" # Pass a secondary. ) wait_until(lambda: len(c.nodes) == 3, "connect") # Total failure. c.kill_host("a:1") c.kill_host("b:2") c.kill_host("c:3") # MongoClient discovers it's alone. self.assertRaises(AutoReconnect, c.db.collection.find_one) # But it can reconnect. c.revive_host("a:1") c._get_topology().select_servers(writable_server_selector) self.assertEqual(c.address, ("a", 1))
def test_reconnect(self): # Verify the node list isn't forgotten during a network failure. c = MockClient( standalones=[], members=['a:1', 'b:2', 'c:3'], mongoses=[], host='b:2', # Pass a secondary. replicaSet='rs') wait_until(lambda: len(c.nodes) == 3, 'connect') # Total failure. c.kill_host('a:1') c.kill_host('b:2') c.kill_host('c:3') # MongoClient discovers it's alone. self.assertRaises(AutoReconnect, c.db.collection.find_one) # But it can reconnect. c.revive_host('a:1') c._get_topology().select_servers(writable_server_selector) self.assertEqual(c.address, ('a', 1))
def test_reconnect(self): # Verify the node list isn't forgotten during a network failure. c = MockClient( standalones=[], members=['a:1', 'b:2', 'c:3'], mongoses=[], host='b:2', # Pass a secondary. replicaSet='rs') # Total failure. c.kill_host('a:1') c.kill_host('b:2') c.kill_host('c:3') # MongoClient discovers it's alone. self.assertRaises(AutoReconnect, c.db.collection.find_one) # But it remembers its node list. self.assertEqual(3, len(c.nodes)) # So it can reconnect. c.revive_host('a:1') c.db.collection.find_one()