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

Method run_test

test/functional/p2p_getaddr_caching.py:46–85  ·  view source on GitHub ↗
(self)

Source from the content-addressed store, hash-verified

44 self.num_nodes = 1
45
46 def run_test(self):
47 self.log.info('Fill peer AddrMan with a lot of records')
48 for i in range(10000):
49 first_octet = i >> 8
50 second_octet = i % 256
51 a = "{}.{}.1.1".format(first_octet, second_octet)
52 self.nodes[0].addpeeraddress(a, 8333)
53
54 # Need to make sure we hit MAX_ADDR_TO_SEND records in the addr response later because
55 # only a fraction of all known addresses can be cached and returned.
56 assert(len(self.nodes[0].getnodeaddresses(0)) > int(MAX_ADDR_TO_SEND / (MAX_PCT_ADDR_TO_SEND / 100)))
57
58 responses = []
59 self.log.info('Send many addr requests within short time to receive same response')
60 N = 5
61 cur_mock_time = int(time.time())
62 for i in range(N):
63 addr_receiver = self.nodes[0].add_p2p_connection(AddrReceiver())
64 addr_receiver.send_and_ping(msg_getaddr())
65 # Trigger response
66 cur_mock_time += 5 * 60
67 self.nodes[0].setmocktime(cur_mock_time)
68 addr_receiver.wait_until(addr_receiver.addr_received)
69 responses.append(addr_receiver.get_received_addrs())
70 for response in responses[1:]:
71 assert_equal(response, responses[0])
72 assert(len(response) == MAX_ADDR_TO_SEND)
73
74 cur_mock_time += 3 * 24 * 60 * 60
75 self.nodes[0].setmocktime(cur_mock_time)
76
77 self.log.info('After time passed, see a new response to addr request')
78 last_addr_receiver = self.nodes[0].add_p2p_connection(AddrReceiver())
79 last_addr_receiver.send_and_ping(msg_getaddr())
80 # Trigger response
81 cur_mock_time += 5 * 60
82 self.nodes[0].setmocktime(cur_mock_time)
83 last_addr_receiver.wait_until(last_addr_receiver.addr_received)
84 # new response is different
85 assert(set(responses[0]) != set(last_addr_receiver.get_received_addrs()))
86
87
88if __name__ == '__main__':

Callers

nothing calls this directly

Calls 10

msg_getaddrClass · 0.90
assert_equalFunction · 0.90
infoMethod · 0.80
formatMethod · 0.80
setmocktimeMethod · 0.80
get_received_addrsMethod · 0.80
AddrReceiverClass · 0.70
add_p2p_connectionMethod · 0.45
send_and_pingMethod · 0.45
wait_untilMethod · 0.45

Tested by

no test coverage detected