|
1 | 1 | from __future__ import print_function
|
2 | 2 |
|
| 3 | +import socket |
3 | 4 | import unittest
|
4 | 5 |
|
5 | 6 | import six
|
@@ -167,5 +168,52 @@ def test_disconnect_all_delete_multi(self):
|
167 | 168 | self.assertEqual(ret, 1)
|
168 | 169 |
|
169 | 170 |
|
| 171 | +class TestMemcacheMarkDead(unittest.TestCase): |
| 172 | + |
| 173 | + def setUp(self): |
| 174 | + self.status = locals() |
| 175 | + self.address = ("127.0.0.1", 11213) |
| 176 | + self._start_stub_server() |
| 177 | + self.client = Client(["127.0.0.1:11213"], debug=1) |
| 178 | + |
| 179 | + def tearDown(self): |
| 180 | + self._stop_stub_server() |
| 181 | + |
| 182 | + def _start_stub_server(self): |
| 183 | + # setup stub server |
| 184 | + stub_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM) |
| 185 | + stub_socket.bind(self.address) |
| 186 | + stub_socket.listen(1) |
| 187 | + self.stub_socket = stub_socket |
| 188 | + |
| 189 | + def _stop_stub_server(self): |
| 190 | + self.stub_socket.close() |
| 191 | + |
| 192 | + def test_mark_server_dead(self): |
| 193 | + mc_host = self.client._get_server('foo')[0] |
| 194 | + client_socket = mc_host._get_socket() |
| 195 | + |
| 196 | + # make sure the server is not marked dead |
| 197 | + self.assertEqual(0, mc_host._check_dead()) |
| 198 | + |
| 199 | + # stop the stub server |
| 200 | + self._stop_stub_server() |
| 201 | + |
| 202 | + # host is not yet marked as dead |
| 203 | + self.assertEqual(0, mc_host._check_dead()) |
| 204 | + |
| 205 | + # create a new stub socket again |
| 206 | + self._start_stub_server() |
| 207 | + |
| 208 | + # The client will try to re-use the old socket and if it fails |
| 209 | + # then should re-establish a new connection |
| 210 | + # so the socket must be a new one |
| 211 | + new_client_socket = mc_host._get_socket(reconnect=True) |
| 212 | + self.assertNotEquals(new_client_socket, client_socket) |
| 213 | + |
| 214 | + # server is not marked dead, because connection succeeded |
| 215 | + self.assertEqual(0, mc_host._check_dead()) |
| 216 | + |
| 217 | + |
170 | 218 | if __name__ == '__main__':
|
171 | 219 | unittest.main()
|
0 commit comments