(self)
| 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 | |
| 88 | if __name__ == '__main__': |
nothing calls this directly
no test coverage detected