From 34f0a65c49492ed62f399fd74aa25a6a4edcfc33 Mon Sep 17 00:00:00 2001 From: Chris Glass Date: Thu, 26 Jun 2014 11:08:13 +0200 Subject: [PATCH] Added more tests for user config parsing. --- lib/simple_config.py | 17 +++++++----- lib/tests/test_simple_config.py | 51 ++++++++++++++++++++++++++++++++++++++- 2 files changed, 60 insertions(+), 8 deletions(-) diff --git a/lib/simple_config.py b/lib/simple_config.py index 86df566..d4893b1 100644 --- a/lib/simple_config.py +++ b/lib/simple_config.py @@ -157,19 +157,22 @@ def read_system_config(path=SYSTEM_CONFIG_PATH): def read_user_config(path): """Parse and store the user config settings in electrum.conf into user_config[].""" - if not path: return + if not path: return {} # Return a dict, since we will call update() on it. config_path = os.path.join(path, "config") + result = {} if os.path.exists(config_path): try: + with open(config_path, "r") as f: data = f.read() - except IOError: - return - try: - d = ast.literal_eval( data ) #parse raw data from reading wallet file + result = ast.literal_eval( data ) #parse raw data from reading wallet file + except Exception: print_msg("Error: Cannot read config file.") - return + result = {} - return d + if not type(result) is dict: + return {} + + return result diff --git a/lib/tests/test_simple_config.py b/lib/tests/test_simple_config.py index f288b7f..40d3360 100644 --- a/lib/tests/test_simple_config.py +++ b/lib/tests/test_simple_config.py @@ -5,7 +5,8 @@ import tempfile import shutil from StringIO import StringIO -from lib.simple_config import SimpleConfig, read_system_config +from lib.simple_config import (SimpleConfig, read_system_config, + read_user_config) class Test_SimpleConfig(unittest.TestCase): @@ -150,6 +151,7 @@ everything = 42 self.thefile = tempfile.mkstemp(suffix=".electrum.test.conf")[1] def tearDown(self): + super(TestSystemConfig, self).tearDown() os.remove(self.thefile) def test_read_system_config_file_does_not_exist(self): @@ -171,3 +173,50 @@ everything = 42 result = read_system_config(self.thefile) self.assertEqual({}, result) + + +class TestUserConfig(unittest.TestCase): + + def setUp(self): + super(TestUserConfig, self).setUp() + self._saved_stdout = sys.stdout + self._stdout_buffer = StringIO() + sys.stdout = self._stdout_buffer + + self.user_dir = tempfile.mkdtemp() + + def tearDown(self): + super(TestUserConfig, self).tearDown() + shutil.rmtree(self.user_dir) + sys.stdout = self._saved_stdout + + def test_no_path_means_no_result(self): + result = read_user_config(None) + self.assertEqual({}, result) + + def test_path_with_reprd_dict(self): + thefile = os.path.join(self.user_dir, "config") + payload = {"gap_limit": 5} + with open(thefile, "w") as f: + f.write(repr(payload)) + + result = read_user_config(self.user_dir) + self.assertEqual(payload, result) + + def test_path_without_config_file(self): + """We pass a path but if does not contain a "config" file.""" + result = read_user_config(self.user_dir) + self.assertEqual({}, result) + + def test_path_with_reprd_object(self): + + class something(object): + pass + + thefile = os.path.join(self.user_dir, "config") + payload = something() + with open(thefile, "w") as f: + f.write(repr(payload)) + + result = read_user_config(self.user_dir) + self.assertEqual({}, result) -- 1.7.1