Skip to content

Commit e727875

Browse files
committed
Testing socket.error handling
1 parent 95d1a10 commit e727875

File tree

2 files changed

+40
-0
lines changed

2 files changed

+40
-0
lines changed

test-requirements.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
11
nose
22
coverage
33
hacking
4+
mock

tests/test_memcache.py

Lines changed: 39 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44
import multiprocessing
55
import os
66
import signal
7+
import socket
78
import sys
89
import traceback
910
import unittest
@@ -12,6 +13,9 @@
1213

1314
from memcache import Client, SERVER_MAX_KEY_LENGTH, SERVER_MAX_VALUE_LENGTH # noqa: H301
1415

16+
from mock import Mock
17+
from mock import patch
18+
1519

1620
class FooStruct(object):
1721

@@ -172,6 +176,41 @@ def test_disconnect_all_delete_multi(self):
172176
ret = self.mc.delete_multi({'keyhere': 'a', 'keythere': 'b'})
173177
self.assertEqual(ret, 1)
174178

179+
def test_socket_error(self):
180+
"""Tests case when socket.error exception was raised"""
181+
self.mc.set('socket.error', 1)
182+
server = Mock(
183+
# Should we catch secket.error when establishing connection?
184+
# connect=Mock(side_effect=socket.error(-1, 'connect error')),
185+
send_cmd=Mock(side_effect=socket.error(-1, 'send cmd error')),
186+
send_cmds=Mock(side_effect=socket.error(-1, 'send cmds error')),
187+
flush=Mock(side_effect=socket.error(-1, 'flush error')),
188+
)
189+
with patch.object(self.mc, 'servers', [server]), \
190+
patch.object(self.mc, 'buckets', [server]):
191+
self.assertEqual(self.mc.set('socket.error', 2), 0)
192+
self.assertEqual(
193+
self.mc.set_multi({'socket.error': 2}),
194+
['socket.error']
195+
)
196+
self.assertIs(self.mc.incr('socket.error'), None)
197+
self.assertIs(self.mc.decr('socket.error'), None)
198+
self.assertEqual(self.mc.add('socket.error', 5), 0)
199+
self.assertEqual(self.mc.append('socket.error', 9), 0)
200+
self.assertEqual(self.mc.prepend('socket.error', 1), 0)
201+
self.assertEqual(self.mc.replace('socket.error', 100), 0)
202+
self.assertEqual(self.mc.cas('socket.error', 100), 0)
203+
self.assertEqual(self.mc.delete('socket.error'), 0)
204+
self.assertEqual(self.mc.delete_multi(['socket.error']), 0)
205+
self.assertEqual(self.mc.touch('socket.error'), 0)
206+
self.assertIs(self.mc.get('socket.error'), None)
207+
self.assertIs(self.mc.gets('socket.error'), None)
208+
self.assertEqual(self.mc.get_multi(['socket.error']), {})
209+
self.assertRaises(socket.error, self.mc.get_stats)
210+
self.assertRaises(socket.error, self.mc.get_slab_stats)
211+
self.assertRaises(socket.error, self.mc.get_slabs)
212+
self.assertRaises(socket.error, self.mc.flush_all)
213+
175214
def test_exception_handling(self):
176215
"""Tests closing socket when custom exception raised"""
177216
queue = multiprocessing.Queue()

0 commit comments

Comments
 (0)