Merge pull request #722 from trygveaa/develop
network: Respond to messages before closing connections
This commit is contained in:
commit
9d4bcf21bc
@ -267,7 +267,8 @@ class Connection(object):
|
||||
return True
|
||||
|
||||
if not data:
|
||||
self.stop('Client most likely disconnected.')
|
||||
self.actor_ref.tell({'close': True})
|
||||
self.disable_recv()
|
||||
return True
|
||||
|
||||
try:
|
||||
@ -348,6 +349,10 @@ class LineProtocol(pykka.ThreadingActor):
|
||||
|
||||
def on_receive(self, message):
|
||||
"""Handle messages with new data from server."""
|
||||
if 'close' in message:
|
||||
self.connection.stop('Client most likely disconnected.')
|
||||
return
|
||||
|
||||
if 'received' not in message:
|
||||
return
|
||||
|
||||
|
||||
@ -416,7 +416,8 @@ class ConnectionTest(unittest.TestCase):
|
||||
|
||||
self.assertTrue(network.Connection.recv_callback(
|
||||
self.mock, sentinel.fd, gobject.IO_IN))
|
||||
self.mock.stop.assert_called_once_with(any_unicode)
|
||||
self.mock.actor_ref.tell.assert_called_once_with({'close': True})
|
||||
self.mock.disable_recv.assert_called_once_with()
|
||||
|
||||
def test_recv_callback_recoverable_error(self):
|
||||
self.mock.sock = Mock(spec=socket.SocketType)
|
||||
|
||||
@ -8,6 +8,8 @@ import unittest
|
||||
|
||||
from mopidy.utils import network
|
||||
|
||||
from tests import any_unicode
|
||||
|
||||
|
||||
class LineProtocolTest(unittest.TestCase):
|
||||
def setUp(self):
|
||||
@ -33,6 +35,14 @@ class LineProtocolTest(unittest.TestCase):
|
||||
network.LineProtocol.__init__(self.mock, sentinel.connection)
|
||||
self.assertEqual(delimiter, self.mock.delimiter)
|
||||
|
||||
def test_on_receive_close_calls_stop(self):
|
||||
self.mock.connection = Mock(spec=network.Connection)
|
||||
self.mock.recv_buffer = ''
|
||||
self.mock.parse_lines.return_value = []
|
||||
|
||||
network.LineProtocol.on_receive(self.mock, {'close': True})
|
||||
self.mock.connection.stop.assert_called_once_with(any_unicode)
|
||||
|
||||
def test_on_receive_no_new_lines_adds_to_recv_buffer(self):
|
||||
self.mock.connection = Mock(spec=network.Connection)
|
||||
self.mock.recv_buffer = ''
|
||||
|
||||
Loading…
Reference in New Issue
Block a user