Files
archy/docker/datum/tests/test_config.py
T

48 lines
2.0 KiB
Python
Raw Normal View History

"""Config upgrades must preserve payout policy and reject broken input."""
import json
import os
from pathlib import Path
import subprocess
import unittest
FILTER = Path(__file__).resolve().parents[1] / 'configure.jq'
def configure(value, host='bitcoin-core', password='new-rpc'):
return subprocess.run(['jq', '-e', '-f', str(FILTER)], input=json.dumps(value),
text=True, capture_output=True,
env={**os.environ, 'BITCOIN_RPC_HOST': host,
'BITCOIN_RPC_PASSWORD': password,
'DATUM_ADMIN_PASSWORD': 'test-admin'})
class ConfigTests(unittest.TestCase):
def test_first_run_has_no_borrowed_payout_address(self):
result = configure({})
self.assertEqual(result.returncode, 0, result.stderr)
data = json.loads(result.stdout)
self.assertEqual(data['mining']['pool_address'], '')
self.assertTrue(data['datum']['pooled_mining_only'])
self.assertTrue(data['api']['modify_conf'])
def test_restart_preserves_payout_and_explicit_false_settings(self):
original = {'mining': {'pool_address': 'operator-address'},
'datum': {'pool_pass_workers': False, 'pool_pass_full_users': False,
'pooled_mining_only': False},
'bitcoind': {'rpcurl': 'http://old-ip:8332', 'rpcpassword': 'old'}}
result = configure(original, password='quotes"and\\slashes')
self.assertEqual(result.returncode, 0, result.stderr)
data = json.loads(result.stdout)
self.assertEqual(data['mining']['pool_address'], 'operator-address')
self.assertEqual(data['datum'], original['datum'])
self.assertEqual(data['bitcoind']['rpcurl'], 'http://bitcoin-core:8332')
self.assertEqual(data['bitcoind']['rpcpassword'], 'quotes"and\\slashes')
def test_invalid_root_is_rejected(self):
for value in [None, [], 'broken', 1]:
self.assertNotEqual(configure(value).returncode, 0)
if __name__ == '__main__':
unittest.main()