add Monero daemon version checking
This commit is contained in:
parent
2aab4fff1b
commit
cbdd9db75e
7 changed files with 54 additions and 8 deletions
|
|
@ -1 +1 @@
|
|||
13.3.dev37
|
||||
13.3.dev38
|
||||
|
|
|
|||
|
|
@ -20,7 +20,7 @@ from ...util import list_gen,die
|
|||
from ...daemon import CoinDaemon,RPCDaemon,_nw,_dd
|
||||
|
||||
class monero_daemon(CoinDaemon):
|
||||
daemon_data = _dd('Monero', 'N/A', 'N/A')
|
||||
daemon_data = _dd('Monero', 18002000, '0.18.2.0-release')
|
||||
networks = ('mainnet','testnet')
|
||||
exec_fn = 'monerod'
|
||||
testnet_dir = 'stagenet'
|
||||
|
|
|
|||
|
|
@ -12,6 +12,8 @@
|
|||
proto.xmr.rpc: Monero base protocol RPC client class
|
||||
"""
|
||||
|
||||
import re
|
||||
from ...globalvars import g
|
||||
from ...rpc import RPCClient,IPPort,auth_data
|
||||
|
||||
class MoneroRPCClient(RPCClient):
|
||||
|
|
@ -29,7 +31,8 @@ class MoneroRPCClient(RPCClient):
|
|||
passwd,
|
||||
test_connection = True,
|
||||
proxy = None,
|
||||
daemon = None ):
|
||||
daemon = None,
|
||||
ignore_daemon_version = False ):
|
||||
|
||||
self.proto = proto
|
||||
|
||||
|
|
@ -54,6 +57,18 @@ class MoneroRPCClient(RPCClient):
|
|||
|
||||
self.daemon = daemon
|
||||
|
||||
if test_connection:
|
||||
# https://github.com/monero-project/monero src/rpc/rpc_version_str.cpp
|
||||
self.daemon_version_str = self.call_raw('getinfo')['version']
|
||||
self.daemon_version = sum(
|
||||
int(m) * (1000 ** n) for n,m in
|
||||
enumerate(reversed(re.match(r'(\d+)\.(\d+)\.(\d+)\.(\d+)',self.daemon_version_str).groups()))
|
||||
)
|
||||
if self.daemon and self.daemon_version > self.daemon.coind_version:
|
||||
self.handle_unsupported_daemon_version(
|
||||
proto.name,
|
||||
ignore_daemon_version or g.ignore_daemon_version )
|
||||
|
||||
def call(self,method,*params,**kwargs):
|
||||
assert params == (), f'{type(self).__name__}.call() accepts keyword arguments only'
|
||||
return self.process_http_resp(self.backend.run_noasync(
|
||||
|
|
|
|||
|
|
@ -32,9 +32,23 @@ class tool_cmd(tool_cmd_base):
|
|||
|
||||
async def daemon_version(self):
|
||||
"print coin daemon version"
|
||||
from ..rpc import rpc_init
|
||||
r = await rpc_init( self.proto, ignore_daemon_version=True )
|
||||
return f'{r.daemon.coind_name} version {r.daemon_version} ({r.daemon_version_str})'
|
||||
from ..daemon import CoinDaemon
|
||||
from ..globalvars import g
|
||||
d = CoinDaemon( proto=self.proto, test_suite=g.test_suite )
|
||||
if self.proto.base_proto == 'Monero':
|
||||
from ..proto.xmr.rpc import MoneroRPCClient
|
||||
r = MoneroRPCClient(
|
||||
proto = self.proto,
|
||||
daemon = d,
|
||||
host = d.host,
|
||||
port = d.rpc_port,
|
||||
user = None,
|
||||
passwd = None,
|
||||
ignore_daemon_version = True )
|
||||
else:
|
||||
from ..rpc import rpc_init
|
||||
r = await rpc_init( self.proto, ignore_daemon_version=True )
|
||||
return f'{d.coind_name} version {r.daemon_version} ({r.daemon_version_str})'
|
||||
|
||||
async def getbalance(self,
|
||||
minconf: 'minimum number of confirmations' = 1,
|
||||
|
|
|
|||
|
|
@ -628,8 +628,11 @@ class MoneroWalletOps:
|
|||
super().__init__(uarg_tuple,uopt_tuple)
|
||||
|
||||
host,port = uopt.daemon.split(':') if uopt.daemon else ('localhost',self.wd.daemon_port)
|
||||
|
||||
from .daemon import CoinDaemon
|
||||
self.dc = MoneroRPCClient(
|
||||
proto = self.proto,
|
||||
daemon = CoinDaemon('xmr'),
|
||||
host = host,
|
||||
port = int(port),
|
||||
user = None,
|
||||
|
|
@ -930,6 +933,7 @@ class MoneroWalletOps:
|
|||
m = re.fullmatch(uarg_info['tx_relay_daemon'].pat,uopt.tx_relay_daemon,re.ASCII)
|
||||
host,port = m[1].split(':')
|
||||
proxy = m[2]
|
||||
md = None
|
||||
else:
|
||||
from .daemon import CoinDaemon
|
||||
md = CoinDaemon('xmr',test_suite=g.test_suite)
|
||||
|
|
@ -938,6 +942,7 @@ class MoneroWalletOps:
|
|||
|
||||
self.dc = MoneroRPCClient(
|
||||
proto = self.proto,
|
||||
daemon = md,
|
||||
host = host,
|
||||
port = int(port),
|
||||
user = None,
|
||||
|
|
|
|||
|
|
@ -46,6 +46,7 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
socks_port = 49237
|
||||
|
||||
cmd_group = (
|
||||
('daemon_version', 'checking daemon version'),
|
||||
('gen_kafiles', 'generating key-address files'),
|
||||
('create_wallets_miner', 'creating Monero wallets (Miner)'),
|
||||
('mine_initial_coins', 'mining initial coins'),
|
||||
|
|
@ -266,6 +267,10 @@ class TestSuiteXMRWallet(TestSuiteBase):
|
|||
|
||||
# cmd_group methods
|
||||
|
||||
def daemon_version(self):
|
||||
rpc_port = self.users['miner'].md.rpc_port
|
||||
return self.spawn( 'mmgen-tool', ['--coin=xmr', f'--rpc-port={rpc_port}', 'daemon_version'] )
|
||||
|
||||
def gen_kafiles(self):
|
||||
for user,data in self.users.items():
|
||||
if not data.kal_range:
|
||||
|
|
|
|||
|
|
@ -44,14 +44,20 @@ def cfg_file_auth_test(proto,d,bad_auth=False):
|
|||
|
||||
def print_daemon_info(rpc):
|
||||
|
||||
msg(f"""
|
||||
if rpc.proto.base_proto == 'Monero':
|
||||
msg(f"""
|
||||
DAEMON VERSION: {rpc.daemon_version} [{rpc.daemon_version_str}]
|
||||
NETWORK: {rpc.proto.coin} {rpc.proto.network.upper()}
|
||||
""".rstrip())
|
||||
else:
|
||||
msg(f"""
|
||||
DAEMON VERSION: {rpc.daemon_version} [{rpc.daemon_version_str}]
|
||||
CAPS: {rpc.caps}
|
||||
NETWORK: {rpc.proto.coin} {rpc.proto.network.upper()}
|
||||
CHAIN: {rpc.chain}
|
||||
BLOCKCOUNT: {rpc.blockcount}
|
||||
CUR_DATE: {rpc.cur_date} [{make_timestr(rpc.cur_date)}]
|
||||
""".rstrip())
|
||||
""".rstrip())
|
||||
|
||||
if rpc.proto.base_proto == 'Bitcoin':
|
||||
def fmt_dict(d):
|
||||
|
|
@ -168,6 +174,7 @@ class unit_tests:
|
|||
passwd = None,
|
||||
daemon = md,
|
||||
)
|
||||
print_daemon_info(rpc)
|
||||
rpc.call_raw('get_height')
|
||||
rpc.call('get_last_block_header')
|
||||
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue