From 4bf7a568d1ce258aaf626f7d1e385a7107ab11df Mon Sep 17 00:00:00 2001 From: Lasse Bigum Date: Sat, 7 Feb 2015 16:24:51 +0100 Subject: [PATCH] Check that config is readable Implement a check on file permissions for the config files that are loaded and print debug if mopidy fails to load it due to missing file file permissions --- mopidy/config/__init__.py | 5 +++++ tests/config/test_config.py | 12 ++++++++++++ 2 files changed, 17 insertions(+) diff --git a/mopidy/config/__init__.py b/mopidy/config/__init__.py index db451cef..885ea3a6 100644 --- a/mopidy/config/__init__.py +++ b/mopidy/config/__init__.py @@ -148,6 +148,11 @@ def _load_file(parser, filename): logger.debug( 'Loading config from %s failed; it does not exist', filename) return + if not os.access(filename, os.R_OK): + logger.warning( + 'Loading config from %s failed; read permission missing', + filename) + return try: logger.info('Loading config from %s', filename) diff --git a/tests/config/test_config.py b/tests/config/test_config.py index b893c5df..8ee91d0d 100644 --- a/tests/config/test_config.py +++ b/tests/config/test_config.py @@ -15,6 +15,18 @@ class LoadConfigTest(unittest.TestCase): def test_load_nothing(self): self.assertEqual({}, config._load([], [], [])) + def test_load_missing_file(self): + file0 = path_to_data_dir('file0.conf') + result = config._load([file0], [], []) + self.assertEqual({}, result) + + @mock.patch('os.access') + def test_load_nonreadable_file(self, access_mock): + access_mock.return_value = False + file1 = path_to_data_dir('file1.conf') + result = config._load([file1], [], []) + self.assertEqual({}, result) + def test_load_single_default(self): default = b'[foo]\nbar = baz' expected = {'foo': {'bar': 'baz'}}