feat(apps): package DATUM with stable service discovery

This commit is contained in:
yaya
2026-10-06 06:42:01 +01:00
parent cedfbb2b07
commit 2a2a4552f7
11 changed files with 304 additions and 0 deletions
+47
View File
@@ -0,0 +1,47 @@
"""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()