aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authormoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-05-24 21:56:04 +0000
committermoneromooo-monero <moneromooo-monero@users.noreply.github.com>2019-09-17 11:38:30 +0000
commite037ecb014858054670ef2b0992ba7a934c84e15 (patch)
tree6309fd812859884258ec82ef08703acea096ddc3
parentfunctional_tests: add get_transaction_pool_stats (diff)
downloadmonero-e037ecb014858054670ef2b0992ba7a934c84e15.tar.xz
functional_tests: check for RPC methods which aren't exposed
-rw-r--r--tests/functional_tests/CMakeLists.txt4
-rw-r--r--tests/functional_tests/check_missing_rpc_methods.py50
-rw-r--r--utils/python-rpc/framework/daemon.py138
-rw-r--r--utils/python-rpc/framework/wallet.py4
4 files changed, 196 insertions, 0 deletions
diff --git a/tests/functional_tests/CMakeLists.txt b/tests/functional_tests/CMakeLists.txt
index fd49ba623..bc55da9e3 100644
--- a/tests/functional_tests/CMakeLists.txt
+++ b/tests/functional_tests/CMakeLists.txt
@@ -59,3 +59,7 @@ else()
message(WARNING "functional_tests_rpc skipped, needs the 'requests' python module")
set(CTEST_CUSTOM_TESTS_IGNORE ${CTEST_CUSTOM_TESTS_IGNORE} functional_tests_rpc)
endif()
+
+add_test(
+ NAME check_missing_rpc_methods
+ COMMAND ${PYTHON_EXECUTABLE} "${CMAKE_CURRENT_SOURCE_DIR}/check_missing_rpc_methods.py" "${CMAKE_SOURCE_DIR}")
diff --git a/tests/functional_tests/check_missing_rpc_methods.py b/tests/functional_tests/check_missing_rpc_methods.py
new file mode 100644
index 000000000..6fadebf9b
--- /dev/null
+++ b/tests/functional_tests/check_missing_rpc_methods.py
@@ -0,0 +1,50 @@
+#!/usr/bin/env python
+
+from __future__ import print_function
+import sys
+import re
+
+USAGE = 'usage: check_untested_methods.py <rootdir>'
+try:
+ rootdir = sys.argv[1]
+except:
+ print(USAGE)
+ sys.exit(1)
+
+sys.path.insert(0, rootdir + '/utils/python-rpc')
+
+from framework import daemon
+from framework import wallet
+
+modules = [
+ {
+ 'name': 'daemon',
+ 'object': daemon.Daemon(),
+ 'path': rootdir + '/src/rpc/core_rpc_server.h',
+ 'ignore': []
+ },
+ {
+ 'name': 'wallet',
+ 'object': wallet.Wallet(),
+ 'path': rootdir + '/src/wallet/wallet_rpc_server.h',
+ 'ignore': []
+ }
+]
+
+error = False
+for module in modules:
+ for line in open(module['path']).readlines():
+ if 'MAP_URI_AUTO_JON2' in line or 'MAP_JON_RPC' in line:
+ match = re.search('.*\"(.*)\".*', line)
+ name = match.group(1)
+ if name in module['ignore'] or name.endswith('.bin'):
+ continue
+ if 'MAP_URI_AUTO_JON2' in line:
+ if not name.startswith('/'):
+ print('Error: %s does not start with /' % name)
+ error = True
+ name = name[1:]
+ if not hasattr(module['object'], name):
+ print('Error: %s API method %s does not have a matching function' % (module['name'], name))
+
+sys.exit(1 if error else 0)
diff --git a/utils/python-rpc/framework/daemon.py b/utils/python-rpc/framework/daemon.py
index 89b13b951..1d6c57c56 100644
--- a/utils/python-rpc/framework/daemon.py
+++ b/utils/python-rpc/framework/daemon.py
@@ -49,6 +49,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(getblocktemplate)
+ get_block_template = getblocktemplate
def send_raw_transaction(self, tx_as_hex, do_not_relay = False, do_sanity_checks = True):
send_raw_transaction = {
@@ -57,6 +58,7 @@ class Daemon(object):
'do_sanity_checks': do_sanity_checks,
}
return self.rpc.send_request("/send_raw_transaction", send_raw_transaction)
+ sendrawtransaction = send_raw_transaction
def submitblock(self, block):
submitblock = {
@@ -66,6 +68,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(submitblock)
+ submit_block = submitblock
def getblock(self, hash = '', height = 0, fill_pow_hash = False):
getblock = {
@@ -79,6 +82,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(getblock)
+ get_block = getblock
def getlastblockheader(self):
getlastblockheader = {
@@ -89,6 +93,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(getlastblockheader)
+ get_last_block_header = getlastblockheader
def getblockheaderbyhash(self, hash = "", hashes = []):
getblockheaderbyhash = {
@@ -101,6 +106,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(getblockheaderbyhash)
+ get_block_header_by_hash = getblockheaderbyhash
def getblockheaderbyheight(self, height):
getblockheaderbyheight = {
@@ -112,6 +118,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(getblockheaderbyheight)
+ get_block_header_by_height = getblockheaderbyheight
def getblockheadersrange(self, start_height, end_height, fill_pow_hash = False):
getblockheadersrange = {
@@ -125,6 +132,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(getblockheadersrange)
+ get_block_headers_range = getblockheadersrange
def get_connections(self):
get_connections = {
@@ -141,6 +149,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(get_info)
+ getinfo = get_info
def hard_fork_info(self):
hard_fork_info = {
@@ -172,6 +181,7 @@ class Daemon(object):
'id': '0'
}
return self.rpc.send_request("/get_height", get_height)
+ getheight = get_height
def pop_blocks(self, nblocks = 1):
pop_blocks = {
@@ -261,6 +271,7 @@ class Daemon(object):
'split': split,
}
return self.rpc.send_request('/get_transactions', get_transactions)
+ gettransactions = get_transactions
def get_outs(self, outputs = [], get_txid = False):
get_outs = {
@@ -360,3 +371,130 @@ class Daemon(object):
save_bc = {
}
return self.rpc.send_request('/save_bc', save_bc)
+
+ def get_peer_list(self):
+ get_peer_list = {
+ }
+ return self.rpc.send_request('/get_peer_list', get_peer_list)
+
+ def set_log_hash_rate(self, visible):
+ set_log_hash_rate = {
+ 'visible': visible,
+ }
+ return self.rpc.send_request('/set_log_hash_rate', set_log_hash_rate)
+
+ def stop_daemon(self):
+ stop_daemon = {
+ }
+ return self.rpc.send_request('/stop_daemon', stop_daemon)
+
+ def get_net_stats(self):
+ get_net_stats = {
+ }
+ return self.rpc.send_request('/get_net_stats', get_net_stats)
+
+ def get_limit(self):
+ get_limit = {
+ }
+ return self.rpc.send_request('/get_limit', get_limit)
+
+ def set_limit(self, limit_down, limit_up):
+ set_limit = {
+ 'limit_down': limit_down,
+ 'limit_up': limit_up,
+ }
+ return self.rpc.send_request('/set_limit', set_limit)
+
+ def out_peers(self, out_peers):
+ out_peers = {
+ 'out_peers': out_peers,
+ }
+ return self.rpc.send_request('/out_peers', out_peers)
+
+ def in_peers(self, in_peers):
+ in_peers = {
+ 'in_peers': in_peers,
+ }
+ return self.rpc.send_request('/in_peers', in_peers)
+
+ def update(self, command, path = None):
+ update = {
+ 'command': command,
+ 'path': path,
+ }
+ return self.rpc.send_request('/update', update)
+
+ def get_block_count(self):
+ get_block_count = {
+ 'method': 'get_block_count',
+ 'params': {
+ },
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(get_block_count)
+ getblockcount = get_block_count
+
+ def get_block_hash(self, height):
+ get_block_hash = {
+ 'method': 'get_block_hash',
+ 'params': [height],
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(get_block_hash)
+ on_get_block_hash = get_block_hash
+ on_getblockhash = get_block_hash
+
+ def relay_tx(self, txids = []):
+ relay_tx = {
+ 'method': 'relay_tx',
+ 'params': {
+ 'txids': txids,
+ },
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(relay_tx)
+
+ def sync_info(self):
+ sync_info = {
+ 'method': 'sync_info',
+ 'params': {
+ },
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(sync_info)
+
+ def get_txpool_backlog(self):
+ get_txpool_backlog = {
+ 'method': 'get_txpool_backlog',
+ 'params': {
+ },
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(get_txpool_backlog)
+
+ def prune_blockchain(self, check = False):
+ prune_blockchain = {
+ 'method': 'prune_blockchain',
+ 'params': {
+ 'check': check,
+ },
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(prune_blockchain)
+
+ def get_block_rate(self, seconds = [3600]):
+ get_block_rate = {
+ 'method': 'get_block_rate',
+ 'params': {
+ 'seconds': seconds,
+ },
+ 'jsonrpc': '2.0',
+ 'id': '0'
+ }
+ return self.rpc.send_json_rpc_request(get_block_rate)
diff --git a/utils/python-rpc/framework/wallet.py b/utils/python-rpc/framework/wallet.py
index afc335f9b..6a3fabdc9 100644
--- a/utils/python-rpc/framework/wallet.py
+++ b/utils/python-rpc/framework/wallet.py
@@ -152,6 +152,7 @@ class Wallet(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(get_balance)
+ getbalance = get_balance
def sweep_dust(self, get_tx_keys = True, do_not_relay = False, get_tx_hex = False, get_tx_metadata = False):
sweep_dust = {
@@ -166,6 +167,7 @@ class Wallet(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(sweep_dust)
+ sweep_unmixable = sweep_dust
def sweep_all(self, address = '', account_index = 0, subaddr_indices = [], priority = 0, ring_size = 0, outputs = 1, unlock_time = 0, payment_id = '', get_tx_keys = False, below_amount = 0, do_not_relay = False, get_tx_hex = False, get_tx_metadata = False):
sweep_all = {
@@ -222,6 +224,7 @@ class Wallet(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(get_address)
+ getaddress = get_address
def create_account(self, label = ""):
create_account = {
@@ -733,6 +736,7 @@ class Wallet(object):
'id': '0'
}
return self.rpc.send_json_rpc_request(get_height)
+ getheight = get_height
def relay_tx(self, hex_):
relay_tx = {