2014-06-25 08:34:51 -07:00
|
|
|
import sys
|
|
|
|
import unittest
|
|
|
|
import tempfile
|
|
|
|
import shutil
|
|
|
|
|
|
|
|
from StringIO import StringIO
|
|
|
|
from lib.simple_config import SimpleConfig
|
|
|
|
|
|
|
|
|
|
|
|
class Test_SimpleConfig(unittest.TestCase):
|
|
|
|
|
|
|
|
def setUp(self):
|
|
|
|
super(Test_SimpleConfig, self).setUp()
|
|
|
|
# make sure "read_user_config" and "user_dir" return a temporary directory.
|
|
|
|
self.electrum_dir = tempfile.mkdtemp()
|
|
|
|
# Do the same for the user dir to avoid overwriting the real configuration
|
|
|
|
# for development machines with electrum installed :)
|
|
|
|
self.user_dir = tempfile.mkdtemp()
|
|
|
|
|
|
|
|
self.options = {"electrum_path": self.electrum_dir}
|
|
|
|
self._saved_stdout = sys.stdout
|
|
|
|
self._stdout_buffer = StringIO()
|
|
|
|
sys.stdout = self._stdout_buffer
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
super(Test_SimpleConfig, self).tearDown()
|
|
|
|
# Remove the temporary directory after each test (to make sure we don't
|
|
|
|
# pollute /tmp for nothing.
|
|
|
|
shutil.rmtree(self.electrum_dir)
|
|
|
|
shutil.rmtree(self.user_dir)
|
|
|
|
|
|
|
|
# Restore the "real" stdout
|
|
|
|
sys.stdout = self._saved_stdout
|
|
|
|
|
|
|
|
def test_simple_config_command_line_overrides_everything(self):
|
|
|
|
"""Options passed by command line override all other configuration
|
|
|
|
sources"""
|
|
|
|
fake_read_system = lambda : {"electrum_path": "a"}
|
|
|
|
fake_read_user = lambda _: {"electrum_path": "b"}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options=self.options,
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
self.assertEqual(self.options.get("electrum_path"),
|
|
|
|
config.get("electrum_path"))
|
|
|
|
|
|
|
|
def test_simple_config_system_config_overrides_user_config(self):
|
|
|
|
"""Options passed in system config override user config."""
|
|
|
|
fake_read_system = lambda : {"electrum_path": self.electrum_dir}
|
|
|
|
fake_read_user = lambda _: {"electrum_path": "b"}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options=None,
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
self.assertEqual(self.options.get("electrum_path"),
|
|
|
|
config.get("electrum_path"))
|
|
|
|
|
2014-06-25 09:04:37 -07:00
|
|
|
def test_simple_config_system_config_ignored_if_portable(self):
|
|
|
|
"""If electrum is started with the "portable" flag, system
|
|
|
|
configuration is completely ignored."""
|
|
|
|
another_path = tempfile.mkdtemp()
|
|
|
|
fake_read_system = lambda : {"electrum_path": self.electrum_dir}
|
|
|
|
fake_read_user = lambda _: {"electrum_path": another_path}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options={"portable": True},
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
self.assertEqual(another_path, config.get("electrum_path"))
|
|
|
|
|
2014-06-25 08:34:51 -07:00
|
|
|
def test_simple_config_user_config_is_used_if_others_arent_specified(self):
|
2014-06-25 09:04:37 -07:00
|
|
|
"""If no system-wide configuration and no command-line options are
|
|
|
|
specified, the user configuration is used instead."""
|
2014-06-25 08:34:51 -07:00
|
|
|
fake_read_system = lambda : {}
|
|
|
|
fake_read_user = lambda _: {"electrum_path": self.electrum_dir}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options=None,
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
self.assertEqual(self.options.get("electrum_path"),
|
|
|
|
config.get("electrum_path"))
|
|
|
|
|
|
|
|
def test_cannot_set_options_passed_by_command_line(self):
|
|
|
|
fake_read_system = lambda : {}
|
|
|
|
fake_read_user = lambda _: {"electrum_path": "b"}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options=self.options,
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
config.set_key("electrum_path", "c")
|
|
|
|
self.assertEqual(self.options.get("electrum_path"),
|
|
|
|
config.get("electrum_path"))
|
|
|
|
|
|
|
|
def test_cannot_set_options_from_system_config(self):
|
|
|
|
fake_read_system = lambda : {"electrum_path": self.electrum_dir}
|
|
|
|
fake_read_user = lambda _: {}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options={},
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
config.set_key("electrum_path", "c")
|
|
|
|
self.assertEqual(self.options.get("electrum_path"),
|
|
|
|
config.get("electrum_path"))
|
|
|
|
|
|
|
|
def test_can_set_options_set_in_user_config(self):
|
|
|
|
another_path = tempfile.mkdtemp()
|
|
|
|
fake_read_system = lambda : {}
|
|
|
|
fake_read_user = lambda _: {"electrum_path": self.electrum_dir}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options={},
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
config.set_key("electrum_path", another_path)
|
|
|
|
self.assertEqual(another_path, config.get("electrum_path"))
|
2014-06-25 09:04:37 -07:00
|
|
|
|
|
|
|
def test_can_set_options_from_system_config_if_portable(self):
|
|
|
|
"""If the "portable" flag is set, the user can overwrite system
|
|
|
|
configuration options."""
|
|
|
|
another_path = tempfile.mkdtemp()
|
|
|
|
fake_read_system = lambda : {"electrum_path": self.electrum_dir}
|
|
|
|
fake_read_user = lambda _: {}
|
|
|
|
read_user_dir = lambda : self.user_dir
|
|
|
|
config = SimpleConfig(options={"portable": True},
|
|
|
|
read_system_config_function=fake_read_system,
|
|
|
|
read_user_config_function=fake_read_user,
|
|
|
|
read_user_dir_function=read_user_dir)
|
|
|
|
config.set_key("electrum_path", another_path)
|
|
|
|
self.assertEqual(another_path, config.get("electrum_path"))
|