Skip to content

Commit

Permalink
test: make p2p_handshake robust against timeoffset warnings
Browse files Browse the repository at this point in the history
The test requires that limited nodes are not peered with  when
the node's system time exceeds ~ 24h of the node's chaintip
timestamp, as per PeerManagerImpl::GetDesirableServiceFlags.

By patching this test to modify the timestamp of the chaintip as
opposed to mocking the node's system time, we make it resilient
to future commits where the node raises a warning if it detects
its system time is too much out of sync with its outbound peers.

See bitcoin#29623
  • Loading branch information
stickies-v committed Mar 22, 2024
1 parent 71b6319 commit 032a597
Showing 1 changed file with 7 additions and 2 deletions.
9 changes: 7 additions & 2 deletions test/functional/p2p_handshake.py
Original file line number Diff line number Diff line change
Expand Up @@ -62,6 +62,11 @@ def test_desirable_service_flags(self, node, service_flag_tests, desirable_servi
assert (services & desirable_service_flags) == desirable_service_flags
self.add_outbound_connection(node, conn_type, services, wait_for_disconnect=False)

def generate_at_mocktime(self, time):
self.nodes[0].setmocktime(time)
self.generate(self.nodes[0], 1)
self.nodes[0].setmocktime(0)

def run_test(self):
node = self.nodes[0]
self.log.info("Check that lacking desired service flags leads to disconnect (non-pruned peers)")
Expand All @@ -71,10 +76,10 @@ def run_test(self):
DESIRABLE_SERVICE_FLAGS_FULL, expect_disconnect=False)

self.log.info("Check that limited peers are only desired if the local chain is close to the tip (<24h)")
node.setmocktime(int(time.time()) + 25 * 3600) # tip outside the 24h window, should fail
self.generate_at_mocktime(int(time.time()) - 25 * 3600) # tip outside the 24h window, should fail
self.test_desirable_service_flags(node, [NODE_NETWORK_LIMITED | NODE_WITNESS],
DESIRABLE_SERVICE_FLAGS_FULL, expect_disconnect=True)
node.setmocktime(int(time.time()) + 23 * 3600) # tip inside the 24h window, should succeed
self.generate_at_mocktime(int(time.time()) - 23 * 3600) # tip inside the 24h window, should succeed
self.test_desirable_service_flags(node, [NODE_NETWORK_LIMITED | NODE_WITNESS],
DESIRABLE_SERVICE_FLAGS_PRUNED, expect_disconnect=False)

Expand Down

0 comments on commit 032a597

Please sign in to comment.