82 lines
3.3 KiB
Python
82 lines
3.3 KiB
Python
import unittest
|
|
|
|
from mopidy import settings
|
|
from mopidy.frontends.mpd import server
|
|
|
|
class MpdServerTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.server = server.MpdServer(None)
|
|
|
|
def test_format_hostname_prefixes_ipv4_addresses_when_ipv6_available(self):
|
|
server.socket.has_ipv6 = True
|
|
self.assertEqual(self.server._format_hostname('0.0.0.0'),
|
|
'::ffff:0.0.0.0')
|
|
self.assertEqual(self.server._format_hostname('127.0.0.1'),
|
|
'::ffff:127.0.0.1')
|
|
|
|
def test_format_hostname_does_nothing_when_only_ipv4_available(self):
|
|
server.socket.has_ipv6 = False
|
|
self.assertEquals(self.server._format_hostname('0.0.0.0'), '0.0.0.0')
|
|
|
|
class MpdSessionTest(unittest.TestCase):
|
|
def setUp(self):
|
|
self.session = server.MpdSession(None, None, (None, None), None)
|
|
|
|
def tearDown(self):
|
|
settings.runtime.clear()
|
|
|
|
def test_found_terminator_catches_decode_error(self):
|
|
# Pressing Ctrl+C in a telnet session sends a 0xff byte to the server.
|
|
self.session.input_buffer = ['\xff']
|
|
self.session.found_terminator()
|
|
self.assertEqual(len(self.session.input_buffer), 0)
|
|
|
|
def test_authentication_with_valid_password_is_accepted(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'password "topsecret"')
|
|
self.assertTrue(authed)
|
|
self.assertEqual(u'OK', response)
|
|
|
|
def test_authentication_with_invalid_password_is_not_accepted(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'password "secret"')
|
|
self.assertFalse(authed)
|
|
self.assertEqual(u'ACK [3@0] {password} incorrect password', response)
|
|
|
|
def test_authentication_with_anything_when_password_check_turned_off(self):
|
|
settings.MPD_SERVER_PASSWORD = None
|
|
authed, response = self.session.check_password(u'any request at all')
|
|
self.assertTrue(authed)
|
|
self.assertEqual(None, response)
|
|
|
|
def test_anything_when_not_authenticated_should_fail(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'any request at all')
|
|
self.assertFalse(authed)
|
|
self.assertEqual(
|
|
u'ACK [4@0] {any} you don\'t have permission for "any"', response)
|
|
|
|
def test_close_is_allowed_without_authentication(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'close')
|
|
self.assertFalse(authed)
|
|
self.assertEqual(None, response)
|
|
|
|
def test_commands_is_allowed_without_authentication(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'commands')
|
|
self.assertFalse(authed)
|
|
self.assertEqual(None, response)
|
|
|
|
def test_notcommands_is_allowed_without_authentication(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'notcommands')
|
|
self.assertFalse(authed)
|
|
self.assertEqual(None, response)
|
|
|
|
def test_ping_is_allowed_without_authentication(self):
|
|
settings.MPD_SERVER_PASSWORD = u'topsecret'
|
|
authed, response = self.session.check_password(u'ping')
|
|
self.assertFalse(authed)
|
|
self.assertEqual(None, response)
|