scripted-diff: Use the C++11 keyword nullptr to denote the pointer literal instead...
[bitcoinplatinum.git] / test / functional / p2p-timeouts.py
blobc3b29c215b7d37b46c5546c482b24c7748800820
1 #!/usr/bin/env python3
2 # Copyright (c) 2016 The Bitcoin Core developers
3 # Distributed under the MIT software license, see the accompanying
4 # file COPYING or http://www.opensource.org/licenses/mit-license.php.
5 """Test various net timeouts.
7 - Create three bitcoind nodes:
9 no_verack_node - we never send a verack in response to their version
10 no_version_node - we never send a version (only a ping)
11 no_send_node - we never send any P2P message.
13 - Start all three nodes
14 - Wait 1 second
15 - Assert that we're connected
16 - Send a ping to no_verack_node and no_version_node
17 - Wait 30 seconds
18 - Assert that we're still connected
19 - Send a ping to no_verack_node and no_version_node
20 - Wait 31 seconds
21 - Assert that we're no longer connected (timeout to receive version/verack is 60 seconds)
22 """
24 from time import sleep
26 from test_framework.mininode import *
27 from test_framework.test_framework import BitcoinTestFramework
28 from test_framework.util import *
30 class TestNode(NodeConnCB):
31 def on_version(self, conn, message):
32 # Don't send a verack in response
33 pass
35 class TimeoutsTest(BitcoinTestFramework):
36 def __init__(self):
37 super().__init__()
38 self.setup_clean_chain = True
39 self.num_nodes = 1
41 def run_test(self):
42 # Setup the p2p connections and start up the network thread.
43 self.no_verack_node = TestNode() # never send verack
44 self.no_version_node = TestNode() # never send version (just ping)
45 self.no_send_node = TestNode() # never send anything
47 connections = []
48 connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.no_verack_node))
49 connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.no_version_node, send_version=False))
50 connections.append(NodeConn('127.0.0.1', p2p_port(0), self.nodes[0], self.no_send_node, send_version=False))
51 self.no_verack_node.add_connection(connections[0])
52 self.no_version_node.add_connection(connections[1])
53 self.no_send_node.add_connection(connections[2])
55 NetworkThread().start() # Start up network handling in another thread
57 sleep(1)
59 assert(self.no_verack_node.connected)
60 assert(self.no_version_node.connected)
61 assert(self.no_send_node.connected)
63 ping_msg = msg_ping()
64 connections[0].send_message(ping_msg)
65 connections[1].send_message(ping_msg)
67 sleep(30)
69 assert "version" in self.no_verack_node.last_message
71 assert(self.no_verack_node.connected)
72 assert(self.no_version_node.connected)
73 assert(self.no_send_node.connected)
75 connections[0].send_message(ping_msg)
76 connections[1].send_message(ping_msg)
78 sleep(31)
80 assert(not self.no_verack_node.connected)
81 assert(not self.no_version_node.connected)
82 assert(not self.no_send_node.connected)
84 if __name__ == '__main__':
85 TimeoutsTest().main()