]> kaliko git repositories - python-musicpdaio.git/blob - tests/test_envvars.py
Add first test (env var)
[python-musicpdaio.git] / tests / test_envvars.py
1 #!/usr/bin/env python3
2 # coding: utf-8
3 # SPDX-FileCopyrightText: 2012-2024  kaliko <kaliko@azylum.org>
4 # SPDX-License-Identifier: LGPL-3.0-or-later
5 # pylint: disable=missing-docstring
6
7 import unittest
8 import unittest.mock
9 import os
10 import warnings
11
12 import mpdaio.client
13 import mpdaio.const
14
15 # show deprecation warnings
16 warnings.simplefilter('default')
17
18
19 class TestEnvVar(unittest.TestCase):
20
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
24         # when :
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')
33
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')
40
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')
46
47         # Test host alone
48         os.environ['MPD_HOST'] = 'example.org'
49         client = mpdaio.client.MPDClient()
50         self.assertFalse(client.pwd)
51         self.assertEqual(client.host, 'example.org')
52
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')
59
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')
66
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')
71
72         # Test plain abstract socket extraction
73         os.environ['MPD_HOST'] = '@abstract'
74         client = mpdaio.client.MPDClient()
75         self.assertEqual(client.host, '@abstract')
76
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')
82
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')
93
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')
100
101         # Test MPD_TIMEOUT
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'
111         del client
112         client = mpdaio.client.MPDClient()
113         self.assertEqual(client.mpd_timeout, 42)