Skip to content

Commit 2ba86f9

Browse files
committed
test: use domains in functional test, add test for unique map checking
1 parent 7b0de72 commit 2ba86f9

File tree

1 file changed

+65
-0
lines changed

1 file changed

+65
-0
lines changed

test/functional/rpc_netinfo.py

Lines changed: 65 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -35,6 +35,21 @@
3535
PROTXVER_BASIC = 2
3636
PROTXVER_EXTADDR = 3
3737

38+
# Sample domains
39+
DOMAINS_CLR = [
40+
"server-1.example.com",
41+
"server-2.example.com",
42+
]
43+
DOMAINS_TOR = [
44+
"kpgvmscirrdqpekbqjsvw5teanhatztpp2gl6eee4zkowvwfxwenqaid.onion",
45+
"pg6mmjiyjmcrsslvykfwnntlaru7p5svn6y2ymmju6nubxndf4pscryd.onion",
46+
]
47+
DOMAINS_I2P = [
48+
"c4gfnttsuwqomiygupdqqqyy5y5emnk5c73hrfvatri67prd7vyq.b32.i2p",
49+
"udhdrtrcetjm5sxzskjyr5ztpeszydbh4dpl3pl4utgqqw2v4jna.b32.i2p",
50+
"ukeu3k5oycgaauneqgtnvselmt4yemvoilkln7jpvamvfx7dnkdq.b32.i2p",
51+
]
52+
3853
class EvoNode:
3954
mn: MasternodeInfo
4055
node: TestNode
@@ -191,6 +206,12 @@ def run_test(self):
191206
self.test_empty_fields()
192207
self.log.info("Test output masternode address fields for consistency (post-fork)")
193208
self.test_shims()
209+
# Need to destroy masternodes as the next test will be re-creating them
210+
self.node_evo.destroy_mn(self)
211+
self.node_two.destroy_mn(self)
212+
self.reconnect_nodes()
213+
self.log.info("Test unique properties map duplication checks")
214+
self.test_uniqueness()
194215

195216
def test_validation_common(self):
196217
# Arrays of addresses with invalid inputs get refused
@@ -326,6 +347,15 @@ def test_validation_extended(self):
326347
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.mn.nodePort}", DEFAULT_PORT_PLATFORM_P2P,
327348
[f"127.0.0.1:{DEFAULT_PORT_PLATFORM_HTTP}"])])[0]['allowed']
328349

350+
# coreP2PAddrs and platformP2PAddrs accept privacy network domains and platformHTTPSAddrs additionally supports internet domains
351+
# Note: I2P entries cannot be differentiated by port, they must always use port 0
352+
assert self.node_evo.node.testmempoolaccept([
353+
self.node_evo.register_mn(self, False,
354+
[f"127.0.0.1:{self.node_evo.mn.nodePort}", f"{DOMAINS_TOR[0]}:{self.node_evo.mn.nodePort}", f"{DOMAINS_I2P[0]}:0"],
355+
[f"127.0.0.1:{DEFAULT_PORT_PLATFORM_P2P}", f"{DOMAINS_TOR[0]}:{DEFAULT_PORT_PLATFORM_P2P}", f"{DOMAINS_I2P[1]}:0"],
356+
[f"127.0.0.1:{DEFAULT_PORT_PLATFORM_HTTP}", f"{DOMAINS_TOR[0]}:{DEFAULT_PORT_PLATFORM_HTTP}", f"{DOMAINS_I2P[2]}:0",
357+
f"{DOMAINS_CLR[0]}:{DEFAULT_PORT_PLATFORM_HTTP}"] )])[0]['allowed']
358+
329359
# Port numbers may not be wrapped in arrays, either as integers or strings
330360
self.node_evo.register_mn(self, False, f"127.0.0.1:{self.node_evo.mn.nodePort}", [DEFAULT_PORT_PLATFORM_P2P], DEFAULT_PORT_PLATFORM_HTTP,
331361
-8, "Invalid param for platformP2PAddrs[0], must be string")
@@ -511,5 +541,40 @@ def test_shims(self):
511541
self.node_evo.set_active_state(self, False)
512542
self.reconnect_nodes()
513543

544+
def test_uniqueness(self):
545+
# Empty registrations are not registered as conflicts
546+
self.node_evo.register_mn(self, True, "", "", "")
547+
self.node_two.register_mn(self, True, "", "", "")
548+
549+
# Validate that the unique properties map correctly recognizes entries as duplicates
550+
self.node_evo.update_mn(self, True,
551+
[f"127.0.0.1:{self.node_evo.mn.nodePort}", f"{DOMAINS_TOR[0]}:{self.node_evo.mn.nodePort}"],
552+
[f"127.0.0.1:{DEFAULT_PORT_PLATFORM_P2P}", f"{DOMAINS_I2P[0]}:0"],
553+
[f"127.0.0.1:{DEFAULT_PORT_PLATFORM_HTTP}", f"{DOMAINS_CLR[0]}:{DEFAULT_PORT_PLATFORM_HTTP}"])
554+
555+
def update_node_two(self, duplicate_addr = None, duplicate_tor = None, duplicate_i2p = None, duplicate_domain = None):
556+
args = [
557+
self, True,
558+
[duplicate_addr or f"127.0.0.2:{self.node_two.mn.nodePort}", duplicate_tor or f"{DOMAINS_TOR[1]}:{self.node_two.mn.nodePort}"],
559+
[f"127.0.0.2:{DEFAULT_PORT_PLATFORM_P2P}", duplicate_i2p or f"{DOMAINS_I2P[1]}:0"],
560+
[f"127.0.0.2:{DEFAULT_PORT_PLATFORM_HTTP}", duplicate_domain or f"{DOMAINS_CLR[1]}:{DEFAULT_PORT_PLATFORM_HTTP}"]
561+
]
562+
if duplicate_addr or duplicate_tor or duplicate_i2p or duplicate_domain:
563+
args += [-1, "bad-protx-dup-netinfo-entry"]
564+
self.node_two.update_mn(*args)
565+
566+
# Check for detection of duplicate IP:addr (CService)
567+
update_node_two(self, duplicate_addr=f"127.0.0.1:{self.node_evo.mn.nodePort}")
568+
569+
# Check for detection of duplicate privacy addr (CService)
570+
update_node_two(self, duplicate_tor=f"{DOMAINS_TOR[0]}:{self.node_evo.mn.nodePort}")
571+
update_node_two(self, duplicate_i2p=f"{DOMAINS_I2P[0]}:0")
572+
573+
# Check for detection of duplicate internet addr (DomainPort)
574+
update_node_two(self, duplicate_domain=f"{DOMAINS_CLR[0]}:{DEFAULT_PORT_PLATFORM_HTTP}")
575+
576+
# All non-duplicate entries should still succeed
577+
update_node_two(self)
578+
514579
if __name__ == "__main__":
515580
NetInfoTest().main()

0 commit comments

Comments
 (0)