|
@ -19,16 +19,19 @@ base_environ = { |
|
|
'COIN': 'BitcoinCash', |
|
|
'COIN': 'BitcoinCash', |
|
|
} |
|
|
} |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def setup_base_env(): |
|
|
def setup_base_env(): |
|
|
os.environ.clear() |
|
|
os.environ.clear() |
|
|
os.environ.update(base_environ) |
|
|
os.environ.update(base_environ) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assert_required(env_var): |
|
|
def assert_required(env_var): |
|
|
setup_base_env() |
|
|
setup_base_env() |
|
|
os.environ.pop(env_var, None) |
|
|
os.environ.pop(env_var, None) |
|
|
with pytest.raises(Env.Error): |
|
|
with pytest.raises(Env.Error): |
|
|
Env() |
|
|
Env() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assert_default(env_var, attr, default): |
|
|
def assert_default(env_var, attr, default): |
|
|
setup_base_env() |
|
|
setup_base_env() |
|
|
e = Env() |
|
|
e = Env() |
|
@ -37,6 +40,7 @@ def assert_default(env_var, attr, default): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert getattr(e, attr) == 'foo' |
|
|
assert getattr(e, attr) == 'foo' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assert_integer(env_var, attr, default=''): |
|
|
def assert_integer(env_var, attr, default=''): |
|
|
if default != '': |
|
|
if default != '': |
|
|
e = Env() |
|
|
e = Env() |
|
@ -49,6 +53,7 @@ def assert_integer(env_var, attr, default=''): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert getattr(e, attr) == value |
|
|
assert getattr(e, attr) == value |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def assert_boolean(env_var, attr, default): |
|
|
def assert_boolean(env_var, attr, default): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert getattr(e, attr) == default |
|
|
assert getattr(e, attr) == default |
|
@ -59,22 +64,26 @@ def assert_boolean(env_var, attr, default): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert getattr(e, attr) == False |
|
|
assert getattr(e, attr) == False |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_minimal(): |
|
|
def test_minimal(): |
|
|
setup_base_env() |
|
|
setup_base_env() |
|
|
Env() |
|
|
Env() |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_DB_DIRECTORY(): |
|
|
def test_DB_DIRECTORY(): |
|
|
assert_required('DB_DIRECTORY') |
|
|
assert_required('DB_DIRECTORY') |
|
|
setup_base_env() |
|
|
setup_base_env() |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.db_dir == BASE_DB_DIR |
|
|
assert e.db_dir == BASE_DB_DIR |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_DAEMON_URL(): |
|
|
def test_DAEMON_URL(): |
|
|
assert_required('DAEMON_URL') |
|
|
assert_required('DAEMON_URL') |
|
|
setup_base_env() |
|
|
setup_base_env() |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.daemon_url == BASE_DAEMON_URL |
|
|
assert e.daemon_url == BASE_DAEMON_URL |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_COIN_NET(): |
|
|
def test_COIN_NET(): |
|
|
'''Test COIN and NET defaults and redirection.''' |
|
|
'''Test COIN and NET defaults and redirection.''' |
|
|
setup_base_env() |
|
|
setup_base_env() |
|
@ -103,10 +112,19 @@ def test_COIN_NET(): |
|
|
os.environ['NET'] = 'regtest' |
|
|
os.environ['NET'] = 'regtest' |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.coin == lib_coins.BitcoinGoldRegtest |
|
|
assert e.coin == lib_coins.BitcoinGoldRegtest |
|
|
|
|
|
os.environ.pop('NET') |
|
|
|
|
|
os.environ['COIN'] = ' BitcoinGreen ' |
|
|
|
|
|
e = Env() |
|
|
|
|
|
assert e.coin == lib_coins.Bitg |
|
|
|
|
|
os.environ['NET'] = 'mainnet' |
|
|
|
|
|
e = Env() |
|
|
|
|
|
os.environ.pop('NET') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_CACHE_MB(): |
|
|
def test_CACHE_MB(): |
|
|
assert_integer('CACHE_MB', 'cache_MB', 1200) |
|
|
assert_integer('CACHE_MB', 'cache_MB', 1200) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_HOST(): |
|
|
def test_HOST(): |
|
|
assert_default('HOST', 'host', 'localhost') |
|
|
assert_default('HOST', 'host', 'localhost') |
|
|
os.environ['HOST'] = '' |
|
|
os.environ['HOST'] = '' |
|
@ -119,6 +137,7 @@ def test_HOST(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.cs_host(for_rpc=False) == ['192.168.0.1', '23.45.67.89'] |
|
|
assert e.cs_host(for_rpc=False) == ['192.168.0.1', '23.45.67.89'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_RPC_HOST(): |
|
|
def test_RPC_HOST(): |
|
|
assert_default('RPC_HOST', 'rpc_host', 'localhost') |
|
|
assert_default('RPC_HOST', 'rpc_host', 'localhost') |
|
|
os.environ['RPC_HOST'] = '' |
|
|
os.environ['RPC_HOST'] = '' |
|
@ -129,13 +148,16 @@ def test_RPC_HOST(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.cs_host(for_rpc=True) == ['127.0.0.1', '::1'] |
|
|
assert e.cs_host(for_rpc=True) == ['127.0.0.1', '::1'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_REORG_LIMIT(): |
|
|
def test_REORG_LIMIT(): |
|
|
assert_integer('REORG_LIMIT', 'reorg_limit', |
|
|
assert_integer('REORG_LIMIT', 'reorg_limit', |
|
|
lib_coins.BitcoinCash.REORG_LIMIT) |
|
|
lib_coins.BitcoinCash.REORG_LIMIT) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_TCP_PORT(): |
|
|
def test_TCP_PORT(): |
|
|
assert_integer('TCP_PORT', 'tcp_port', None) |
|
|
assert_integer('TCP_PORT', 'tcp_port', None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_SSL_PORT(): |
|
|
def test_SSL_PORT(): |
|
|
# Requires both SSL_CERTFILE and SSL_KEYFILE to be set |
|
|
# Requires both SSL_CERTFILE and SSL_KEYFILE to be set |
|
|
os.environ['SSL_PORT'] = '50002' |
|
|
os.environ['SSL_PORT'] = '50002' |
|
@ -151,27 +173,35 @@ def test_SSL_PORT(): |
|
|
os.environ.pop('SSL_PORT') |
|
|
os.environ.pop('SSL_PORT') |
|
|
assert_integer('SSL_PORT', 'ssl_port', None) |
|
|
assert_integer('SSL_PORT', 'ssl_port', None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_RPC_PORT(): |
|
|
def test_RPC_PORT(): |
|
|
assert_integer('RPC_PORT', 'rpc_port', 8000) |
|
|
assert_integer('RPC_PORT', 'rpc_port', 8000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_MAX_SUBSCRIPTIONS(): |
|
|
def test_MAX_SUBSCRIPTIONS(): |
|
|
assert_integer('MAX_SUBSCRIPTIONS', 'max_subscriptions', 10000) |
|
|
assert_integer('MAX_SUBSCRIPTIONS', 'max_subscriptions', 10000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_LOG_SESSIONS(): |
|
|
def test_LOG_SESSIONS(): |
|
|
assert_integer('LOG_SESSIONS', 'log_sessions', 3600) |
|
|
assert_integer('LOG_SESSIONS', 'log_sessions', 3600) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_DONATION_ADDRESS(): |
|
|
def test_DONATION_ADDRESS(): |
|
|
assert_default('DONATION_ADDRESS', 'donation_address', '') |
|
|
assert_default('DONATION_ADDRESS', 'donation_address', '') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_DB_ENGINE(): |
|
|
def test_DB_ENGINE(): |
|
|
assert_default('DB_ENGINE', 'db_engine', 'leveldb') |
|
|
assert_default('DB_ENGINE', 'db_engine', 'leveldb') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_MAX_SEND(): |
|
|
def test_MAX_SEND(): |
|
|
assert_integer('MAX_SEND', 'max_send', 1000000) |
|
|
assert_integer('MAX_SEND', 'max_send', 1000000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_MAX_SUBS(): |
|
|
def test_MAX_SUBS(): |
|
|
assert_integer('MAX_SUBS', 'max_subs', 250000) |
|
|
assert_integer('MAX_SUBS', 'max_subs', 250000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_MAX_SESSIONS(): |
|
|
def test_MAX_SESSIONS(): |
|
|
too_big = 1000000 |
|
|
too_big = 1000000 |
|
|
os.environ['MAX_SESSIONS'] = str(too_big) |
|
|
os.environ['MAX_SESSIONS'] = str(too_big) |
|
@ -179,15 +209,19 @@ def test_MAX_SESSIONS(): |
|
|
assert e.max_sessions < too_big |
|
|
assert e.max_sessions < too_big |
|
|
# Cannot test default as it may be lowered by the open file limit cap |
|
|
# Cannot test default as it may be lowered by the open file limit cap |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_MAX_SESSION_SUBS(): |
|
|
def test_MAX_SESSION_SUBS(): |
|
|
assert_integer('MAX_SESSION_SUBS', 'max_session_subs', 50000) |
|
|
assert_integer('MAX_SESSION_SUBS', 'max_session_subs', 50000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_BANDWIDTH_LIMIT(): |
|
|
def test_BANDWIDTH_LIMIT(): |
|
|
assert_integer('BANDWIDTH_LIMIT', 'bandwidth_limit', 2000000) |
|
|
assert_integer('BANDWIDTH_LIMIT', 'bandwidth_limit', 2000000) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_SESSION_TIMEOUT(): |
|
|
def test_SESSION_TIMEOUT(): |
|
|
assert_integer('SESSION_TIMEOUT', 'session_timeout', 600) |
|
|
assert_integer('SESSION_TIMEOUT', 'session_timeout', 600) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_BANNER_FILE(): |
|
|
def test_BANNER_FILE(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.banner_file is None |
|
|
assert e.banner_file is None |
|
@ -201,6 +235,7 @@ def test_BANNER_FILE(): |
|
|
assert e.banner_file == 'banner_file' |
|
|
assert e.banner_file == 'banner_file' |
|
|
assert e.tor_banner_file == 'tor_banner_file' |
|
|
assert e.tor_banner_file == 'tor_banner_file' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_EVENT_LOOP_POLICY(): |
|
|
def test_EVENT_LOOP_POLICY(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.loop_policy is None |
|
|
assert e.loop_policy is None |
|
@ -214,9 +249,11 @@ def test_EVENT_LOOP_POLICY(): |
|
|
pass |
|
|
pass |
|
|
del os.environ['EVENT_LOOP_POLICY'] |
|
|
del os.environ['EVENT_LOOP_POLICY'] |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_ANON_LOGS(): |
|
|
def test_ANON_LOGS(): |
|
|
assert_boolean('ANON_LOGS', 'anon_logs', False) |
|
|
assert_boolean('ANON_LOGS', 'anon_logs', False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_PEER_DISCOVERY(): |
|
|
def test_PEER_DISCOVERY(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.peer_discovery == Env.PD_ON |
|
|
assert e.peer_discovery == Env.PD_ON |
|
@ -230,18 +267,23 @@ def test_PEER_DISCOVERY(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.peer_discovery == Env.PD_SELF |
|
|
assert e.peer_discovery == Env.PD_SELF |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_PEER_ANNOUNCE(): |
|
|
def test_PEER_ANNOUNCE(): |
|
|
assert_boolean('PEER_ANNOUNCE', 'peer_announce', True) |
|
|
assert_boolean('PEER_ANNOUNCE', 'peer_announce', True) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_FORCE_PROXY(): |
|
|
def test_FORCE_PROXY(): |
|
|
assert_boolean('FORCE_PROXY', 'force_proxy', False) |
|
|
assert_boolean('FORCE_PROXY', 'force_proxy', False) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_TOR_PROXY_HOST(): |
|
|
def test_TOR_PROXY_HOST(): |
|
|
assert_default('TOR_PROXY_HOST', 'tor_proxy_host', 'localhost') |
|
|
assert_default('TOR_PROXY_HOST', 'tor_proxy_host', 'localhost') |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_TOR_PROXY_PORT(): |
|
|
def test_TOR_PROXY_PORT(): |
|
|
assert_integer('TOR_PROXY_PORT', 'tor_proxy_port', None) |
|
|
assert_integer('TOR_PROXY_PORT', 'tor_proxy_port', None) |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_clearnet_identity(): |
|
|
def test_clearnet_identity(): |
|
|
os.environ['REPORT_TCP_PORT'] = '456' |
|
|
os.environ['REPORT_TCP_PORT'] = '456' |
|
|
e = Env() |
|
|
e = Env() |
|
@ -296,6 +338,7 @@ def test_clearnet_identity(): |
|
|
assert ident.ssl_port == 457 |
|
|
assert ident.ssl_port == 457 |
|
|
assert ident.nick_suffix == '' |
|
|
assert ident.nick_suffix == '' |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_tor_identity(): |
|
|
def test_tor_identity(): |
|
|
tor_host = 'something.onion' |
|
|
tor_host = 'something.onion' |
|
|
os.environ.pop('REPORT_HOST', None) |
|
|
os.environ.pop('REPORT_HOST', None) |
|
@ -342,6 +385,7 @@ def test_tor_identity(): |
|
|
assert ident.tcp_port == 234 |
|
|
assert ident.tcp_port == 234 |
|
|
assert ident.ssl_port == 432 |
|
|
assert ident.ssl_port == 432 |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_ban_versions(): |
|
|
def test_ban_versions(): |
|
|
e = Env() |
|
|
e = Env() |
|
|
assert e.drop_client is None |
|
|
assert e.drop_client is None |
|
@ -352,6 +396,7 @@ def test_ban_versions(): |
|
|
assert e.drop_client.match("1.2.3_buggy_client") |
|
|
assert e.drop_client.match("1.2.3_buggy_client") |
|
|
assert e.drop_client.match("1.3.0_good_client") is None |
|
|
assert e.drop_client.match("1.3.0_good_client") is None |
|
|
|
|
|
|
|
|
|
|
|
|
|
|
def test_coin_class_provided(): |
|
|
def test_coin_class_provided(): |
|
|
e = Env(lib_coins.BitcoinCash) |
|
|
e = Env(lib_coins.BitcoinCash) |
|
|
assert e.coin == lib_coins.BitcoinCash |
|
|
assert e.coin == lib_coins.BitcoinCash |