Skip to content

Commit 8a385d8

Browse files
committed
test: check pre-fork conditions for ProRegTx and ProUpServTx preparation
1 parent 83ebb2a commit 8a385d8

File tree

1 file changed

+54
-9
lines changed

1 file changed

+54
-9
lines changed

test/functional/rpc_netinfo.py

Lines changed: 54 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,7 +5,8 @@
55
"""Test network information fields across RPCs."""
66

77
from test_framework.util import (
8-
assert_equal
8+
assert_equal,
9+
assert_raises_rpc_error
910
)
1011
from test_framework.script import (
1112
hash160
@@ -95,19 +96,31 @@ def is_mn_visible(self, _protx_hash = None) -> bool:
9596
mn_visible = True
9697
return mn_visible
9798

98-
def register_mn(self, test: BitcoinTestFramework, submit: bool, addrs_core_p2p, addrs_platform_p2p = None, addrs_platform_http = None) -> str:
99+
def register_mn(self, test: BitcoinTestFramework, submit: bool, addrs_core_p2p, addrs_platform_p2p = None, addrs_platform_http = None, code = None, msg = None) -> str:
100+
assert((code and msg) or (not code and not msg))
99101
protx_output: str = ""
100102
if self.is_evo:
101103
assert(addrs_platform_http and addrs_platform_p2p)
102104
self.platform_nodeid = hash160(b'%d' % randint(1, 65535)).hex()
103-
protx_output = self.node.protx(
104-
"register_evo", self.collateral_txid, self.collateral_vout, addrs_core_p2p, self.address_owner, self.operator_pk,
105-
self.address_voting, 0, self.address_reward, self.platform_nodeid, addrs_platform_p2p, addrs_platform_http,
106-
self.address_funds, submit)
105+
if code and msg:
106+
assert_raises_rpc_error(
107+
code, msg, self.node.protx, "register_evo", self.collateral_txid, self.collateral_vout, addrs_core_p2p, self.address_owner, self.operator_pk,
108+
self.address_voting, 0, self.address_reward, self.platform_nodeid, addrs_platform_p2p, addrs_platform_http, self.address_funds, submit)
109+
return ""
110+
else:
111+
protx_output = self.node.protx(
112+
"register_evo", self.collateral_txid, self.collateral_vout, addrs_core_p2p, self.address_owner, self.operator_pk,
113+
self.address_voting, 0, self.address_reward, self.platform_nodeid, addrs_platform_p2p, addrs_platform_http, self.address_funds, submit)
107114
else:
108-
protx_output = self.node.protx(
109-
"register", self.collateral_txid, self.collateral_vout, addrs_core_p2p, self.address_owner, self.operator_pk,
110-
self.address_voting, 0, self.address_reward, self.address_funds, submit)
115+
if code and msg:
116+
assert_raises_rpc_error(
117+
code, msg, self.node.protx, "register", self.collateral_txid, self.collateral_vout, addrs_core_p2p, self.address_owner, self.operator_pk,
118+
self.address_voting, 0, self.address_reward, self.address_funds, submit)
119+
return ""
120+
else:
121+
protx_output = self.node.protx(
122+
"register", self.collateral_txid, self.collateral_vout, addrs_core_p2p, self.address_owner, self.operator_pk,
123+
self.address_voting, 0, self.address_reward, self.address_funds, submit)
111124
if not submit:
112125
return ""
113126
self.provider_txid = protx_output
@@ -194,6 +207,38 @@ def run_test(self):
194207

195208
self.node_evo.generate_collateral(self)
196209

210+
self.test_validation()
211+
self.test_deprecation()
212+
213+
def test_validation(self):
214+
self.log.info("Test input validation for masternode address fields")
215+
# Arrays of addresses are recognized by coreP2PAddrs
216+
self.node_evo.register_mn(self, False, [f"127.0.0.1:{self.node_evo.port_p2p}", f"127.0.0.2:9998"], "22200", "22201",
217+
-8, f"Error setting coreP2PAddrs[1] to '127.0.0.2:9998' (too many entries)")
218+
219+
# platformP2PPort and platformHTTPPort doesn't accept non-numeric inputs
220+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "127.0.0.1:22200", "22201",
221+
-8, "platformP2PPort must be a 32bit integer (not '127.0.0.1:22200')")
222+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", ["127.0.0.1:22200"], "22201",
223+
-8, "Invalid param for platformP2PPort, must be number")
224+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "22200", "127.0.0.1:22201",
225+
-8, "platformHTTPPort must be a 32bit integer (not '127.0.0.1:22201')")
226+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "22200", ["127.0.0.1:22201"],
227+
-8, "Invalid param for platformHTTPPort, must be number")
228+
229+
# platformP2PPort and platformHTTPPort must be within acceptable range (i.e. a valid port number)
230+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "0", "22201",
231+
-8, "platformP2PPort must be a valid port [1-65535]")
232+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "65536", "22201",
233+
-8, "platformP2PPort must be a valid port [1-65535]")
234+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "22200", "0",
235+
-8, "platformHTTPPort must be a valid port [1-65535]")
236+
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.port_p2p}", "22200", "65536",
237+
-8, "platformHTTPPort must be a valid port [1-65535]")
238+
239+
def test_deprecation(self):
240+
self.log.info("Test output masternode address fields for consistency")
241+
197242
# netInfo is represented with JSON in CProRegTx, CProUpServTx, CDeterministicMNState and CSimplifiedMNListEntry,
198243
# so we need to test calls that rely on these underlying implementations. Start by collecting RPC responses.
199244
self.log.info("Collect JSON RPC responses from node")

0 commit comments

Comments
 (0)