3 # SPDX-FileCopyrightText: 2012-2024 kaliko <kaliko@azylum.org>
4 # SPDX-License-Identifier: LGPL-3.0-or-later
5 # pylint: disable=missing-docstring
15 # show deprecation warnings
16 warnings.simplefilter('default')
19 class TestEnvVar(unittest.TestCase):
21 def test_envvar(self):
22 # mock "os.path.exists" here to ensure there are no socket in
23 # XDG_RUNTIME_DIR/mpd or /run/mpd since with test defaults fallbacks
25 # * neither MPD_HOST nor XDG_RUNTIME_DIR are not set
26 # * /run/mpd does not expose a socket
27 with unittest.mock.patch('os.path.exists', return_value=False):
28 os.environ.pop('MPD_HOST', None)
29 os.environ.pop('MPD_PORT', None)
30 client = mpdaio.client.MPDClient()
31 self.assertEqual(client.host, 'localhost')
32 self.assertEqual(client.port, '6600')
34 os.environ.pop('MPD_HOST', None)
35 os.environ['MPD_PORT'] = '6666'
36 client = mpdaio.client.MPDClient()
37 self.assertEqual(client.pwd, None)
38 self.assertEqual(client.host, 'localhost')
39 self.assertEqual(client.port, '6666')
41 # Test password extraction
42 os.environ['MPD_HOST'] = 'pa55w04d@example.org'
43 client = mpdaio.client.MPDClient()
44 self.assertEqual(client.pwd, 'pa55w04d')
45 self.assertEqual(client.host, 'example.org')
48 os.environ['MPD_HOST'] = 'example.org'
49 client = mpdaio.client.MPDClient()
50 self.assertFalse(client.pwd)
51 self.assertEqual(client.host, 'example.org')
53 # Test password extraction (no host)
54 os.environ['MPD_HOST'] = 'pa55w04d@'
55 with unittest.mock.patch('os.path.exists', return_value=False):
56 client = mpdaio.client.MPDClient()
57 self.assertEqual(client.pwd, 'pa55w04d')
58 self.assertEqual(client.host, 'localhost')
60 # Test badly formatted MPD_HOST
61 os.environ['MPD_HOST'] = '@'
62 with unittest.mock.patch('os.path.exists', return_value=False):
63 client = mpdaio.client.MPDClient()
64 self.assertEqual(client.pwd, None)
65 self.assertEqual(client.host, 'localhost')
67 # Test unix socket extraction
68 os.environ['MPD_HOST'] = 'pa55w04d@/unix/sock'
69 client = mpdaio.client.MPDClient()
70 self.assertEqual(client.host, '/unix/sock')
72 # Test plain abstract socket extraction
73 os.environ['MPD_HOST'] = '@abstract'
74 client = mpdaio.client.MPDClient()
75 self.assertEqual(client.host, '@abstract')
77 # Test password and abstract socket extraction
78 os.environ['MPD_HOST'] = 'pass@@abstract'
79 client = mpdaio.client.MPDClient()
80 self.assertEqual(client.pwd, 'pass')
81 self.assertEqual(client.host, '@abstract')
83 # Test unix socket fallback
84 os.environ.pop('MPD_HOST', None)
85 os.environ.pop('MPD_PORT', None)
86 os.environ.pop('XDG_RUNTIME_DIR', None)
87 with unittest.mock.patch('os.path.exists', return_value=True):
88 client = mpdaio.client.MPDClient()
89 self.assertEqual(client.host, '/run/mpd/socket')
90 os.environ['XDG_RUNTIME_DIR'] = '/run/user/1000'
91 client = mpdaio.client.MPDClient()
92 self.assertEqual(client.host, '/run/user/1000/mpd/socket')
94 os.environ.pop('MPD_HOST', None)
95 os.environ.pop('MPD_PORT', None)
96 os.environ['XDG_RUNTIME_DIR'] = '/run/user/1000/'
97 with unittest.mock.patch('os.path.exists', return_value=True):
98 client = mpdaio.client.MPDClient()
99 self.assertEqual(client.host, '/run/user/1000/mpd/socket')
102 os.environ.pop('MPD_TIMEOUT', None)
103 client = mpdaio.client.MPDClient()
104 self.assertEqual(client.mpd_timeout, mpdaio.const.CONNECTION_TIMEOUT)
105 os.environ['MPD_TIMEOUT'] = 'garbage'
106 client = mpdaio.client.MPDClient()
107 self.assertEqual(client.mpd_timeout,
108 mpdaio.const.CONNECTION_TIMEOUT,
109 'Garbage is silently ignore to use default value')
110 os.environ['MPD_TIMEOUT'] = '42'
112 client = mpdaio.client.MPDClient()
113 self.assertEqual(client.mpd_timeout, 42)