class TestMemcacheMarkDead(unittest.TestCase): def setUp(self): self.status = locals() self.address = ("127.0.0.1", 11213) self._start_stub_server() self.client = Client(["127.0.0.1:11213"], debug=1) def tearDown(self): self._stop_stub_server() def _start_stub_server(self): # setup stub server stub_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) stub_socket.bind(self.address) stub_socket.listen(1) self.stub_socket = stub_socket def _stop_stub_server(self): self.stub_socket.close() def test_mark_server_dead(self): mc_host = self.client._get_server('foo'.encode('utf8'))[0] client_socket = mc_host._get_socket() # make sure the server is not marked dead self.assertEqual(0, mc_host._check_dead()) # stop the stub server self._stop_stub_server() # host is not yet marked as dead self.assertEqual(0, mc_host._check_dead()) # create a new stub socket again self._start_stub_server() # The client will try to re-use the old socket and if it fails # then should re-establish a new connection # so the socket must be a new one new_client_socket = mc_host._get_socket(reconnect=True) self.assertNotEqual(new_client_socket, client_socket) # server is not marked dead, because connection succeeded self.assertEqual(0, mc_host._check_dead())