Extract send to seperate method

This commit is contained in:
Thomas Adamcik 2011-07-28 22:34:47 +02:00
parent 13d4510e12
commit 43f4f1537e
2 changed files with 17 additions and 14 deletions

View File

@ -253,18 +253,23 @@ class Connection(object):
return True
try:
sent = self.sock.send(self.send_buffer)
self.send_buffer = self.send_buffer[sent:]
self.send_buffer = self.send(self.send_buffer)
if not self.send_buffer:
self.disable_send()
except socket.error as e:
if e.errno not in (errno.EWOULDBLOCK, errno.EINTR):
self.stop(u'Unexpected client error: %s' % e)
finally:
self.send_lock.release()
return True
def send(self, data):
try:
sent = self.sock.send(data)
return data[sent:]
except socket.error as e:
if e.errno in (errno.EWOULDBLOCK, errno.EINTR):
return data
self.stop(u'Unexpected client error: %s' % e)
def timeout_callback(self):
self.stop(u'Client timeout out after %s seconds' % self.timeout)
return False

View File

@ -8,7 +8,7 @@ import unittest
from mopidy.utils import network
from mock import patch, sentinel, Mock
from tests import any_int, any_unicode
from tests import any_int, any_unicode, SkipTest
class ConnectionTest(unittest.TestCase):
def setUp(self):
@ -473,32 +473,30 @@ class ConnectionTest(unittest.TestCase):
self.mock.send_lock = Mock()
self.mock.send_lock.acquire.return_value = True
self.mock.send_buffer = 'data'
self.mock.sock = Mock(spec=socket.SocketType)
self.mock.sock.send.return_value = 4
self.mock.send.return_value = ''
self.assertTrue(network.Connection.send_callback(
self.mock, sentinel.fd, gobject.IO_IN))
self.mock.disable_send.assert_called_once_with()
self.mock.sock.send.assert_called_once_with('data')
self.mock.send.assert_called_once_with('data')
self.assertEqual('', self.mock.send_buffer)
def test_send_callback_sends_partial_data(self):
self.mock.send_lock = Mock()
self.mock.send_lock.acquire.return_value = True
self.mock.send_buffer = 'data'
self.mock.sock = Mock(spec=socket.SocketType)
self.mock.sock.send.return_value = 2
self.mock.send.return_value = 'ta'
self.assertTrue(network.Connection.send_callback(
self.mock, sentinel.fd, gobject.IO_IN))
self.mock.sock.send.assert_called_once_with('data')
self.mock.send.assert_called_once_with('data')
self.assertEqual('ta', self.mock.send_buffer)
@SkipTest
def test_send_callback_recoverable_error(self):
self.mock.send_lock = Mock()
self.mock.send_lock.acquire.return_value = True
self.mock.send_buffer = 'data'
self.mock.sock = Mock(spec=socket.SocketType)
for error in (errno.EWOULDBLOCK, errno.EINTR):
self.mock.sock.send.side_effect = socket.error(error, '')
@ -506,11 +504,11 @@ class ConnectionTest(unittest.TestCase):
self.mock, sentinel.fd, gobject.IO_IN))
self.assertEqual(0, self.mock.stop.call_count)
@SkipTest
def test_send_callback_unrecoverable_error(self):
self.mock.send_lock = Mock()
self.mock.send_lock.acquire.return_value = True
self.mock.send_buffer = 'data'
self.mock.sock = Mock(spec=socket.SocketType)
self.mock.sock.send.side_effect = socket.error
self.assertTrue(network.Connection.send_callback(