2016-11-30 22:12:14 +01:00
|
|
|
import os
|
2018-07-21 20:12:29 +02:00
|
|
|
import json
|
2018-06-13 20:04:14 +02:00
|
|
|
import sys
|
2018-05-21 18:50:25 +02:00
|
|
|
import tempfile
|
2018-06-13 20:04:14 +02:00
|
|
|
from unittest import skipIf
|
2016-11-30 22:12:14 +01:00
|
|
|
from twisted.trial import unittest
|
|
|
|
from lbrynet import conf
|
2017-07-20 00:15:07 +02:00
|
|
|
from lbrynet.core.Error import InvalidCurrencyError
|
2016-11-30 22:12:14 +01:00
|
|
|
|
2018-06-13 20:04:14 +02:00
|
|
|
|
2016-11-30 22:12:14 +01:00
|
|
|
class SettingsTest(unittest.TestCase):
|
|
|
|
def setUp(self):
|
|
|
|
os.environ['LBRY_TEST'] = 'test_string'
|
|
|
|
|
|
|
|
def tearDown(self):
|
|
|
|
del os.environ['LBRY_TEST']
|
|
|
|
|
2017-01-17 04:23:20 +01:00
|
|
|
@staticmethod
|
|
|
|
def get_mock_config_instance():
|
2017-01-17 18:29:09 +01:00
|
|
|
settings = {'test': (str, '')}
|
|
|
|
env = conf.Env(**settings)
|
|
|
|
return conf.Config({}, settings, environment=env)
|
2016-11-30 22:12:14 +01:00
|
|
|
|
2017-01-17 04:23:20 +01:00
|
|
|
def test_envvar_is_read(self):
|
|
|
|
settings = self.get_mock_config_instance()
|
|
|
|
self.assertEqual('test_string', settings['test'])
|
|
|
|
|
|
|
|
def test_setting_can_be_overridden(self):
|
|
|
|
settings = self.get_mock_config_instance()
|
|
|
|
settings['test'] = 'my_override'
|
|
|
|
self.assertEqual('my_override', settings['test'])
|
2016-11-30 22:12:14 +01:00
|
|
|
|
|
|
|
def test_setting_can_be_updated(self):
|
2017-01-17 04:23:20 +01:00
|
|
|
settings = self.get_mock_config_instance()
|
2016-11-30 22:12:14 +01:00
|
|
|
settings.update({'test': 'my_update'})
|
2017-01-17 04:23:20 +01:00
|
|
|
self.assertEqual('my_update', settings['test'])
|
2016-11-30 22:12:14 +01:00
|
|
|
|
|
|
|
def test_setting_is_in_dict(self):
|
2017-01-17 04:23:20 +01:00
|
|
|
settings = self.get_mock_config_instance()
|
|
|
|
setting_dict = settings.get_current_settings_dict()
|
2016-11-30 22:12:14 +01:00
|
|
|
self.assertEqual({'test': 'test_string'}, setting_dict)
|
2017-01-17 18:29:09 +01:00
|
|
|
|
|
|
|
def test_invalid_setting_raises_exception(self):
|
|
|
|
settings = self.get_mock_config_instance()
|
2017-10-11 08:59:30 +02:00
|
|
|
self.assertRaises(KeyError, settings.set, 'invalid_name', 123)
|
2017-01-17 18:29:09 +01:00
|
|
|
|
|
|
|
def test_invalid_data_type_raises_exception(self):
|
|
|
|
settings = self.get_mock_config_instance()
|
|
|
|
self.assertIsNone(settings.set('test', 123))
|
2017-10-11 08:59:30 +02:00
|
|
|
self.assertRaises(KeyError, settings.set, 'test', 123, ('fake_data_type',))
|
2017-01-17 18:29:09 +01:00
|
|
|
|
|
|
|
def test_setting_precedence(self):
|
|
|
|
settings = self.get_mock_config_instance()
|
|
|
|
settings.set('test', 'cli_test_string', data_types=(conf.TYPE_CLI,))
|
|
|
|
self.assertEqual('cli_test_string', settings['test'])
|
|
|
|
settings.set('test', 'this_should_not_take_precedence', data_types=(conf.TYPE_ENV,))
|
|
|
|
self.assertEqual('cli_test_string', settings['test'])
|
|
|
|
settings.set('test', 'runtime_takes_precedence', data_types=(conf.TYPE_RUNTIME,))
|
|
|
|
self.assertEqual('runtime_takes_precedence', settings['test'])
|
2017-06-30 18:39:53 +02:00
|
|
|
|
2017-07-20 00:15:07 +02:00
|
|
|
def test_max_key_fee_set(self):
|
|
|
|
fixed_default = {'CURRENCIES':{'BTC':{'type':'crypto'}}}
|
|
|
|
adjustable_settings = {'max_key_fee': (json.loads, {'currency':'USD', 'amount':1})}
|
|
|
|
env = conf.Env(**adjustable_settings)
|
|
|
|
settings = conf.Config(fixed_default, adjustable_settings, environment=env)
|
|
|
|
|
|
|
|
with self.assertRaises(InvalidCurrencyError):
|
|
|
|
settings.set('max_key_fee', {'currency':'USD', 'amount':1})
|
|
|
|
|
2017-09-29 12:44:22 +02:00
|
|
|
valid_setting = {'currency':'BTC', 'amount':1}
|
|
|
|
settings.set('max_key_fee', valid_setting)
|
2017-07-20 00:15:07 +02:00
|
|
|
out = settings.get('max_key_fee')
|
|
|
|
self.assertEqual(out, valid_setting)
|
|
|
|
|
|
|
|
|
2017-06-30 18:39:53 +02:00
|
|
|
def test_data_dir(self):
|
|
|
|
# check if these directories are returned as string and not unicode
|
|
|
|
# otherwise there will be problems when calling os.path.join on
|
|
|
|
# unicode directory names with string file names
|
2017-07-05 23:39:35 +02:00
|
|
|
self.assertEqual(str, type(conf.default_download_dir))
|
2017-06-30 18:39:53 +02:00
|
|
|
self.assertEqual(str, type(conf.default_data_dir))
|
|
|
|
self.assertEqual(str, type(conf.default_lbryum_dir))
|
2018-05-18 02:54:40 +02:00
|
|
|
|
2018-06-13 20:04:14 +02:00
|
|
|
@skipIf('win' in sys.platform, 'fix me!')
|
2018-05-21 18:50:25 +02:00
|
|
|
def test_load_save_config_file(self):
|
|
|
|
# setup settings
|
2018-05-19 02:42:45 +02:00
|
|
|
adjustable_settings = {'data_dir': (str, conf.default_data_dir),
|
2018-06-12 00:10:23 +02:00
|
|
|
'lbryum_servers': (list, [])}
|
2018-05-19 01:32:51 +02:00
|
|
|
env = conf.Env(**adjustable_settings)
|
|
|
|
settings = conf.Config({}, adjustable_settings, environment=env)
|
|
|
|
conf.settings = settings
|
2018-05-21 18:50:25 +02:00
|
|
|
# setup tempfile
|
|
|
|
conf_entry = "lbryum_servers: ['localhost:50001', 'localhost:50002']\n"
|
|
|
|
with tempfile.NamedTemporaryFile(suffix='.yml') as conf_file:
|
|
|
|
conf_file.write(conf_entry)
|
|
|
|
conf_file.seek(0)
|
|
|
|
conf.conf_file = conf_file.name
|
|
|
|
# load and save settings from conf file
|
2018-05-19 02:42:45 +02:00
|
|
|
settings.load_conf_file_settings()
|
2018-05-21 18:50:25 +02:00
|
|
|
settings.save_conf_file_settings()
|
|
|
|
# test if overwritten entry equals original entry
|
|
|
|
# use decoded versions, because format might change without
|
|
|
|
# changing the interpretation
|
|
|
|
decoder = conf.settings_decoders['.yml']
|
|
|
|
conf_decoded = decoder(conf_entry)
|
|
|
|
conf_entry_new = conf_file.read()
|
|
|
|
conf_decoded_new = decoder(conf_entry_new)
|
|
|
|
self.assertEqual(conf_decoded, conf_decoded_new)
|
2018-05-19 02:42:45 +02:00
|
|
|
|