MCPcopy Create free account
hub / github.com/ElementsProject/elements / run_test

Method run_test

test/functional/p2p_ping.py:54–122  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

52 self.nodes[0].setmocktime(self.mock_time)
53
54 def run_test(self):
55 self.mock_time = int(time.time())
56 self.mock_forward(0)
57
58 self.log.info('Check that ping is sent after connection is established')
59 no_pong_node = self.nodes[0].add_p2p_connection(NodeNoPong())
60 self.mock_forward(3)
61 assert no_pong_node.last_message.pop('ping').nonce != 0
62 self.check_peer_info(pingtime=None, minping=None, pingwait=3)
63
64 self.log.info('Reply without nonce cancels ping')
65 with self.nodes[0].assert_debug_log(['pong peer=0: Short payload']):
66 no_pong_node.send_and_ping(msg_pong_corrupt())
67 self.check_peer_info(pingtime=None, minping=None, pingwait=None)
68
69 self.log.info('Reply without ping')
70 with self.nodes[0].assert_debug_log([
71 'pong peer=0: Unsolicited pong without ping, 0 expected, 0 received, 8 bytes',
72 ]):
73 no_pong_node.send_and_ping(msg_pong())
74 self.check_peer_info(pingtime=None, minping=None, pingwait=None)
75
76 self.log.info('Reply with wrong nonce does not cancel ping')
77 assert 'ping' not in no_pong_node.last_message
78 with self.nodes[0].assert_debug_log(['pong peer=0: Nonce mismatch']):
79 # mock time PING_INTERVAL ahead to trigger node into sending a ping
80 self.mock_forward(PING_INTERVAL + 1)
81 no_pong_node.wait_until(lambda: 'ping' in no_pong_node.last_message)
82 self.mock_forward(9)
83 # Send the wrong pong
84 no_pong_node.send_and_ping(msg_pong(no_pong_node.last_message.pop('ping').nonce - 1))
85 self.check_peer_info(pingtime=None, minping=None, pingwait=9)
86
87 self.log.info('Reply with zero nonce does cancel ping')
88 with self.nodes[0].assert_debug_log(['pong peer=0: Nonce zero']):
89 no_pong_node.send_and_ping(msg_pong(0))
90 self.check_peer_info(pingtime=None, minping=None, pingwait=None)
91
92 self.log.info('Check that ping is properly reported on RPC')
93 assert 'ping' not in no_pong_node.last_message
94 # mock time PING_INTERVAL ahead to trigger node into sending a ping
95 self.mock_forward(PING_INTERVAL + 1)
96 no_pong_node.wait_until(lambda: 'ping' in no_pong_node.last_message)
97 ping_delay = 29
98 self.mock_forward(ping_delay)
99 no_pong_node.wait_until(lambda: 'ping' in no_pong_node.last_message)
100 no_pong_node.send_and_ping(msg_pong(no_pong_node.last_message.pop('ping').nonce))
101 self.check_peer_info(pingtime=ping_delay, minping=ping_delay, pingwait=None)
102
103 self.log.info('Check that minping is decreased after a fast roundtrip')
104 # mock time PING_INTERVAL ahead to trigger node into sending a ping
105 self.mock_forward(PING_INTERVAL + 1)
106 no_pong_node.wait_until(lambda: 'ping' in no_pong_node.last_message)
107 ping_delay = 9
108 self.mock_forward(ping_delay)
109 no_pong_node.wait_until(lambda: 'ping' in no_pong_node.last_message)
110 no_pong_node.send_and_ping(msg_pong(no_pong_node.last_message.pop('ping').nonce))
111 self.check_peer_info(pingtime=ping_delay, minping=ping_delay, pingwait=None)

Callers

nothing calls this directly

Calls 12

mock_forwardMethod · 0.95
check_peer_infoMethod · 0.95
msg_pongClass · 0.90
NodeNoPongClass · 0.85
msg_pong_corruptClass · 0.85
infoMethod · 0.80
add_p2p_connectionMethod · 0.45
assert_debug_logMethod · 0.45
send_and_pingMethod · 0.45
wait_untilMethod · 0.45
sync_with_pingMethod · 0.45
wait_for_disconnectMethod · 0.45

Tested by

no test coverage detected